OSDN Git Service

use bb_sanitize_stdio() where appropriate
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 27 Jan 2007 22:21:12 +0000 (22:21 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 27 Jan 2007 22:21:12 +0000 (22:21 -0000)
coreutils/nohup.c
libbb/xfuncs.c
loginutils/getty.c
networking/traceroute.c
networking/udhcp/common.c

index 21adfc1..317d2a8 100644 (file)
 
 int nohup_main(int argc, char **argv)
 {
-       int temp, nullfd;
-       char *nohupout, *home = NULL;
+       int nullfd;
+       const char *nohupout;
+       char *home = NULL;
 
        xfunc_error_retval = 127;
 
-       if (argc<2) bb_show_usage();
+       if (argc < 2) bb_show_usage();
 
        nullfd = xopen(bb_dev_null, O_WRONLY|O_APPEND);
        /* If stdin is a tty, detach from it. */
-       if (isatty(STDIN_FILENO)) dup2(nullfd, STDIN_FILENO);
+       if (isatty(STDIN_FILENO))
+               dup2(nullfd, STDIN_FILENO);
 
        nohupout = "nohup.out";
        /* Redirect stdout to nohup.out, either in "." or in "$HOME". */
@@ -38,16 +40,20 @@ int nohup_main(int argc, char **argv)
                }
        } else dup2(nullfd, STDOUT_FILENO);
 
-       /* If we have a tty on strderr, announce filename and redirect to stdout.
+       /* If we have a tty on stderr, announce filename and redirect to stdout.
         * Else redirect to /dev/null.
         */
-       temp = isatty(STDERR_FILENO);
-       if (temp) bb_error_msg("appending to %s", nohupout);
-       dup2(temp ? STDOUT_FILENO : nullfd, STDERR_FILENO);
-       close(nullfd);
-       signal (SIGHUP, SIG_IGN);
-
-       execvp(argv[1],argv+1);
-       if (00 && ENABLE_FEATURE_CLEAN_UP && home) free(nohupout);
+       if (isatty(STDERR_FILENO)) {
+               bb_error_msg("appending to %s", nohupout);
+               dup2(STDOUT_FILENO, STDERR_FILENO);
+       } else dup2(nullfd, STDERR_FILENO);
+
+       if (nullfd > 2)
+               close(nullfd);
+       signal(SIGHUP, SIG_IGN);
+
+       execvp(argv[1], argv+1);
+       if (ENABLE_FEATURE_CLEAN_UP && home)
+               free((char*)nohupout);
        bb_perror_msg_and_die("%s", argv[1]);
 }
index f7300a6..54d291a 100644 (file)
@@ -518,7 +518,7 @@ void bb_sanitize_stdio_maybe_daemonize(int daemonize)
        int fd;
        /* Mega-paranoid */
        fd = xopen(bb_dev_null, O_RDWR);
-       while (fd < 2)
+       while ((unsigned)fd < 2)
                fd = dup(fd); /* have 0,1,2 open at least to /dev/null */
        if (daemonize) {
                pid_t pid = fork();
index be49389..f2c2b4a 100644 (file)
@@ -264,7 +264,7 @@ static void open_tty(char *tty, struct termios *tp, int local)
                 */
 
                if ((fcntl(0, F_GETFL, 0) & O_RDWR) != O_RDWR)
-                       bb_error_msg_and_die("%s: not open for read/write", tty);
+                       bb_error_msg_and_die("stdin is not open for read/write");
        }
 
        /* Replace current standard output/error fd's with new ones */
@@ -314,7 +314,8 @@ static void open_tty(char *tty, struct termios *tp, int local)
                        strcpy(vcsa, "vcsa");
                        strcpy(vcsa + 4, tty + 3);
 
-                       id = (gr = getgrnam("sys")) ? gr->gr_gid : 0;
+                       gr = getgrnam("sys");
+                       id = gr ? gr->gr_gid : 0;
                        chown(vcs, 0, id);
                        chmod(vcs, 0600);
                        chown(vcsa, 0, id);
@@ -628,8 +629,8 @@ static void termios_final(struct options *op, struct termios *tp, struct chardat
                tp->c_cflag |= CS7;
                break;
        }
-       /* Account for upper case without lower case. */
 
+       /* Account for upper case without lower case. */
 #ifdef HANDLE_ALLCAPS
        if (cp->capslock) {
                tp->c_iflag |= IUCLC;
index 47775aa..25c6569 100644 (file)
@@ -1040,10 +1040,8 @@ traceroute_main(int argc, char *argv[])
                bb_show_usage();
        }
 
-       /* Insure the socket fds won't be 0, 1 or 2 */
-       do n = xopen(bb_dev_null, O_RDONLY); while (n < 2);
-       while (n > 2)
-               close(n--);
+       /* Ensure the socket fds won't be 0, 1 or 2 */
+       bb_sanitize_stdio();
 
        s = xsocket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
 
index 3e916f4..3704ba7 100644 (file)
@@ -22,20 +22,6 @@ long uptime(void)
        return info.uptime;
 }
 
-/*
- * This function makes sure our first socket calls
- * aren't going to fd 1 (printf badness...) and are
- * not later closed by daemon()
- */
-static inline void sanitize_fds(void)
-{
-       int fd = xopen(bb_dev_null, O_RDWR);
-       while (fd < 3)
-               fd = dup(fd);
-       close(fd);
-}
-
-
 void udhcp_background(const char *pidfile)
 {
 #ifdef __uClinux__
@@ -57,7 +43,7 @@ void udhcp_start_log_and_pid(const char *pidfile)
        int pid_fd;
 
        /* Make sure our syslog fd isn't overwritten */
-       sanitize_fds();
+       bb_sanitize_stdio();
 
        /* do some other misc startup stuff while we are here to save bytes */
        pid_fd = pidfile_acquire(pidfile);