diff options
-rw-r--r-- | man/runscript.8 | 8 | ||||
-rw-r--r-- | src/rc/rc-applets.c | 21 |
2 files changed, 18 insertions, 11 deletions
diff --git a/man/runscript.8 b/man/runscript.8 index b219e52f..aa8f3f9a 100644 --- a/man/runscript.8 +++ b/man/runscript.8 @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd Jun 03, 2008 +.Dd Jul 03, 2008 .Dt RUNSCRIPT 8 SMM .Os OpenRC .Sh NAME @@ -214,7 +214,7 @@ is a directory, then check all it's contents too. .It Ic is_older_than Ar file1 Ar file2 ... If .Ar file1 -is older than +is newer than .Ar file2 return 0, otherwise 1. If @@ -441,6 +441,10 @@ show() } .Ed +.Sh BUGS +is_older_than should return 0 on success. +Instead we return 1 to be compliant with Gentoo baselayout. +Users are encouraged to use the is_newer_than function which returns correctly. .Sh SEE ALSO .Xr einfo 3 , .Xr rc 8 , diff --git a/src/rc/rc-applets.c b/src/rc/rc-applets.c index 77790e90..6a6216c4 100644 --- a/src/rc/rc-applets.c +++ b/src/rc/rc-applets.c @@ -408,7 +408,6 @@ static int do_shell_var(int argc, char **argv) void run_applets(int argc, char **argv) { int i = 2; - bool (*is_than) (const char *, const char *); char *p; pid_t pid = 0; @@ -439,20 +438,24 @@ void run_applets(int argc, char **argv) /* This test is perverted - historically the baselayout function * returns 0 on *failure*, which is plain wrong */ - if (strcmp(applet, "is_newer_than") == 0 || - strcmp(applet, "is_older_than") == 0) - { + if (strcmp(applet, "is_older_than") == 0) { if (argc < 3) exit (EXIT_FAILURE); - if (strcmp(applet, "is_newer_than") == 0) - is_than = &rc_older_than; - else - is_than = &rc_newer_than; while (i < argc) { - if (!is_than(argv[1], argv[i++])) + if (!rc_newer_than(argv[1], argv[i++])) exit(EXIT_SUCCESS); } exit(EXIT_FAILURE); + }; + /* This tets is correct as it's not present in baselayout */ + if (strcmp(applet, "is_newer_than") == 0) { + if (argc < 3) + exit (EXIT_FAILURE); + while (i < argc) { + if (!rc_newer_than(argv[1], argv[i++])) + exit(EXIT_FAILURE); + } + exit(EXIT_SUCCESS); }; if (applet[0] == 'e' || (applet[0] == 'v' && applet[1] == 'e')) |