tar: support -T - and -X -
[oweals/busybox.git] / init / bootchartd.c
index dae2fe6e977ed21f2f373531c6b0c74c25e73fe4..009e2690c5635793386447fbaa32e70082ab34f2 100644 (file)
@@ -1,8 +1,12 @@
 /* vi: set sw=4 ts=4: */
 /*
- * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
 
+//applet:IF_BOOTCHARTD(APPLET(bootchartd, BB_DIR_SBIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_BOOTCHARTD) += bootchartd.o
+
 //config:config BOOTCHARTD
 //config:      bool "bootchartd"
 //config:      default y
 #include "libbb.h"
 /* After libbb.h, since it needs sys/types.h on some systems */
 #include <sys/utsname.h>
-#include <sys/mount.h>
-#ifndef MS_SILENT
-# define MS_SILENT      (1 << 15)
-#endif
-#ifndef MNT_DETACH
-# define MNT_DETACH 0x00000002
+
+#ifdef __linux__
+# include <sys/mount.h>
+# ifndef MS_SILENT
+#  define MS_SILENT      (1 << 15)
+# endif
+# ifndef MNT_DETACH
+#  define MNT_DETACH 0x00000002
+# endif
 #endif
 
 #define BC_VERSION_STR "0.8"
@@ -174,6 +181,7 @@ static char *make_tempdir(void)
        char template[] = "/tmp/bootchart.XXXXXX";
        char *tempdir = xstrdup(mkdtemp(template));
        if (!tempdir) {
+#ifdef __linux__
                /* /tmp is not writable (happens when we are used as init).
                 * Try to mount a tmpfs, them cd and lazily unmount it.
                 * Since we unmount it at once, we can mount it anywhere.
@@ -191,6 +199,9 @@ static char *make_tempdir(void)
                if (umount2(try_dir, MNT_DETACH) != 0) {
                        bb_perror_msg_and_die("can't %smount tmpfs", "un");
                }
+#else
+               bb_perror_msg_and_die("can't create temporary directory");
+#endif
        } else {
                xchdir(tempdir);
        }
@@ -430,8 +441,7 @@ int bootchartd_main(int argc UNUSED_PARAM, char **argv)
                pid_t pid = xvfork();
                if (pid == 0) { /* child */
                        argv += 2;
-                       execvp(argv[0], argv);
-                       bb_perror_msg_and_die("can't execute '%s'", argv[0]);
+                       BB_EXECVP_or_die(argv);
                }
                /* parent */
                waitpid(pid, NULL, 0);