Moved some code and add a coupld #defines to support use of dmalloc.
[oweals/busybox.git] / init.c
diff --git a/init.c b/init.c
index 7236cf8512fa639f746373fb996d44a8dcb11db9..ab4ad56519f2085ebd46226be8cddba1fa5bde87 100644 (file)
--- a/init.c
+++ b/init.c
 #include <string.h>
 #include <termios.h>
 #include <unistd.h>
-#include <asm/types.h>
-#include <linux/serial.h>              /* for serial_struct */
-#include <linux/version.h>
-#include <linux/reboot.h>
-#include <linux/unistd.h>
-#include <linux/vt.h>                          /* for vt_stat */
 #include <sys/fcntl.h>
 #include <sys/ioctl.h>
 #include <sys/mount.h>
 # include <sys/syslog.h>
 #endif
 
+#define bb_need_full_version
+#define BB_DECLARE_EXTERN
+#include "messages.c"
+
+/* From <linux/vt.h> */
+struct vt_stat {
+       unsigned short v_active;        /* active vt */
+       unsigned short v_signal;        /* signal to send */
+       unsigned short v_state;         /* vt bitmask */
+};
+#define VT_GETSTATE     0x5603  /* get global vt state info */
+
+/* From <linux/serial.h> */
+struct serial_struct {
+       int     type;
+       int     line;
+       int     port;
+       int     irq;
+       int     flags;
+       int     xmit_fifo_size;
+       int     custom_divisor;
+       int     baud_base;
+       unsigned short  close_delay;
+       char    reserved_char[2];
+       int     hub6;
+       unsigned short  closing_wait; /* time to wait before closing */
+       unsigned short  closing_wait2; /* no longer used... */
+       int     reserved[4];
+};
+
+
 
 #ifndef RB_HALT_SYSTEM
 #define RB_HALT_SYSTEM  0xcdef0123
 #include <sys/time.h>
 #endif
 
-#ifndef KERNEL_VERSION
 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
-#endif
 
 #if defined(__GLIBC__)
 #include <sys/kdaemon.h>
@@ -132,7 +155,7 @@ static const struct initActionType actions[] = {
        {"wait", WAIT},
        {"once", ONCE},
        {"ctrlaltdel", CTRLALTDEL},
-       {0}
+       {0, 0}
 };
 
 /* Set up a linked list of initActions, to be read from inittab */
@@ -224,8 +247,6 @@ static void message(int device, char *fmt, ...)
        }
 }
 
-#define CTRLCHAR(ch)   ((ch)&0x1f)
-
 /* Set terminal settings to reasonable defaults */
 void set_term(int fd)
 {
@@ -234,14 +255,14 @@ void set_term(int fd)
        tcgetattr(fd, &tty);
 
        /* set control chars */
-       tty.c_cc[VINTR]  = CTRLCHAR('C');       /* Ctrl-C */
-       tty.c_cc[VQUIT]  = CTRLCHAR('\\');      /* Ctrl-\ */
-       tty.c_cc[VERASE] = CTRLCHAR('?');       /* Ctrl-? */
-       tty.c_cc[VKILL]  = CTRLCHAR('U');       /* Ctrl-U */
-       tty.c_cc[VEOF]   = CTRLCHAR('D');       /* Ctrl-D */
-       tty.c_cc[VSTOP]  = CTRLCHAR('S');       /* Ctrl-S */
-       tty.c_cc[VSTART] = CTRLCHAR('Q');       /* Ctrl-Q */
-       tty.c_cc[VSUSP]  = CTRLCHAR('Z');       /* Ctrl-Z */
+       tty.c_cc[VINTR]  = 3;   /* C-c */
+       tty.c_cc[VQUIT]  = 28;  /* C-\ */
+       tty.c_cc[VERASE] = 127; /* C-? */
+       tty.c_cc[VKILL]  = 21;  /* C-u */
+       tty.c_cc[VEOF]   = 4;   /* C-d */
+       tty.c_cc[VSTART] = 17;  /* C-q */
+       tty.c_cc[VSTOP]  = 19;  /* C-s */
+       tty.c_cc[VSUSP]  = 26;  /* C-z */
 
        /* use line dicipline 0 */
        tty.c_line = 0;
@@ -568,7 +589,7 @@ static void shutdown_system(void)
        run_lastAction();
 
        sync();
-       if (kernelVersion > 0 && kernelVersion <= 2 * 65536 + 2 * 256 + 11) {
+       if (kernelVersion > 0 && kernelVersion <= KERNEL_VERSION(2,2,11)) {
                /* bdflush, kupdate not needed for kernels >2.2.11 */
                bdflush(1, 0);
                sync();
@@ -587,11 +608,9 @@ static void halt_signal(int sig)
        /* allow time for last message to reach serial console */
        sleep(2);
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
-       if (sig == SIGUSR2)
+       if (sig == SIGUSR2 && kernelVersion >= KERNEL_VERSION(2,2,0))
                init_reboot(RB_POWER_OFF);
        else
-#endif
                init_reboot(RB_HALT_SYSTEM);
        exit(0);
 }
@@ -876,7 +895,7 @@ extern int init_main(int argc, char **argv)
        /* Expect to be invoked as init with PID=1 or be invoked as linuxrc */
        if (getpid() != 1
 #ifdef BB_FEATURE_LINUXRC
-                       && strstr(argv[0], "linuxrc") == NULL
+                       && strstr(applet_name, "linuxrc") == NULL
 #endif
                          )
        {
@@ -887,7 +906,7 @@ extern int init_main(int argc, char **argv)
        /* Set up sig handlers  -- be sure to
         * clear all of these in run() */
        signal(SIGUSR1, halt_signal);
-       signal(SIGUSR2, reboot_signal);
+       signal(SIGUSR2, halt_signal);
        signal(SIGINT, reboot_signal);
        signal(SIGTERM, reboot_signal);
 #if defined BB_FEATURE_INIT_CHROOT
@@ -923,16 +942,14 @@ extern int init_main(int argc, char **argv)
                        CONSOLE|
 #endif
                        LOG,
-                       "init started:  BusyBox v%s (%s) multi-call binary\r\n",
-                       BB_VER, BB_BT);
+                       "init started:  %s\r\n", full_version);
 #else
        message(
 #if ! defined BB_FEATURE_EXTRA_QUIET
                        CONSOLE|
 #endif
                        LOG,
-                       "init(%d) started:  BusyBox v%s (%s) multi-call binary\r\n",
-                       getpid(), BB_VER, BB_BT);
+                       "init(%d) started:  %s\r\n", getpid(), full_version);
 #endif