diff options
author | Erik Andersen <andersen@codepoet.org> | 2000-04-28 00:18:56 +0000 |
---|---|---|
committer | Erik Andersen <andersen@codepoet.org> | 2000-04-28 00:18:56 +0000 |
commit | 4f3f757d56fbf420ea5030dcf7ea971b3da3ab47 (patch) | |
tree | d986e9bb9f03bf1f83465c274c35c0d58ed544e4 /init/init.c | |
parent | 227a59b05d6df9b4be5990915646249d6f548822 (diff) | |
download | busybox-w32-4f3f757d56fbf420ea5030dcf7ea971b3da3ab47.tar.gz busybox-w32-4f3f757d56fbf420ea5030dcf7ea971b3da3ab47.tar.bz2 busybox-w32-4f3f757d56fbf420ea5030dcf7ea971b3da3ab47.zip |
Latest and greatest. Some effort at libc5 (aiming towards newlib)
compatability.
-Erik
Diffstat (limited to 'init/init.c')
-rw-r--r-- | init/init.c | 61 |
1 files changed, 43 insertions, 18 deletions
diff --git a/init/init.c b/init/init.c index af10f98f0..29d8f48f9 100644 --- a/init/init.c +++ b/init/init.c | |||
@@ -28,31 +28,50 @@ | |||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include "internal.h" | 30 | #include "internal.h" |
31 | #include <asm/types.h> | 31 | #include <stdio.h> |
32 | #include <stdlib.h> | ||
32 | #include <errno.h> | 33 | #include <errno.h> |
33 | #include <linux/serial.h> /* for serial_struct */ | ||
34 | #include <linux/version.h> | ||
35 | #include <paths.h> | 34 | #include <paths.h> |
36 | #include <signal.h> | 35 | #include <signal.h> |
37 | #include <stdarg.h> | 36 | #include <stdarg.h> |
38 | #include <stdio.h> | ||
39 | #include <stdlib.h> | ||
40 | #include <string.h> | 37 | #include <string.h> |
38 | #include <termios.h> | ||
39 | #include <unistd.h> | ||
40 | #include <asm/types.h> | ||
41 | #include <linux/serial.h> /* for serial_struct */ | ||
42 | #include <linux/version.h> | ||
43 | #include <linux/reboot.h> | ||
44 | #include <linux/unistd.h> | ||
45 | #include <sys/sysinfo.h> /* For check_free_memory() */ | ||
41 | #include <sys/fcntl.h> | 46 | #include <sys/fcntl.h> |
42 | #include <sys/ioctl.h> | 47 | #include <sys/ioctl.h> |
43 | #include <sys/kdaemon.h> | ||
44 | #include <sys/mount.h> | 48 | #include <sys/mount.h> |
45 | #include <sys/reboot.h> | ||
46 | #include <sys/sysinfo.h> /* For check_free_memory() */ | ||
47 | #ifdef BB_SYSLOGD | ||
48 | # include <sys/syslog.h> | ||
49 | #endif | ||
50 | #include <sys/sysmacros.h> | 49 | #include <sys/sysmacros.h> |
51 | #include <sys/types.h> | 50 | #include <sys/types.h> |
52 | #include <sys/vt.h> /* for vt_stat */ | 51 | #include <sys/vt.h> /* for vt_stat */ |
53 | #include <sys/wait.h> | 52 | #include <sys/wait.h> |
54 | #include <termios.h> | 53 | #ifdef BB_SYSLOGD |
55 | #include <unistd.h> | 54 | # include <sys/syslog.h> |
55 | #endif | ||
56 | |||
57 | |||
58 | #ifndef RB_HALT_SYSTEM | ||
59 | #define RB_HALT_SYSTEM 0xcdef0123 | ||
60 | #define RB_ENABLE_CAD 0x89abcdef | ||
61 | #define RB_DISABLE_CAD 0 | ||
62 | #define RB_POWER_OFF 0x4321fedc | ||
63 | #define RB_AUTOBOOT 0x01234567 | ||
64 | #if defined(__GLIBC__) | ||
65 | #include <sys/reboot.h> | ||
66 | #define init_reboot(magic) reboot(magic) | ||
67 | #else | ||
68 | #define init_reboot(magic) reboot(0xfee1dead, 672274793, magic) | ||
69 | #endif | ||
70 | #endif | ||
71 | |||
72 | #ifndef _PATH_STDPATH | ||
73 | #define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" | ||
74 | #endif | ||
56 | 75 | ||
57 | 76 | ||
58 | #if defined BB_FEATURE_INIT_COREDUMPS | 77 | #if defined BB_FEATURE_INIT_COREDUMPS |
@@ -71,6 +90,12 @@ | |||
71 | #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) | 90 | #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) |
72 | #endif | 91 | #endif |
73 | 92 | ||
93 | #if defined(__GLIBC__) | ||
94 | #include <sys/kdaemon.h> | ||
95 | #else | ||
96 | _syscall2(int, bdflush, int, func, int, data); | ||
97 | #endif /* __GLIBC__ */ | ||
98 | |||
74 | 99 | ||
75 | #define VT_PRIMARY "/dev/tty1" /* Primary virtual console */ | 100 | #define VT_PRIMARY "/dev/tty1" /* Primary virtual console */ |
76 | #define VT_SECONDARY "/dev/tty2" /* Virtual console */ | 101 | #define VT_SECONDARY "/dev/tty2" /* Virtual console */ |
@@ -510,7 +535,7 @@ static void shutdown_system(void) | |||
510 | signal(SIGHUP, SIG_DFL); | 535 | signal(SIGHUP, SIG_DFL); |
511 | 536 | ||
512 | /* Allow Ctrl-Alt-Del to reboot system. */ | 537 | /* Allow Ctrl-Alt-Del to reboot system. */ |
513 | reboot(RB_ENABLE_CAD); | 538 | init_reboot(RB_ENABLE_CAD); |
514 | 539 | ||
515 | message(CONSOLE|LOG, "\r\nThe system is going down NOW !!\r\n"); | 540 | message(CONSOLE|LOG, "\r\nThe system is going down NOW !!\r\n"); |
516 | sync(); | 541 | sync(); |
@@ -550,10 +575,10 @@ static void halt_signal(int sig) | |||
550 | 575 | ||
551 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) | 576 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) |
552 | if (sig == SIGUSR2) | 577 | if (sig == SIGUSR2) |
553 | reboot(RB_POWER_OFF); | 578 | init_reboot(RB_POWER_OFF); |
554 | else | 579 | else |
555 | #endif | 580 | #endif |
556 | reboot(RB_HALT_SYSTEM); | 581 | init_reboot(RB_HALT_SYSTEM); |
557 | exit(0); | 582 | exit(0); |
558 | } | 583 | } |
559 | 584 | ||
@@ -566,7 +591,7 @@ static void reboot_signal(int sig) | |||
566 | /* allow time for last message to reach serial console */ | 591 | /* allow time for last message to reach serial console */ |
567 | sleep(2); | 592 | sleep(2); |
568 | 593 | ||
569 | reboot(RB_AUTOBOOT); | 594 | init_reboot(RB_AUTOBOOT); |
570 | exit(0); | 595 | exit(0); |
571 | } | 596 | } |
572 | 597 | ||
@@ -852,7 +877,7 @@ extern int init_main(int argc, char **argv) | |||
852 | 877 | ||
853 | /* Turn off rebooting via CTL-ALT-DEL -- we get a | 878 | /* Turn off rebooting via CTL-ALT-DEL -- we get a |
854 | * SIGINT on CAD so we can shut things down gracefully... */ | 879 | * SIGINT on CAD so we can shut things down gracefully... */ |
855 | reboot(RB_DISABLE_CAD); | 880 | init_reboot(RB_DISABLE_CAD); |
856 | #endif | 881 | #endif |
857 | 882 | ||
858 | /* Figure out what kernel this is running */ | 883 | /* Figure out what kernel this is running */ |