init: make it NOMMU-capable
httpd: trivial compile fix
This commit is contained in:
parent
a58a637bed
commit
671ca33aa1
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Busybox version: 1.10.0.svn
|
# Busybox version: 1.10.0.svn
|
||||||
# Tue Jan 8 20:29:22 2008
|
# Tue Feb 19 15:07:07 2008
|
||||||
#
|
#
|
||||||
CONFIG_HAVE_DOT_CONFIG=y
|
CONFIG_HAVE_DOT_CONFIG=y
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ CONFIG_LFS=y
|
|||||||
# Debugging Options
|
# Debugging Options
|
||||||
#
|
#
|
||||||
# CONFIG_DEBUG is not set
|
# CONFIG_DEBUG is not set
|
||||||
CONFIG_WERROR=y
|
# CONFIG_WERROR is not set
|
||||||
CONFIG_NO_DEBUG_LIB=y
|
CONFIG_NO_DEBUG_LIB=y
|
||||||
# CONFIG_DMALLOC is not set
|
# CONFIG_DMALLOC is not set
|
||||||
# CONFIG_EFENCE is not set
|
# CONFIG_EFENCE is not set
|
||||||
@ -77,13 +77,13 @@ CONFIG_MD5_SIZE_VS_SPEED=2
|
|||||||
# CONFIG_FEATURE_ETC_NETWORKS is not set
|
# CONFIG_FEATURE_ETC_NETWORKS is not set
|
||||||
CONFIG_FEATURE_EDITING=y
|
CONFIG_FEATURE_EDITING=y
|
||||||
CONFIG_FEATURE_EDITING_MAX_LEN=1024
|
CONFIG_FEATURE_EDITING_MAX_LEN=1024
|
||||||
# CONFIG_FEATURE_EDITING_FANCY_KEYS is not set
|
|
||||||
# CONFIG_FEATURE_EDITING_VI is not set
|
# CONFIG_FEATURE_EDITING_VI is not set
|
||||||
CONFIG_FEATURE_EDITING_HISTORY=15
|
CONFIG_FEATURE_EDITING_HISTORY=15
|
||||||
# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
|
# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
|
||||||
CONFIG_FEATURE_TAB_COMPLETION=y
|
CONFIG_FEATURE_TAB_COMPLETION=y
|
||||||
CONFIG_FEATURE_USERNAME_COMPLETION=y
|
CONFIG_FEATURE_USERNAME_COMPLETION=y
|
||||||
CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
|
CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
|
||||||
|
CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
|
||||||
CONFIG_FEATURE_COPYBUF_KB=4
|
CONFIG_FEATURE_COPYBUF_KB=4
|
||||||
CONFIG_MONOTONIC_SYSCALL=y
|
CONFIG_MONOTONIC_SYSCALL=y
|
||||||
CONFIG_IOCTL_HEX2STR_ERROR=y
|
CONFIG_IOCTL_HEX2STR_ERROR=y
|
||||||
@ -111,15 +111,17 @@ CONFIG_RPM=y
|
|||||||
CONFIG_FEATURE_RPM_BZ2=y
|
CONFIG_FEATURE_RPM_BZ2=y
|
||||||
CONFIG_TAR=y
|
CONFIG_TAR=y
|
||||||
CONFIG_FEATURE_TAR_CREATE=y
|
CONFIG_FEATURE_TAR_CREATE=y
|
||||||
|
CONFIG_FEATURE_TAR_GZIP=y
|
||||||
CONFIG_FEATURE_TAR_BZIP2=y
|
CONFIG_FEATURE_TAR_BZIP2=y
|
||||||
CONFIG_FEATURE_TAR_LZMA=y
|
CONFIG_FEATURE_TAR_LZMA=y
|
||||||
CONFIG_FEATURE_TAR_FROM=y
|
|
||||||
CONFIG_FEATURE_TAR_GZIP=y
|
|
||||||
CONFIG_FEATURE_TAR_COMPRESS=y
|
CONFIG_FEATURE_TAR_COMPRESS=y
|
||||||
|
CONFIG_FEATURE_TAR_AUTODETECT=y
|
||||||
|
CONFIG_FEATURE_TAR_FROM=y
|
||||||
CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
|
CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
|
||||||
CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
|
CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
|
||||||
CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
|
CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
|
||||||
CONFIG_FEATURE_TAR_LONG_OPTIONS=y
|
CONFIG_FEATURE_TAR_LONG_OPTIONS=y
|
||||||
|
CONFIG_FEATURE_TAR_UNAME_GNAME=y
|
||||||
CONFIG_UNCOMPRESS=y
|
CONFIG_UNCOMPRESS=y
|
||||||
CONFIG_UNLZMA=y
|
CONFIG_UNLZMA=y
|
||||||
CONFIG_FEATURE_LZMA_FAST=y
|
CONFIG_FEATURE_LZMA_FAST=y
|
||||||
@ -367,16 +369,16 @@ CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
|
|||||||
#
|
#
|
||||||
# Init Utilities
|
# Init Utilities
|
||||||
#
|
#
|
||||||
# CONFIG_INIT is not set
|
CONFIG_INIT=y
|
||||||
# CONFIG_DEBUG_INIT is not set
|
# CONFIG_DEBUG_INIT is not set
|
||||||
# CONFIG_FEATURE_USE_INITTAB is not set
|
CONFIG_FEATURE_USE_INITTAB=y
|
||||||
# CONFIG_FEATURE_KILL_REMOVED is not set
|
CONFIG_FEATURE_KILL_REMOVED=y
|
||||||
CONFIG_FEATURE_KILL_DELAY=0
|
CONFIG_FEATURE_KILL_DELAY=1
|
||||||
# CONFIG_FEATURE_INIT_SCTTY is not set
|
CONFIG_FEATURE_INIT_SCTTY=y
|
||||||
# CONFIG_FEATURE_INIT_SYSLOG is not set
|
CONFIG_FEATURE_INIT_SYSLOG=y
|
||||||
# CONFIG_FEATURE_EXTRA_QUIET is not set
|
CONFIG_FEATURE_EXTRA_QUIET=y
|
||||||
# CONFIG_FEATURE_INIT_COREDUMPS is not set
|
CONFIG_FEATURE_INIT_COREDUMPS=y
|
||||||
# CONFIG_FEATURE_INITRD is not set
|
CONFIG_FEATURE_INITRD=y
|
||||||
CONFIG_HALT=y
|
CONFIG_HALT=y
|
||||||
CONFIG_MESG=y
|
CONFIG_MESG=y
|
||||||
|
|
||||||
@ -391,6 +393,7 @@ CONFIG_FEATURE_ADDUSER_TO_GROUP=y
|
|||||||
CONFIG_DELGROUP=y
|
CONFIG_DELGROUP=y
|
||||||
CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
|
CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
|
||||||
CONFIG_ADDUSER=y
|
CONFIG_ADDUSER=y
|
||||||
|
CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
|
||||||
CONFIG_DELUSER=y
|
CONFIG_DELUSER=y
|
||||||
CONFIG_GETTY=y
|
CONFIG_GETTY=y
|
||||||
CONFIG_FEATURE_UTMP=y
|
CONFIG_FEATURE_UTMP=y
|
||||||
@ -459,6 +462,7 @@ CONFIG_FEATURE_SGI_LABEL=y
|
|||||||
CONFIG_FEATURE_SUN_LABEL=y
|
CONFIG_FEATURE_SUN_LABEL=y
|
||||||
CONFIG_FEATURE_OSF_LABEL=y
|
CONFIG_FEATURE_OSF_LABEL=y
|
||||||
CONFIG_FEATURE_FDISK_ADVANCED=y
|
CONFIG_FEATURE_FDISK_ADVANCED=y
|
||||||
|
CONFIG_FINDFS=y
|
||||||
CONFIG_FREERAMDISK=y
|
CONFIG_FREERAMDISK=y
|
||||||
CONFIG_FSCK_MINIX=y
|
CONFIG_FSCK_MINIX=y
|
||||||
CONFIG_MKFS_MINIX=y
|
CONFIG_MKFS_MINIX=y
|
||||||
@ -479,14 +483,48 @@ CONFIG_IPCS=y
|
|||||||
CONFIG_LOSETUP=y
|
CONFIG_LOSETUP=y
|
||||||
CONFIG_MDEV=y
|
CONFIG_MDEV=y
|
||||||
CONFIG_FEATURE_MDEV_CONF=y
|
CONFIG_FEATURE_MDEV_CONF=y
|
||||||
|
CONFIG_FEATURE_MDEV_RENAME=y
|
||||||
CONFIG_FEATURE_MDEV_EXEC=y
|
CONFIG_FEATURE_MDEV_EXEC=y
|
||||||
CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
|
CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
|
||||||
CONFIG_MKSWAP=y
|
CONFIG_MKSWAP=y
|
||||||
CONFIG_FEATURE_MKSWAP_V0=y
|
CONFIG_FEATURE_MKSWAP_V0=y
|
||||||
CONFIG_MORE=y
|
CONFIG_MORE=y
|
||||||
CONFIG_FEATURE_USE_TERMIOS=y
|
CONFIG_FEATURE_USE_TERMIOS=y
|
||||||
|
CONFIG_VOLUMEID=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_EXT=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_REISERFS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_FAT=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_HFS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_JFS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_UFS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_XFS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_NTFS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_ISO9660=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_UDF=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_LUKS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_LVM=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_CRAMFS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_HPFS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_ROMFS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_SYSV=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_MINIX=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_MAC=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_MSDOS=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_OCFS2=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_HIGHPOINTRAID=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_ISWRAID=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_LSIRAID=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_VIARAID=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_SILICONRAID=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_NVIDIARAID=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_PROMISERAID=y
|
||||||
|
CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
|
||||||
CONFIG_MOUNT=y
|
CONFIG_MOUNT=y
|
||||||
|
CONFIG_FEATURE_MOUNT_FAKE=y
|
||||||
|
CONFIG_FEATURE_MOUNT_VERBOSE=y
|
||||||
CONFIG_FEATURE_MOUNT_HELPERS=y
|
CONFIG_FEATURE_MOUNT_HELPERS=y
|
||||||
|
CONFIG_FEATURE_MOUNT_LABEL=y
|
||||||
CONFIG_FEATURE_MOUNT_NFS=y
|
CONFIG_FEATURE_MOUNT_NFS=y
|
||||||
CONFIG_FEATURE_MOUNT_CIFS=y
|
CONFIG_FEATURE_MOUNT_CIFS=y
|
||||||
CONFIG_FEATURE_MOUNT_FLAGS=y
|
CONFIG_FEATURE_MOUNT_FLAGS=y
|
||||||
@ -494,6 +532,7 @@ CONFIG_FEATURE_MOUNT_FSTAB=y
|
|||||||
CONFIG_PIVOT_ROOT=y
|
CONFIG_PIVOT_ROOT=y
|
||||||
CONFIG_RDATE=y
|
CONFIG_RDATE=y
|
||||||
CONFIG_READPROFILE=y
|
CONFIG_READPROFILE=y
|
||||||
|
CONFIG_RTCWAKE=y
|
||||||
CONFIG_SETARCH=y
|
CONFIG_SETARCH=y
|
||||||
CONFIG_SWAPONOFF=y
|
CONFIG_SWAPONOFF=y
|
||||||
CONFIG_SWITCH_ROOT=y
|
CONFIG_SWITCH_ROOT=y
|
||||||
@ -511,6 +550,14 @@ CONFIG_FEATURE_MOUNT_LOOP=y
|
|||||||
#
|
#
|
||||||
CONFIG_ADJTIMEX=y
|
CONFIG_ADJTIMEX=y
|
||||||
# CONFIG_BBCONFIG is not set
|
# CONFIG_BBCONFIG is not set
|
||||||
|
CONFIG_CHAT=y
|
||||||
|
CONFIG_FEATURE_CHAT_NOFAIL=y
|
||||||
|
CONFIG_FEATURE_CHAT_TTY_HIFI=y
|
||||||
|
CONFIG_FEATURE_CHAT_IMPLICIT_CR=y
|
||||||
|
CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y
|
||||||
|
CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
|
||||||
|
CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
|
||||||
|
CONFIG_FEATURE_CHAT_CLR_ABORT=y
|
||||||
CONFIG_CHRT=y
|
CONFIG_CHRT=y
|
||||||
# CONFIG_CROND is not set
|
# CONFIG_CROND is not set
|
||||||
# CONFIG_DEBUG_CROND_OPTION is not set
|
# CONFIG_DEBUG_CROND_OPTION is not set
|
||||||
@ -523,6 +570,7 @@ CONFIG_DC=y
|
|||||||
# CONFIG_DEVFSD_VERBOSE is not set
|
# CONFIG_DEVFSD_VERBOSE is not set
|
||||||
# CONFIG_FEATURE_DEVFS is not set
|
# CONFIG_FEATURE_DEVFS is not set
|
||||||
CONFIG_EJECT=y
|
CONFIG_EJECT=y
|
||||||
|
CONFIG_FEATURE_EJECT_SCSI=y
|
||||||
CONFIG_LAST=y
|
CONFIG_LAST=y
|
||||||
CONFIG_LESS=y
|
CONFIG_LESS=y
|
||||||
CONFIG_FEATURE_LESS_MAXLINES=9999999
|
CONFIG_FEATURE_LESS_MAXLINES=9999999
|
||||||
@ -564,6 +612,8 @@ CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
|
|||||||
CONFIG_VERBOSE_RESOLUTION_ERRORS=y
|
CONFIG_VERBOSE_RESOLUTION_ERRORS=y
|
||||||
CONFIG_ARP=y
|
CONFIG_ARP=y
|
||||||
CONFIG_ARPING=y
|
CONFIG_ARPING=y
|
||||||
|
CONFIG_BRCTL=y
|
||||||
|
CONFIG_FEATURE_BRCTL_FANCY=y
|
||||||
CONFIG_DNSD=y
|
CONFIG_DNSD=y
|
||||||
CONFIG_ETHER_WAKE=y
|
CONFIG_ETHER_WAKE=y
|
||||||
CONFIG_FAKEIDENTD=y
|
CONFIG_FAKEIDENTD=y
|
||||||
@ -633,9 +683,15 @@ CONFIG_FEATURE_NETSTAT_WIDE=y
|
|||||||
CONFIG_NSLOOKUP=y
|
CONFIG_NSLOOKUP=y
|
||||||
CONFIG_PING=y
|
CONFIG_PING=y
|
||||||
CONFIG_PING6=y
|
CONFIG_PING6=y
|
||||||
CONFIG_PSCAN=y
|
|
||||||
CONFIG_FEATURE_FANCY_PING=y
|
CONFIG_FEATURE_FANCY_PING=y
|
||||||
|
CONFIG_PSCAN=y
|
||||||
CONFIG_ROUTE=y
|
CONFIG_ROUTE=y
|
||||||
|
CONFIG_SENDMAIL=y
|
||||||
|
CONFIG_FEATURE_SENDMAIL_EHLO=y
|
||||||
|
CONFIG_FEATURE_SENDMAIL_BLOATY=y
|
||||||
|
CONFIG_FETCHMAIL=y
|
||||||
|
CONFIG_FEATURE_FETCHMAIL_APOP=y
|
||||||
|
CONFIG_FEATURE_FETCHMAIL_FILTER=y
|
||||||
CONFIG_SLATTACH=y
|
CONFIG_SLATTACH=y
|
||||||
CONFIG_TELNET=y
|
CONFIG_TELNET=y
|
||||||
CONFIG_FEATURE_TELNET_TTYPE=y
|
CONFIG_FEATURE_TELNET_TTYPE=y
|
||||||
@ -657,6 +713,7 @@ CONFIG_APP_DUMPLEASES=y
|
|||||||
CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY=y
|
CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY=y
|
||||||
CONFIG_APP_UDHCPC=y
|
CONFIG_APP_UDHCPC=y
|
||||||
CONFIG_FEATURE_UDHCPC_ARPING=y
|
CONFIG_FEATURE_UDHCPC_ARPING=y
|
||||||
|
CONFIG_FEATURE_UDHCP_PORT=y
|
||||||
CONFIG_FEATURE_UDHCP_DEBUG=y
|
CONFIG_FEATURE_UDHCP_DEBUG=y
|
||||||
CONFIG_FEATURE_RFC3397=y
|
CONFIG_FEATURE_RFC3397=y
|
||||||
CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
|
CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
|
||||||
|
48
init/init.c
48
init/init.c
@ -117,11 +117,13 @@ static void loop_forever(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Print a message to the specified device.
|
/* Print a message to the specified device.
|
||||||
* Device may be bitwise-or'd from L_LOG | L_CONSOLE */
|
* "where" may be bitwise-or'd from L_LOG | L_CONSOLE
|
||||||
|
* NB: careful, we can be called after vfork!
|
||||||
|
*/
|
||||||
#define messageD(...) do { if (ENABLE_DEBUG_INIT) message(__VA_ARGS__); } while (0)
|
#define messageD(...) do { if (ENABLE_DEBUG_INIT) message(__VA_ARGS__); } while (0)
|
||||||
static void message(int device, const char *fmt, ...)
|
static void message(int where, const char *fmt, ...)
|
||||||
__attribute__ ((format(printf, 2, 3)));
|
__attribute__ ((format(printf, 2, 3)));
|
||||||
static void message(int device, const char *fmt, ...)
|
static void message(int where, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
static int log_fd = -1;
|
static int log_fd = -1;
|
||||||
va_list arguments;
|
va_list arguments;
|
||||||
@ -137,7 +139,7 @@ static void message(int device, const char *fmt, ...)
|
|||||||
|
|
||||||
if (ENABLE_FEATURE_INIT_SYSLOG) {
|
if (ENABLE_FEATURE_INIT_SYSLOG) {
|
||||||
/* Log the message to syslogd */
|
/* Log the message to syslogd */
|
||||||
if (device & L_LOG) {
|
if (where & L_LOG) {
|
||||||
/* don't out "\r" */
|
/* don't out "\r" */
|
||||||
openlog(applet_name, 0, LOG_DAEMON);
|
openlog(applet_name, 0, LOG_DAEMON);
|
||||||
syslog(LOG_INFO, "init: %s", msg + 1);
|
syslog(LOG_INFO, "init: %s", msg + 1);
|
||||||
@ -157,20 +159,20 @@ static void message(int device, const char *fmt, ...)
|
|||||||
log_fd = device_open(log_console, O_WRONLY | O_NONBLOCK | O_NOCTTY);
|
log_fd = device_open(log_console, O_WRONLY | O_NONBLOCK | O_NOCTTY);
|
||||||
if (log_fd < 0) {
|
if (log_fd < 0) {
|
||||||
bb_error_msg("can't log to %s", log_console);
|
bb_error_msg("can't log to %s", log_console);
|
||||||
device = L_CONSOLE;
|
where = L_CONSOLE;
|
||||||
} else {
|
} else {
|
||||||
close_on_exec_on(log_fd);
|
close_on_exec_on(log_fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (device & L_LOG) {
|
if (where & L_LOG) {
|
||||||
full_write(log_fd, msg, l);
|
full_write(log_fd, msg, l);
|
||||||
if (log_fd == 2)
|
if (log_fd == 2)
|
||||||
return; /* don't print dup messages */
|
return; /* don't print dup messages */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device & L_CONSOLE) {
|
if (where & L_CONSOLE) {
|
||||||
/* Send console messages to console so people will see them. */
|
/* Send console messages to console so people will see them. */
|
||||||
full_write(2, msg, l);
|
full_write(2, msg, l);
|
||||||
}
|
}
|
||||||
@ -233,7 +235,8 @@ static void console_init(void)
|
|||||||
putenv((char*)"TERM=linux");
|
putenv((char*)"TERM=linux");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set terminal settings to reasonable defaults */
|
/* Set terminal settings to reasonable defaults.
|
||||||
|
* NB: careful, we can be called after vfork! */
|
||||||
static void set_sane_term(void)
|
static void set_sane_term(void)
|
||||||
{
|
{
|
||||||
struct termios tty;
|
struct termios tty;
|
||||||
@ -270,7 +273,8 @@ static void set_sane_term(void)
|
|||||||
tcsetattr(STDIN_FILENO, TCSANOW, &tty);
|
tcsetattr(STDIN_FILENO, TCSANOW, &tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Open the new terminal device */
|
/* Open the new terminal device.
|
||||||
|
* NB: careful, we can be called after vfork! */
|
||||||
static void open_stdio_to_tty(const char* tty_name, int exit_on_failure)
|
static void open_stdio_to_tty(const char* tty_name, int exit_on_failure)
|
||||||
{
|
{
|
||||||
/* empty tty_name means "use init's tty", else... */
|
/* empty tty_name means "use init's tty", else... */
|
||||||
@ -286,6 +290,8 @@ static void open_stdio_to_tty(const char* tty_name, int exit_on_failure)
|
|||||||
_exit(1);
|
_exit(1);
|
||||||
if (ENABLE_DEBUG_INIT)
|
if (ENABLE_DEBUG_INIT)
|
||||||
_exit(2);
|
_exit(2);
|
||||||
|
/* NB: we don't reach this if we were called after vfork.
|
||||||
|
* Thus halt_reboot_pwoff() itself need not be vfork-safe. */
|
||||||
halt_reboot_pwoff(SIGUSR1); /* halt the system */
|
halt_reboot_pwoff(SIGUSR1); /* halt the system */
|
||||||
}
|
}
|
||||||
dup2(0, 1);
|
dup2(0, 1);
|
||||||
@ -294,22 +300,24 @@ static void open_stdio_to_tty(const char* tty_name, int exit_on_failure)
|
|||||||
set_sane_term();
|
set_sane_term();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* wrapper around exec:
|
/* Wrapper around exec:
|
||||||
* takes string (max COMMAND_SIZE chars)
|
* Takes string (max COMMAND_SIZE chars).
|
||||||
* runs [-]/bin/sh -c "exec ......." if '>' etc detected.
|
* If chars like '>' detected, execs '[-]/bin/sh -c "exec ......."'.
|
||||||
* otherwise splits words on whitespace and deals with leading dash.
|
* Otherwise splits words on whitespace, deals with leading dash,
|
||||||
|
* and uses plain exec().
|
||||||
|
* NB: careful, we can be called after vfork!
|
||||||
*/
|
*/
|
||||||
static void init_exec(const char *command)
|
static void init_exec(const char *command)
|
||||||
{
|
{
|
||||||
char *cmd[COMMAND_SIZE / 2];
|
char *cmd[COMMAND_SIZE / 2];
|
||||||
char buf[COMMAND_SIZE + 6]; /* COMMAND_SIZE+strlen("exec ")+1 */
|
char buf[COMMAND_SIZE + 6]; /* COMMAND_SIZE+strlen("exec ")+1 */
|
||||||
int dash = (command[0] == '-');
|
int dash = (command[0] == '-' /* maybe? && command[1] == '/' */);
|
||||||
|
|
||||||
/* See if any special /bin/sh requiring characters are present */
|
/* See if any special /bin/sh requiring characters are present */
|
||||||
if (strpbrk(command, "~`!$^&*()=|\\{}[];\"'<>?") != NULL) {
|
if (strpbrk(command, "~`!$^&*()=|\\{}[];\"'<>?") != NULL) {
|
||||||
strcpy(buf, "exec ");
|
strcpy(buf, "exec ");
|
||||||
strcpy(buf + 5, command + dash); /* excluding "-" */
|
strcpy(buf + 5, command + dash); /* excluding "-" */
|
||||||
/* LIBBB_DEFAULT_LOGIN_SHELL has leading dash */
|
/* NB: LIBBB_DEFAULT_LOGIN_SHELL define has leading dash */
|
||||||
cmd[0] = (char*)(LIBBB_DEFAULT_LOGIN_SHELL + !dash);
|
cmd[0] = (char*)(LIBBB_DEFAULT_LOGIN_SHELL + !dash);
|
||||||
cmd[1] = (char*)"-c";
|
cmd[1] = (char*)"-c";
|
||||||
cmd[2] = buf;
|
cmd[2] = buf;
|
||||||
@ -351,7 +359,7 @@ static pid_t run(const struct init_action *a)
|
|||||||
sigemptyset(&nmask);
|
sigemptyset(&nmask);
|
||||||
sigaddset(&nmask, SIGCHLD);
|
sigaddset(&nmask, SIGCHLD);
|
||||||
sigprocmask(SIG_BLOCK, &nmask, &omask);
|
sigprocmask(SIG_BLOCK, &nmask, &omask);
|
||||||
pid = fork();
|
pid = vfork();
|
||||||
sigprocmask(SIG_SETMASK, &omask, NULL);
|
sigprocmask(SIG_SETMASK, &omask, NULL);
|
||||||
|
|
||||||
if (pid < 0)
|
if (pid < 0)
|
||||||
@ -381,6 +389,7 @@ static pid_t run(const struct init_action *a)
|
|||||||
/* Open the new terminal device */
|
/* Open the new terminal device */
|
||||||
open_stdio_to_tty(a->terminal, 1 /* - exit if open fails */);
|
open_stdio_to_tty(a->terminal, 1 /* - exit if open fails */);
|
||||||
|
|
||||||
|
// NB: do not enable unless you change vfork to fork above
|
||||||
#ifdef BUT_RUN_ACTIONS_ALREADY_DOES_WAITING
|
#ifdef BUT_RUN_ACTIONS_ALREADY_DOES_WAITING
|
||||||
/* If the init Action requires us to wait, then force the
|
/* If the init Action requires us to wait, then force the
|
||||||
* supplied terminal to be the controlling tty. */
|
* supplied terminal to be the controlling tty. */
|
||||||
@ -424,7 +433,9 @@ static pid_t run(const struct init_action *a)
|
|||||||
/* Child - fall though to actually execute things */
|
/* Child - fall though to actually execute things */
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (a->action_type & ASKFIRST) {
|
|
||||||
|
/* NB: on NOMMU we can't wait for input in child */
|
||||||
|
if (BB_MMU && (a->action_type & ASKFIRST)) {
|
||||||
static const char press_enter[] ALIGN1 =
|
static const char press_enter[] ALIGN1 =
|
||||||
#ifdef CUSTOMIZED_BANNER
|
#ifdef CUSTOMIZED_BANNER
|
||||||
#include CUSTOMIZED_BANNER
|
#include CUSTOMIZED_BANNER
|
||||||
@ -809,7 +820,8 @@ static void reload_signal(int sig ATTRIBUTE_UNUSED)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if CONFIG_FEATURE_KILL_DELAY
|
#if CONFIG_FEATURE_KILL_DELAY
|
||||||
if (fork() == 0) { /* child */
|
/* NB: parent will wait in NOMMU case */
|
||||||
|
if ((BB_MMU ? fork() : vfork()) == 0) { /* child */
|
||||||
sleep(CONFIG_FEATURE_KILL_DELAY);
|
sleep(CONFIG_FEATURE_KILL_DELAY);
|
||||||
for (a = init_action_list; a; a = a->next) {
|
for (a = init_action_list; a; a = a->next) {
|
||||||
pid_t pid = a->pid;
|
pid_t pid = a->pid;
|
||||||
|
@ -2192,7 +2192,7 @@ static void mini_httpd_nommu(int server_socket, int argc, char **argv)
|
|||||||
|
|
||||||
/* Wait for connections... */
|
/* Wait for connections... */
|
||||||
fromAddr.len = LSA_SIZEOF_SA;
|
fromAddr.len = LSA_SIZEOF_SA;
|
||||||
n = accept(server_socket, &fromAddr.sa, &fromAddr.len);
|
n = accept(server_socket, &fromAddr.u.sa, &fromAddr.len);
|
||||||
|
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user