fix watchdog on no-mmu systems by adding -F option for rexec
authorMike Frysinger <vapier@gentoo.org>
Mon, 26 Jun 2006 21:31:17 +0000 (21:31 -0000)
committerMike Frysinger <vapier@gentoo.org>
Mon, 26 Jun 2006 21:31:17 +0000 (21:31 -0000)
include/usage.h
miscutils/watchdog.c

index 712eede63652335c2f382d8c4bcb3954cd3b30da..4aed1664dbcdd395de3f5614cdcbbea56e13aabf 100644 (file)
@@ -3372,11 +3372,12 @@ USE_FEATURE_START_STOP_DAEMON_FANCY( \
        "Mon Dec 17 10:31:44 GMT 2000"
 
 #define watchdog_trivial_usage \
-       "[-t <seconds>] DEV"
+       "[-t <seconds>] [-F] DEV"
 #define watchdog_full_usage \
        "Periodically write to watchdog device DEV.\n" \
        "Options:\n" \
-       "\t-t\tTimer period in seconds - default is 30"
+       "\t-t\tTimer period in seconds - default is 30\n" \
+       "\t-F\tStay in the foreground and don't fork"
 
 #define wc_trivial_usage \
        "[OPTION]... [FILE]..."
index e8275e68e0baa3750247f338f9b8ef558c944f33..ddd349d9bc22196f0a42c0351e277c31bb09d394 100644 (file)
@@ -15,6 +15,9 @@
 #include <stdlib.h>
 #include <signal.h>
 
+#define OPT_FOREGROUND 0x01
+#define OPT_TIMER      0x02
+
 /* Watchdog file descriptor */
 static int fd;
 
@@ -27,10 +30,13 @@ static void watchdog_shutdown(int ATTRIBUTE_UNUSED unused)
 
 int watchdog_main(int argc, char **argv)
 {
+       unsigned long opts;
        unsigned long timer_duration = 30; /* Userspace timer duration, in seconds */
        char *t_arg;
 
-       if (bb_getopt_ulflags(argc, argv, "t:", &t_arg))
+       opts = bb_getopt_ulflags(argc, argv, "Ft:", &t_arg);
+
+       if (opts & OPT_TIMER)
                timer_duration = bb_xgetlarg(t_arg, 10, 0, INT_MAX);
 
        /* We're only interested in the watchdog device .. */
@@ -38,7 +44,8 @@ int watchdog_main(int argc, char **argv)
                bb_show_usage();
 
 #ifdef BB_NOMMU
-       vfork_daemon(0, 1);
+       if (!(opts & OPT_FOREGROUND))
+               vfork_daemon_rexec(0, 1, argc, argv, "-F");
 #else
        bb_xdaemon(0, 1);
 #endif