From b4a1baa312746a1ddc934b1ddb035b64e72e746b Mon Sep 17 00:00:00 2001 From: Glenn L McGrath Date: Mon, 13 Jan 2003 22:09:50 +0000 Subject: Correct some init issues, update email address, last_patch78 by Vladimir N. Oleynik --- include/libbb.h | 2 +- init/init.c | 333 +++++++++++++++++++--------------------- libbb/device_open.c | 2 +- libbb/process_escape_sequence.c | 2 +- util-linux/more.c | 2 +- 5 files changed, 162 insertions(+), 179 deletions(-) diff --git a/include/libbb.h b/include/libbb.h index 3523cc4..a827ba6 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -169,7 +169,7 @@ extern char * my_getpwuid(char *name, long uid); extern char * my_getgrgid(char *group, long gid); extern long my_getpwnamegid(const char *name); -extern int device_open(char *device, int mode); +extern int device_open(const char *device, int mode); extern int del_loop(const char *device); extern int set_loop(const char *device, const char *file, int offset, int *loopro); diff --git a/init/init.c b/init/init.c index 91a19c5..ad9ff94 100644 --- a/init/init.c +++ b/init/init.c @@ -120,6 +120,8 @@ extern int bdflush(int func, long int data); #define MAXENV 16 /* Number of env. vars */ +#define CONSOLE_BUFF_SIZE 32 + /* Allowed init action types */ #define SYSINIT 0x001 #define RESPAWN 0x002 @@ -152,16 +154,15 @@ static const struct init_action_type actions[] = { struct init_action { pid_t pid; char command[INIT_BUFFS_SIZE]; - char terminal[INIT_BUFFS_SIZE]; + char terminal[CONSOLE_BUFF_SIZE]; struct init_action *next; int action; }; /* Static variables */ static struct init_action *init_action_list = NULL; -static int kernelVersion = 0; -static char termType[32] = "TERM=linux"; -static char console[32] = _PATH_CONSOLE; +static int kernelVersion; +static char console[CONSOLE_BUFF_SIZE] = _PATH_CONSOLE; #ifndef CONFIG_SYSLOGD static char *log = VC_5; @@ -184,9 +185,17 @@ static const int RB_DISABLE_CAD = 0; static const int RB_AUTOBOOT = 0x01234567; #endif +static const char * const environment[] = { + "HOME=/", + "PATH=" _PATH_STDPATH, + "SHELL=" SHELL, + "USER=root", + NULL +}; + /* Function prototypes */ static void delete_init_action(struct init_action *a); -static int waitfor(struct init_action *a); +static int waitfor(const struct init_action *a); static void loop_forever(void) @@ -197,38 +206,44 @@ static void loop_forever(void) /* Print a message to the specified device. * Device may be bitwise-or'd from LOG | CONSOLE */ -#ifdef DEBUG_INIT -static inline messageND(int device, char *fmt, ...) +#ifndef DEBUG_INIT +static inline void messageD(int device, const char *fmt, ...) { } #else -#define messageND message +#define messageD message #endif -static void message(int device, char *fmt, ...) +static void message(int device, const char *fmt, ...) __attribute__ ((format(printf, 2, 3))); -static void message(int device, char *fmt, ...) +static void message(int device, const char *fmt, ...) { va_list arguments; - int fd; - -#ifdef CONFIG_SYSLOGD - - /* Log the message to syslogd */ - if (device & LOG) { + int l; char msg[1024]; + msg[0] = '\r'; va_start(arguments, fmt); - vsnprintf(msg, sizeof(msg), fmt, arguments); + l = vsnprintf(msg + 1, sizeof(msg) - 2, fmt, arguments) + 1; va_end(arguments); - syslog_msg(LOG_USER, LOG_INFO, msg); + +#ifdef CONFIG_SYSLOGD + /* Log the message to syslogd */ + if (device & LOG) { + /* don`t out "\r\n" */ + syslog_msg(LOG_DAEMON, LOG_INFO, msg + 1); } + + msg[l++] = '\n'; + msg[l] = 0; #else static int log_fd = -1; + msg[l++] = '\n'; + msg[l] = 0; /* Take full control of the log tty, and never close it. * It's mine, all mine! Muhahahaha! */ if (log_fd < 0) { - if ((log_fd = device_open(log, O_RDWR | O_NDELAY)) < 0) { + if ((log_fd = device_open(log, O_RDWR | O_NDELAY | O_NOCTTY)) < 0) { log_fd = -2; error_msg("Bummer, can't write to log on %s!", log); device = CONSOLE; @@ -237,26 +252,25 @@ static void message(int device, char *fmt, ...) } } if ((device & LOG) && (log_fd >= 0)) { - va_start(arguments, fmt); - vdprintf(log_fd, fmt, arguments); - va_end(arguments); + full_write(log_fd, msg, l); } #endif if (device & CONSOLE) { + int fd = device_open(_PATH_CONSOLE, + O_WRONLY | O_NOCTTY | O_NDELAY); /* Always send console messages to /dev/console so people will see them. */ - if ((fd = - device_open(_PATH_CONSOLE, - O_WRONLY | O_NOCTTY | O_NDELAY)) >= 0) { - va_start(arguments, fmt); - vdprintf(fd, fmt, arguments); - va_end(arguments); + if (fd >= 0) { + full_write(fd, msg, l); close(fd); +#ifdef DEBUG_INIT + /* all descriptors may be closed */ } else { error_msg("Bummer, can't print: "); va_start(arguments, fmt); vfprintf(stderr, fmt, arguments); va_end(arguments); +#endif } } } @@ -330,31 +344,23 @@ static int check_free_memory(void) static void console_init(void) { int fd; - int tried_devcons = 0; - int tried_vtprimary = 0; + int tried = 0; struct vt_stat vt; struct serial_struct sr; char *s; - if ((s = getenv("TERM")) != NULL) { - snprintf(termType, sizeof(termType) - 1, "TERM=%s", s); - } - - if ((s = getenv("CONSOLE")) != NULL) { + if ((s = getenv("CONSOLE")) != NULL || (s = getenv("console")) != NULL) { safe_strncpy(console, s, sizeof(console)); - } #if #cpu(sparc) /* sparc kernel supports console=tty[ab] parameter which is also * passed to init, so catch it here */ - else if ((s = getenv("console")) != NULL) { /* remap tty[ab] to /dev/ttyS[01] */ if (strcmp(s, "ttya") == 0) safe_strncpy(console, SC_0, sizeof(console)); else if (strcmp(s, "ttyb") == 0) safe_strncpy(console, SC_1, sizeof(console)); - } #endif - else { + } else { /* 2.2 kernels: identify the real console backend and try to use it */ if (ioctl(0, TIOCGSERIAL, &sr) == 0) { /* this is a serial console */ @@ -364,39 +370,41 @@ static void console_init(void) snprintf(console, sizeof(console) - 1, VC_FORMAT, vt.v_active); } else { safe_strncpy(console, _PATH_CONSOLE, sizeof(console)); - tried_devcons++; + tried++; } } - while ((fd = open(console, O_RDONLY | O_NONBLOCK)) < 0) { - /* Can't open selected console -- try /dev/console */ - if (!tried_devcons) { - tried_devcons++; - safe_strncpy(console, _PATH_CONSOLE, sizeof(console)); - continue; - } - /* Can't open selected console -- try vt1 */ - if (!tried_vtprimary) { - tried_vtprimary++; - safe_strncpy(console, VC_1, sizeof(console)); - continue; - } - break; + while ((fd = open(console, O_RDONLY | O_NONBLOCK)) < 0 && tried < 2) { + /* Can't open selected console -- try + logical system console and VT_MASTER */ + safe_strncpy(console, (tried == 0 ? _PATH_CONSOLE : CURRENT_VC), + sizeof(console)); + tried++; } if (fd < 0) { /* Perhaps we should panic here? */ +#ifndef CONFIG_SYSLOGD + log = +#endif safe_strncpy(console, "/dev/null", sizeof(console)); } else { + s = getenv("TERM"); /* check for serial console */ - if (ioctl(0, TIOCGSERIAL, &sr) == 0) { + if (ioctl(fd, TIOCGSERIAL, &sr) == 0) { /* Force the TERM setting to vt102 for serial console -- * if TERM is set to linux (the default) */ - if (strcmp(termType, "TERM=linux") == 0) - safe_strncpy(termType, "TERM=vt102", sizeof(termType)); + if (s == NULL || strcmp(s, "linux") == 0) + putenv("TERM=vt102"); +#ifndef CONFIG_SYSLOGD + log = console; +#endif + } else { + if (s == NULL) + putenv("TERM=linux"); } close(fd); } - message(LOG, "console=%s\n", console); + messageD(LOG, "console=%s", console); } static void fixup_argv(int argc, char **argv, char *new_argv0) @@ -416,68 +424,20 @@ static void fixup_argv(int argc, char **argv, char *new_argv0) } } -/* Make sure there is enough memory to do something useful. * - * Calls "swapon -a" if needed so be sure /etc/fstab is present... */ -static void check_memory(void) -{ - struct stat statBuf; - - if (check_free_memory() > 1000) - return; - -#if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__) - if (stat("/etc/fstab", &statBuf) == 0) { - /* swapon -a requires /proc typically */ - system("/bin/mount -t proc proc /proc"); - /* Try to turn on swap */ - system("/sbin/swapon -a"); - if (check_free_memory() < 1000) - goto goodnight; - } else - goto goodnight; - return; -#endif - - goodnight: - message(CONSOLE, "\rSorry, your computer does not have enough memory.\n"); - loop_forever(); -} - -static pid_t run(struct init_action *a) +static pid_t run(const struct init_action *a) { struct stat sb; - int i, j, junk; + int i, junk; pid_t pid, pgrp, tmp_pid; char *s, *tmpCmd, *cmd[INIT_BUFFS_SIZE], *cmdpath; char buf[INIT_BUFFS_SIZE + 6]; /* INIT_BUFFS_SIZE+strlen("exec ")+1 */ sigset_t nmask, omask; - char *environment[MAXENV + 1] = { - termType, - "HOME=/", - "PATH=" _PATH_STDPATH, - "SHELL=" SHELL, - "USER=root", - NULL - }; static const char press_enter[] = #ifdef CUSTOMIZED_BANNER #include CUSTOMIZED_BANNER #endif "\nPlease press Enter to activate this console. "; - /* inherit environment to the child, merging our values -andy */ - for (i = 0; environ[i]; i++) { - for (j = 0; environment[j]; j++) { - s = strchr(environment[j], '='); - if (!strncmp(environ[i], environment[j], s - environment[j])) - break; - } - if (!environment[j]) { - environment[j++] = environ[i]; - environment[j] = NULL; - } - } - /* Block sigchild while forking. */ sigemptyset(&nmask); sigaddset(&nmask, SIGCHLD); @@ -507,11 +467,11 @@ static pid_t run(struct init_action *a) /* Open the new terminal device */ if ((device_open(a->terminal, O_RDWR)) < 0) { if (stat(a->terminal, &sb) != 0) { - message(LOG | CONSOLE, "\rdevice '%s' does not exist.\n", + message(LOG | CONSOLE, "device '%s' does not exist.", a->terminal); _exit(1); } - message(LOG | CONSOLE, "\rBummer, can't open %s\n", a->terminal); + message(LOG | CONSOLE, "Bummer, can't open %s", a->terminal); _exit(1); } @@ -528,7 +488,7 @@ static pid_t run(struct init_action *a) /* Now fork off another process to just hang around */ if ((pid = fork()) < 0) { - message(LOG | CONSOLE, "Can't fork!\n"); + message(LOG | CONSOLE, "Can't fork!"); _exit(1); } @@ -550,7 +510,7 @@ static pid_t run(struct init_action *a) /* Use a temporary process to steal the controlling tty. */ if ((pid = fork()) < 0) { - message(LOG | CONSOLE, "\rCan't fork!\n"); + message(LOG | CONSOLE, "Can't fork!"); _exit(1); } if (pid == 0) { @@ -572,8 +532,7 @@ static pid_t run(struct init_action *a) if (strpbrk(a->command, "~`!$^&*()=|\\{}[];\"'<>?") != NULL) { cmd[0] = SHELL; cmd[1] = "-c"; - strcat(strcpy(buf, "exec "), a->command); - cmd[2] = buf; + cmd[2] = strcat(strcpy(buf, "exec "), a->command); cmd[3] = NULL; } else { /* Convert command (char*) into cmd (char**, one word per string) */ @@ -607,7 +566,7 @@ static pid_t run(struct init_action *a) /* make a new argv[0] */ if ((cmd[0] = malloc(strlen(s) + 2)) == NULL) { - message(LOG | CONSOLE, "malloc failed"); + message(LOG | CONSOLE, memory_exhausted); cmd[0] = cmdpath; } else { cmd[0][0] = '-'; @@ -616,6 +575,7 @@ static pid_t run(struct init_action *a) } if (a->action & ASKFIRST) { + char c; /* * Save memory by not exec-ing anything large (like a shell) * before the user wants it. This is critical if swap is not @@ -624,16 +584,16 @@ static pid_t run(struct init_action *a) * be allowed to start a shell or whatever an init script * specifies. */ - messageND(LOG, - "Waiting for enter to start '%s' (pid %d, terminal %s)\n", + messageD(LOG, "Waiting for enter to start '%s'" + "(pid %d, terminal %s)\n", cmdpath, getpid(), a->terminal); - fflush(stdout); - write(fileno(stdout), press_enter, sizeof(press_enter) - 1); - getc(stdin); + full_write(1, press_enter, sizeof(press_enter) - 1); + while(read(0, &c, 1) == 1 && c != '\n') + ; } /* Log the process name and args */ - messageND(LOG, "Starting pid %d, console %s: '%s'\n", + message(LOG, "Starting pid %d, console %s: '%s'", getpid(), a->terminal, cmdpath); #if defined CONFIG_FEATURE_INIT_COREDUMPS @@ -648,17 +608,17 @@ static pid_t run(struct init_action *a) /* Now run it. The new program will take over this PID, * so nothing further in init.c should be run. */ - execve(cmdpath, cmd, environment); + execv(cmdpath, cmd); /* We're still here? Some error happened. */ - message(LOG | CONSOLE, "\rBummer, could not run '%s': %m\n", cmdpath); + message(LOG | CONSOLE, "Bummer, could not run '%s': %m", cmdpath); _exit(-1); } sigprocmask(SIG_SETMASK, &omask, NULL); return pid; } -static int waitfor(struct init_action *a) +static int waitfor(const struct init_action *a) { int pid; int status, wpid; @@ -700,7 +660,6 @@ static void run_actions(int action) } } - #ifndef DEBUG_INIT static void shutdown_system(void) { @@ -727,16 +686,16 @@ static void shutdown_system(void) /* Allow Ctrl-Alt-Del to reboot system. */ init_reboot(RB_ENABLE_CAD); - message(CONSOLE | LOG, "\n\rThe system is going down NOW !!\n"); + message(CONSOLE | LOG, "The system is going down NOW !!"); sync(); /* Send signals to every process _except_ pid 1 */ - message(CONSOLE | LOG, "\rSending SIGTERM to all processes.\n"); + message(CONSOLE | LOG, "Sending SIGTERM to all processes."); kill(-1, SIGTERM); sleep(1); sync(); - message(CONSOLE | LOG, "\rSending SIGKILL to all processes.\n"); + message(CONSOLE | LOG, "Sending SIGKILL to all processes."); kill(-1, SIGKILL); sleep(1); @@ -771,10 +730,10 @@ static void exec_signal(int sig) sigaddset(&unblock_signals, SIGTSTP); sigprocmask(SIG_UNBLOCK, &unblock_signals, NULL); - message(CONSOLE | LOG, "\rTrying to re-exec %s\n", a->command); + messageD(CONSOLE | LOG, "Trying to re-exec %s", a->command); execl(a->command, a->command, NULL); - message(CONSOLE | LOG, "\rexec of '%s' failed: %m\n", + message(CONSOLE | LOG, "exec of '%s' failed: %m", a->command); sync(); sleep(2); @@ -790,9 +749,9 @@ static void halt_signal(int sig) message(CONSOLE | LOG, #if #cpu(s390) /* Seems the s390 console is Wierd(tm). */ - "\rThe system is halted. You may reboot now.\n" + "The system is halted. You may reboot now." #else - "\rThe system is halted. Press Reset or turn off power\n" + "The system is halted. Press Reset or turn off power" #endif ); sync(); @@ -811,7 +770,7 @@ static void halt_signal(int sig) static void reboot_signal(int sig) { shutdown_system(); - message(CONSOLE | LOG, "\rPlease stand by while rebooting the system.\n"); + message(CONSOLE | LOG, "Please stand by while rebooting the system."); sync(); /* allow time for last message to reach serial console */ @@ -847,7 +806,7 @@ static void cont_handler(int sig) #endif /* ! DEBUG_INIT */ -static void new_init_action(int action, char *command, char *cons) +static void new_init_action(int action, char *command, const char *cons) { struct init_action *new_action, *a; @@ -862,7 +821,7 @@ static void new_init_action(int action, char *command, char *cons) new_action = calloc((size_t) (1), sizeof(struct init_action)); if (!new_action) { - message(LOG | CONSOLE, "\rMemory allocation failure\n"); + message(LOG | CONSOLE, "Memory allocation failure"); loop_forever(); } @@ -876,9 +835,11 @@ static void new_init_action(int action, char *command, char *cons) strcpy(new_action->command, command); new_action->action = action; strcpy(new_action->terminal, cons); +#if 0 /* calloc zeroed always */ new_action->pid = 0; -/* message(LOG|CONSOLE, "command='%s' action='%d' terminal='%s'\n", - new_action->command, new_action->action, new_action->terminal); */ +#endif + messageD(LOG|CONSOLE, "command='%s' action='%d' terminal='%s'\n", + new_action->command, new_action->action, new_action->terminal); } static void delete_init_action(struct init_action *action) @@ -898,6 +859,34 @@ static void delete_init_action(struct init_action *action) } } +/* Make sure there is enough memory to do something useful. * + * Calls "swapon -a" if needed so be sure /etc/fstab is present... */ +static void check_memory(void) +{ + struct stat statBuf; + + if (check_free_memory() > 1000) + return; + +#if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__) + if (stat("/etc/fstab", &statBuf) == 0) { + /* swapon -a requires /proc typically */ + new_init_action(SYSINIT, "/bin/mount -t proc proc /proc", ""); + /* Try to turn on swap */ + new_init_action(SYSINIT, "/sbin/swapon -a", ""); + run_actions(SYSINIT); /* wait and removing */ + if (check_free_memory() < 1000) + goto goodnight; + } else + goto goodnight; + return; +#endif + + goodnight: + message(CONSOLE, "Sorry, your computer does not have enough memory."); + loop_forever(); +} + /* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined, * then parse_inittab() simply adds in some default * actions(i.e., runs INIT_SCRIPT and then starts a pair @@ -909,11 +898,10 @@ static void parse_inittab(void) { #ifdef CONFIG_FEATURE_USE_INITTAB FILE *file; - char buf[INIT_BUFFS_SIZE], lineAsRead[INIT_BUFFS_SIZE], - tmpConsole[INIT_BUFFS_SIZE]; + char buf[INIT_BUFFS_SIZE], lineAsRead[INIT_BUFFS_SIZE]; + char tmpConsole[CONSOLE_BUFF_SIZE]; char *id, *runlev, *action, *command, *eol; const struct init_action_type *a = actions; - int foundIt; file = fopen(INITTAB, "r"); @@ -921,29 +909,28 @@ static void parse_inittab(void) /* No inittab file -- set up some default behavior */ #endif /* Reboot on Ctrl-Alt-Del */ - new_init_action(CTRLALTDEL, "/sbin/reboot", console); + new_init_action(CTRLALTDEL, "/sbin/reboot", ""); /* Umount all filesystems on halt/reboot */ - new_init_action(SHUTDOWN, "/bin/umount -a -r", console); + new_init_action(SHUTDOWN, "/bin/umount -a -r", ""); #if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__) /* Swapoff on halt/reboot */ - new_init_action(SHUTDOWN, "/sbin/swapoff -a", console); + new_init_action(SHUTDOWN, "/sbin/swapoff -a", ""); #endif /* Prepare to restart init when a HUP is received */ - new_init_action(RESTART, "/sbin/init", console); + new_init_action(RESTART, "/sbin/init", ""); /* Askfirst shell on tty1-4 */ - new_init_action(ASKFIRST, LOGIN_SHELL, console); + new_init_action(ASKFIRST, LOGIN_SHELL, ""); new_init_action(ASKFIRST, LOGIN_SHELL, VC_2); new_init_action(ASKFIRST, LOGIN_SHELL, VC_3); new_init_action(ASKFIRST, LOGIN_SHELL, VC_4); /* sysinit */ - new_init_action(SYSINIT, INIT_SCRIPT, console); + new_init_action(SYSINIT, INIT_SCRIPT, ""); return; #ifdef CONFIG_FEATURE_USE_INITTAB } while (fgets(buf, INIT_BUFFS_SIZE, file) != NULL) { - foundIt = FALSE; /* Skip leading spaces */ for (id = buf; *id == ' ' || *id == '\t'; id++); @@ -962,7 +949,7 @@ static void parse_inittab(void) /* Separate the ID field from the runlevels */ runlev = strchr(id, ':'); if (runlev == NULL || *(runlev + 1) == '\0') { - message(LOG | CONSOLE, "\rBad inittab entry: %s\n", lineAsRead); + message(LOG | CONSOLE, "Bad inittab entry: %s", lineAsRead); continue; } else { *runlev = '\0'; @@ -972,7 +959,7 @@ static void parse_inittab(void) /* Separate the runlevels from the action */ action = strchr(runlev, ':'); if (action == NULL || *(action + 1) == '\0') { - message(LOG | CONSOLE, "\rBad inittab entry: %s\n", lineAsRead); + message(LOG | CONSOLE, "Bad inittab entry: %s", lineAsRead); continue; } else { *action = '\0'; @@ -982,7 +969,7 @@ static void parse_inittab(void) /* Separate the action from the command */ command = strchr(action, ':'); if (command == NULL || *(command + 1) == '\0') { - message(LOG | CONSOLE, "\rBad inittab entry: %s\n", lineAsRead); + message(LOG | CONSOLE, "Bad inittab entry: %s", lineAsRead); continue; } else { *command = '\0'; @@ -990,24 +977,23 @@ static void parse_inittab(void) } /* Ok, now process it */ - a = actions; - while (a->name != 0) { + for (a = actions; a->name != 0; a++) { if (strcmp(a->name, action) == 0) { if (*id != '\0') { + if(strncmp(id, "/dev/", 5) == 0) + id += 5; strcpy(tmpConsole, "/dev/"); - strncat(tmpConsole, id, INIT_BUFFS_SIZE - 6); + safe_strncpy(tmpConsole + 5, id, + CONSOLE_BUFF_SIZE - 5); id = tmpConsole; } new_init_action(a->action, command, id); - foundIt = TRUE; + break; } - a++; } - if (foundIt == TRUE) - continue; - else { + if (a->name == 0) { /* Choke on an unknown action */ - message(LOG | CONSOLE, "\rBad inittab entry: %s\n", lineAsRead); + message(LOG | CONSOLE, "Bad inittab entry: %s", lineAsRead); } } fclose(file); @@ -1016,7 +1002,6 @@ static void parse_inittab(void) } - extern int init_main(int argc, char **argv) { struct init_action *a; @@ -1032,8 +1017,7 @@ extern int init_main(int argc, char **argv) if (!pid || *pid <= 0) error_msg_and_die("no process killed"); } - kill(*pid, SIGHUP); - exit(0); + return kill(*pid, SIGHUP); } #ifndef DEBUG_INIT /* Expect to be invoked as init with PID=1 or be invoked as linuxrc */ @@ -1078,12 +1062,14 @@ extern int init_main(int argc, char **argv) chdir("/"); setsid(); - - /* Make sure PATH is set to something sane */ - putenv("PATH=" _PATH_STDPATH); - + { + const char * const *e; + /* Make sure environs is set to something sane */ + for(e = environment; *e; e++) + putenv(*e); + } /* Hello world */ - message(MAYBE_CONSOLE | LOG, "\rinit started: %s\n", full_version); + message(MAYBE_CONSOLE | LOG, "init started: %s", full_version); /* Make sure there is enough memory to do something useful. */ check_memory(); @@ -1091,12 +1077,8 @@ extern int init_main(int argc, char **argv) /* Check if we are supposed to be in single user mode */ if (argc > 1 && (!strcmp(argv[1], "single") || !strcmp(argv[1], "-s") || !strcmp(argv[1], "1"))) { - /* Ask first then start a shell on tty2-4 */ - new_init_action(ASKFIRST, LOGIN_SHELL, VC_2); - new_init_action(ASKFIRST, LOGIN_SHELL, VC_3); - new_init_action(ASKFIRST, LOGIN_SHELL, VC_4); - /* Start a shell on tty1 */ - new_init_action(RESPAWN, LOGIN_SHELL, console); + /* Start a shell on console */ + new_init_action(RESPAWN, LOGIN_SHELL, ""); } else { /* Not in single user mode -- see what inittab says */ @@ -1124,7 +1106,7 @@ extern int init_main(int argc, char **argv) /* If there is nothing else to do, stop */ if (init_action_list == NULL) { message(LOG | CONSOLE, - "\rNo more tasks for init -- sleeping forever.\n"); + "No more tasks for init -- sleeping forever."); loop_forever(); } @@ -1149,7 +1131,8 @@ extern int init_main(int argc, char **argv) * restarted by run_actions() */ a->pid = 0; message(LOG, "Process '%s' (pid %d) exited. " - "Scheduling it for restart.\n", a->command, wpid); + "Scheduling it for restart.", + a->command, wpid); } } /* see if anyone else is waiting to be reaped */ diff --git a/libbb/device_open.c b/libbb/device_open.c index 30b33d7..42da1e1 100644 --- a/libbb/device_open.c +++ b/libbb/device_open.c @@ -25,7 +25,7 @@ /* try to open up the specified device */ -extern int device_open(char *device, int mode) +extern int device_open(const char *device, int mode) { int m, f, fd = -1; diff --git a/libbb/process_escape_sequence.c b/libbb/process_escape_sequence.c index 67b0490..9a16f80 100644 --- a/libbb/process_escape_sequence.c +++ b/libbb/process_escape_sequence.c @@ -3,7 +3,7 @@ * Utility routines. * * Copyright (C) Manuel Nova III - * and Vladimir Oleynik + * and Vladimir Oleynik * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/util-linux/more.c b/util-linux/more.c index 05fe869..c26e4fe 100644 --- a/util-linux/more.c +++ b/util-linux/more.c @@ -9,7 +9,7 @@ * based on the original more implementation by Bruce, and code from the * Debian boot-floppies team. * - * Termios corrects by Vladimir Oleynik + * Termios corrects by Vladimir Oleynik * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -- cgit v1.1