Oops. Forgot the usleep.c file.
[oweals/busybox.git] / init.c
diff --git a/init.c b/init.c
index 9079165375519b41ca5f52e92bed7af06cb6ad92..d61d1c38eb214aa3dc00dde510447cedd820c281 100644 (file)
--- a/init.c
+++ b/init.c
@@ -45,7 +45,7 @@
 #include <sys/reboot.h>
 #include <sys/sysinfo.h>               /* For check_free_memory() */
 #ifdef BB_SYSLOGD
-#include <sys/syslog.h>
+# include <sys/syslog.h>
 #endif
 #include <sys/sysmacros.h>
 #include <sys/types.h>
 #include <termios.h>
 #include <unistd.h>
 
+
+#if defined BB_FEATURE_INIT_COREDUMPS
+/*
+ * When a file named CORE_ENABLE_FLAG_FILE exists, setrlimit is called 
+ * before processes are spawned to set core file size as unlimited.
+ * This is for debugging only.  Don't use this is production, unless
+ * you want core dumps lying about....
+ */
+#define CORE_ENABLE_FLAG_FILE "/.init_enable_core"
+#include <sys/resource.h>
+#include <sys/time.h>
+#endif
+
 #ifndef KERNEL_VERSION
 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
 #endif
@@ -406,6 +419,18 @@ static pid_t run(char *command, char *terminal, int get_enter)
                        cmd[i] = NULL;
                }
 
+#if defined BB_FEATURE_INIT_COREDUMPS
+               {
+                       struct stat sb;
+                       if (stat (CORE_ENABLE_FLAG_FILE, &sb) == 0) {
+                               struct rlimit limit;
+                               limit.rlim_cur = RLIM_INFINITY;
+                               limit.rlim_max = RLIM_INFINITY;
+                               setrlimit(RLIMIT_CORE, &limit);
+                       }
+               }
+#endif
+
                /* Now run it.  The new program will take over this PID, 
                 * so nothing further in init.c should be run. */
                execve(cmd[0], cmd, environment);
@@ -836,6 +861,7 @@ extern int init_main(int argc, char **argv)
        close(1);
        close(2);
        set_term(0);
+       chdir("/");
        setsid();
 
        /* Make sure PATH is set to something sane */
@@ -881,7 +907,7 @@ extern int init_main(int argc, char **argv)
                 * of "askfirst" shells */
                parse_inittab();
        }
-       
+
        /* Fix up argv[0] to be certain we claim to be init */
        strncpy(argv[0], "init", strlen(argv[0])+1);
        if (argc > 1)