Make cin be static
[oweals/busybox.git] / init.c
diff --git a/init.c b/init.c
index 7af8c4a95178aaf9b653de944eb5f0a7c6aedf43..86906487f1e2030be207d851c81b5683219274bf 100644 (file)
--- a/init.c
+++ b/init.c
@@ -27,7 +27,7 @@
 #define DEBUG_INIT
 */
 
-#include "internal.h"
+#include "busybox.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
@@ -56,7 +56,7 @@ struct vt_stat {
        unsigned short v_signal;        /* signal to send */
        unsigned short v_state;         /* vt bitmask */
 };
-#define VT_GETSTATE     0x5603  /* get global vt state info */
+static const int VT_GETSTATE = 0x5603;  /* get global vt state info */
 
 /* From <linux/serial.h> */
 struct serial_struct {
@@ -79,12 +79,12 @@ struct serial_struct {
 
 
 #ifndef RB_HALT_SYSTEM
-#define RB_HALT_SYSTEM  0xcdef0123
-#define RB_ENABLE_CAD   0x89abcdef
-#define RB_DISABLE_CAD  0
+static const int RB_HALT_SYSTEM = 0xcdef0123;
+static const int RB_ENABLE_CAD = 0x89abcdef;
+static const int RB_DISABLE_CAD = 0;
 #define RB_POWER_OFF    0x4321fedc
-#define RB_AUTOBOOT     0x01234567
-#if defined(__GLIBC__)
+static const int RB_AUTOBOOT = 0x01234567;
+#if defined(__GLIBC__) || defined (__UCLIBC__)
 #include <sys/reboot.h>
   #define init_reboot(magic) reboot(magic)
 #else
@@ -131,8 +131,8 @@ static _syscall2(int, bdflush, int, func, int, data);
 #define INIT_SCRIPT  "/etc/init.d/rcS"   /* Default sysinit script. */
 #endif
 
-#define LOG     0x1
-#define CONSOLE 0x2
+static const int LOG = 0x1;
+static const int CONSOLE = 0x2;
 
 /* Allowed init action types */
 typedef enum {
@@ -288,30 +288,27 @@ void set_term(int fd)
        tcsetattr(fd, TCSANOW, &tty);
 }
 
-/* How much memory does this machine have? */
+/* How much memory does this machine have?
+   Units are kBytes to avoid overflow on 4GB machines */
 static int check_free_memory()
 {
        struct sysinfo info;
+       unsigned int result, u, s=10;
 
-       /* Pre initialize mem_unit in case this kernel is something prior to
-        * the linux 2.4 kernel (which will actually fill in mem_unit... */
-       sysinfo(&info);
        if (sysinfo(&info) != 0) {
-               printf("Error checking free memory: %s\n", strerror(errno));
+               perror_msg("Error checking free memory: ");
                return -1;
        }
-       /* Kernels prior to 2.4.x will return info.mem_unit==0, so cope... */
-       if (info.mem_unit==0) {
-               info.mem_unit=1;
-       }
-       info.mem_unit*=1024;
-       
-       /* Note:  These values can in theory overflow a 32 bit unsigned long (i.e.
-        * mem >=  Gib), but who puts more then 4GiB ram+swap on an embedded
-        * system? */
-       info.totalram/=info.mem_unit; 
-       info.totalswap/=info.mem_unit;
-       return(info.totalram+info.totalswap);
+
+       /* Kernels 2.0.x and 2.2.x return info.mem_unit==0 with values in bytes.
+        * Kernels 2.4.0 return info.mem_unit in bytes. */
+       u = info.mem_unit;
+       if (u==0) u=1;
+       while ( (u&1) == 0 && s > 0 ) { u>>=1; s--; }
+       result = (info.totalram>>s) + (info.totalswap>>s);
+       result = result*u;
+       if (result < 0) result = INT_MAX;
+       return result;
 }
 
 static void console_init()
@@ -403,6 +400,10 @@ static pid_t run(char *command, char *terminal, int get_enter)
        char buf[255];
        static const char press_enter[] =
 
+#ifdef CUSTOMIZED_BANNER
+#include CUSTOMIZED_BANNER
+#endif
+
                "\nPlease press Enter to activate this console. ";
        char *environment[] = {
                "HOME=/",
@@ -448,14 +449,13 @@ static pid_t run(char *command, char *terminal, int get_enter)
                         * be allowed to start a shell or whatever an init script 
                         * specifies.
                         */
-                       char c;
 #ifdef DEBUG_INIT
                        pid_t shell_pgid = getpid();
                        message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\r\n",
                                        command, shell_pgid, terminal);
 #endif
                        write(fileno(stdout), press_enter, sizeof(press_enter) - 1);
-                       read(fileno(stdin), &c, 1);
+                       getc(stdin);
                }
 
 #ifdef DEBUG_INIT
@@ -661,6 +661,10 @@ static void reboot_signal(int sig)
 
 #if defined BB_FEATURE_INIT_CHROOT
 
+#warning BB_FEATURE_INIT_CHROOT is out of date and should be rewritten to us
+#warning pivot root instead.  Do not even bother till this work is done...
+#warning You have been warned.
+
 #if ! defined BB_FEATURE_USE_PROCFS
 #error Sorry, I depend on the /proc filesystem right now.
 #endif
@@ -819,9 +823,9 @@ void parse_inittab(void)
                /* No inittab file -- set up some default behavior */
 #endif
                /* Swapoff on halt/reboot */
-               new_initAction(CTRLALTDEL, "/sbin/swapoff -a > /dev/null 2>&1", console);
+               new_initAction(CTRLALTDEL, "/sbin/swapoff -a", console);
                /* Umount all filesystems on halt/reboot */
-               new_initAction(CTRLALTDEL, "/bin/umount -a -r > /dev/null 2>&1", console);
+               new_initAction(CTRLALTDEL, "/bin/umount -a -r", console);
                /* Askfirst shell on tty1 */
                new_initAction(ASKFIRST, SHELL, console);
                /* Askfirst shell on tty2 */
@@ -1016,7 +1020,8 @@ extern int init_main(int argc, char **argv)
        }
 
        /* Fix up argv[0] to be certain we claim to be init */
-       strncpy(argv[0], "init", strlen(argv[0])+1);
+       argv[0]="init";
+
        if (argc > 1)
                strncpy(argv[1], "\0", strlen(argv[1])+1);