aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-01-27 22:21:12 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-01-27 22:21:12 +0000
commite06bed30cfcde7b9e320aff8a4c878c72416c4c4 (patch)
treeda3276ab5bc224a64fb9f7d7d2a8a046816ec533
parentcd75a96f0f9d446028cad7e4b9b9224e009752e1 (diff)
downloadbusybox-e06bed30cfcde7b9e320aff8a4c878c72416c4c4.tar.gz
use bb_sanitize_stdio() where appropriate
-rw-r--r--coreutils/nohup.c32
-rw-r--r--libbb/xfuncs.c2
-rw-r--r--loginutils/getty.c7
-rw-r--r--networking/traceroute.c6
-rw-r--r--networking/udhcp/common.c16
5 files changed, 27 insertions, 36 deletions
diff --git a/coreutils/nohup.c b/coreutils/nohup.c
index 21adfc1c3..317d2a8ae 100644
--- a/coreutils/nohup.c
+++ b/coreutils/nohup.c
@@ -14,16 +14,18 @@
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]);
}
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index f7300a6d9..54d291ab1 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -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();
diff --git a/loginutils/getty.c b/loginutils/getty.c
index be4938972..f2c2b4afb 100644
--- a/loginutils/getty.c
+++ b/loginutils/getty.c
@@ -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;
diff --git a/networking/traceroute.c b/networking/traceroute.c
index 47775aa8a..25c6569bb 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -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);
diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c
index 3e916f422..3704ba71a 100644
--- a/networking/udhcp/common.c
+++ b/networking/udhcp/common.c
@@ -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);