aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/runscript.88
-rw-r--r--src/rc/rc-applets.c21
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'))