svn commit: trunk/busybox: coreutils e2fsprogs include ipsvd libbb etc...

vda at busybox.net vda at busybox.net
Sun Feb 24 13:36:02 UTC 2008


Author: vda
Date: 2008-02-24 05:36:01 -0800 (Sun, 24 Feb 2008)
New Revision: 21095

Log:
less,klogd,syslogd,nc,tcpudp: exit on signal by killing itself, not exit(1)
*: minor shrink



Modified:
   trunk/busybox/coreutils/dd.c
   trunk/busybox/e2fsprogs/fsck.c
   trunk/busybox/include/libbb.h
   trunk/busybox/ipsvd/tcpudp.c
   trunk/busybox/libbb/signals.c
   trunk/busybox/loginutils/login.c
   trunk/busybox/miscutils/less.c
   trunk/busybox/miscutils/rx.c
   trunk/busybox/networking/inetd.c
   trunk/busybox/networking/nc_bloaty.c
   trunk/busybox/networking/slattach.c
   trunk/busybox/shell/hush.c
   trunk/busybox/sysklogd/klogd.c
   trunk/busybox/sysklogd/syslogd.c


Changeset:
Modified: trunk/busybox/coreutils/dd.c
===================================================================
--- trunk/busybox/coreutils/dd.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/coreutils/dd.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -141,7 +141,7 @@
 #if ENABLE_FEATURE_DD_SIGNAL_HANDLING
 	sigact.sa_handler = dd_output_status;
 	sigact.sa_flags = SA_RESTART;
-	sigemptyset(&sigact.sa_mask);
+	/*sigemptyset(&sigact.sa_mask); - memset did it */
 	sigaction(SIGUSR1, &sigact, NULL);
 #endif
 
@@ -164,40 +164,40 @@
 		if (what == 0)
 			bb_show_usage();
 		arg += key_len;
-		/* Must fit into positive ssize_t */
 #if ENABLE_FEATURE_DD_IBS_OBS
-			if (what == OP_ibs) {
-				ibs = xatoul_range_sfx(arg, 1, ((size_t)-1L)/2, dd_suffixes);
-				continue;
+		if (what == OP_ibs) {
+			/* Must fit into positive ssize_t */
+			ibs = xatoul_range_sfx(arg, 1, ((size_t)-1L)/2, dd_suffixes);
+			continue;
+		}
+		if (what == OP_obs) {
+			obs = xatoul_range_sfx(arg, 1, ((size_t)-1L)/2, dd_suffixes);
+			continue;
+		}
+		if (what == OP_conv) {
+			while (1) {
+				/* find ',', replace them with NUL so we can use arg for
+				 * index_in_strings() without copying.
+				 * We rely on arg being non-null, else strchr would fault.
+				 */
+				key = strchr(arg, ',');
+				if (key)
+					*key = '\0';
+				what = index_in_strings(keywords, arg) + 1;
+				if (what < OP_conv_notrunc)
+					bb_error_msg_and_die(bb_msg_invalid_arg, arg, "conv");
+				if (what == OP_conv_notrunc)
+					flags |= FLAG_NOTRUNC;
+				if (what == OP_conv_sync)
+					flags |= FLAG_SYNC;
+				if (what == OP_conv_noerror)
+					flags |= FLAG_NOERROR;
+				if (!key) /* no ',' left, so this was the last specifier */
+					break;
+				arg = key + 1; /* skip this keyword and ',' */
 			}
-			if (what == OP_obs) {
-				obs = xatoul_range_sfx(arg, 1, ((size_t)-1L)/2, dd_suffixes);
-				continue;
-			}
-			if (what == OP_conv) {
-				while (1) {
-					/* find ',', replace them with nil so we can use arg for
-					 * index_in_strings() without copying.
-					 * We rely on arg being non-null, else strchr would fault.
-					 */
-					key = strchr(arg, ',');
-					if (key)
-						*key = '\0';
-					what = index_in_strings(keywords, arg) + 1;
-					if (what < OP_conv_notrunc)
-						bb_error_msg_and_die(bb_msg_invalid_arg, arg, "conv");
-					if (what == OP_conv_notrunc)
-						flags |= FLAG_NOTRUNC;
-					if (what == OP_conv_sync)
-						flags |= FLAG_SYNC;
-					if (what == OP_conv_noerror)
-						flags |= FLAG_NOERROR;
-					if (!key) /* no ',' left, so this was the last specifier */
-						break;
-					arg = key + 1; /* skip this keyword and ',' */
-				}
-				continue;
-			}
+			continue;
+		}
 #endif
 		if (what == OP_bs) {
 			ibs = obs = xatoul_range_sfx(arg, 1, ((size_t)-1L)/2, dd_suffixes);

Modified: trunk/busybox/e2fsprogs/fsck.c
===================================================================
--- trunk/busybox/e2fsprogs/fsck.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/e2fsprogs/fsck.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -1168,8 +1168,8 @@
 
 	memset(&sa, 0, sizeof(sa));
 	sa.sa_handler = signal_cancel;
-	sigaction(SIGINT, &sa, 0);
-	sigaction(SIGTERM, &sa, 0);
+	sigaction(SIGINT, &sa, NULL);
+	sigaction(SIGTERM, &sa, NULL);
 
 	setbuf(stdout, NULL);
 

Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/include/libbb.h	2008-02-24 13:36:01 UTC (rev 21095)
@@ -309,6 +309,7 @@
 void sig_unblock(int);
 /* UNUSED: void sig_blocknone(void); */
 void sig_pause(void);
+void kill_myself_with_sig(int sig) ATTRIBUTE_NORETURN;
 
 
 void xsetgid(gid_t gid);

Modified: trunk/busybox/ipsvd/tcpudp.c
===================================================================
--- trunk/busybox/ipsvd/tcpudp.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/ipsvd/tcpudp.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -68,7 +68,7 @@
 {
 	if (verbose)
 		printf("%s: info: sigterm received, exit\n", applet_name);
-	exit(0);
+	kill_myself_with_sig(sig);
 }
 
 /* Little bloated, but tries to give accurate info how child exited.

Modified: trunk/busybox/libbb/signals.c
===================================================================
--- trunk/busybox/libbb/signals.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/libbb/signals.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -78,3 +78,17 @@
 	sigemptyset(&ss);
 	sigsuspend(&ss);
 }
+
+/* Assuming the sig is fatal */
+void kill_myself_with_sig(int sig)
+{
+	sigset_t set;
+
+	signal(sig, SIG_DFL);
+
+	sigemptyset(&set);
+	sigaddset(&set, sig);
+	sigprocmask(SIG_UNBLOCK, &set, NULL);
+	raise(sig);
+	_exit(1); /* Should not reach it */
+}

Modified: trunk/busybox/loginutils/login.c
===================================================================
--- trunk/busybox/loginutils/login.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/loginutils/login.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -214,13 +214,12 @@
 	 * arrive here when their connection is broken.
 	 * We don't want to block here */
 	ndelay_on(1);
-	ndelay_on(2);
 	printf("\r\nLogin timed out after %d seconds\r\n", TIMEOUT);
+	fflush(stdout);
 	/* unix API is brain damaged regarding O_NONBLOCK,
 	 * we should undo it, or else we can affect other processes */
 	ndelay_off(1);
-	ndelay_off(2);
-	exit(EXIT_SUCCESS);
+	_exit(EXIT_SUCCESS);
 }
 
 int login_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;

Modified: trunk/busybox/miscutils/less.c
===================================================================
--- trunk/busybox/miscutils/less.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/miscutils/less.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -174,7 +174,9 @@
 {
 	bb_putchar('\n');
 	set_tty_cooked();
-	exit(code); /* TODO: "suicide mode" for code == -signal */
+	if (code < 0)
+		kill_myself_with_sig(- code); /* does not return */
+	exit(code);
 }
 
 /* Move the cursor to a position (x,y), where (0,0) is the
@@ -1328,9 +1330,9 @@
 		number_process(keypress);
 }
 
-static void sig_catcher(int sig ATTRIBUTE_UNUSED)
+static void sig_catcher(int sig)
 {
-	less_exit(1) /* TODO: "suicide mode" for code == -signal */
+	less_exit(- sig);
 }
 
 int less_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;

Modified: trunk/busybox/miscutils/rx.c
===================================================================
--- trunk/busybox/miscutils/rx.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/miscutils/rx.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -43,7 +43,7 @@
 #define TIMEOUT_LONG 10
 #define MAXERRORS 10
 
-static int read_byte(int fd, unsigned int timeout)
+static int read_byte(int fd, unsigned timeout)
 {
 	char buf[1];
 	int n;

Modified: trunk/busybox/networking/inetd.c
===================================================================
--- trunk/busybox/networking/inetd.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/networking/inetd.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -1327,7 +1327,7 @@
 	}
 
 	memset((char *) &sa, 0, sizeof(sa));
-	sigemptyset(&sa.sa_mask);
+	/*sigemptyset(&sa.sa_mask); - memset did it */
 	sigaddset(&sa.sa_mask, SIGALRM);
 	sigaddset(&sa.sa_mask, SIGCHLD);
 	sigaddset(&sa.sa_mask, SIGHUP);

Modified: trunk/busybox/networking/nc_bloaty.c
===================================================================
--- trunk/busybox/networking/nc_bloaty.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/networking/nc_bloaty.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -163,7 +163,7 @@
 	if (o_verbose > 1)                /* normally we don't care */
 		fprintf(stderr, SENT_N_RECV_M, wrote_net, wrote_out);
 	fprintf(stderr, "punt!\n");
-	exit(1);
+	kill_myself_with_sig(sig);
 }
 
 /* unarm  */

Modified: trunk/busybox/networking/slattach.c
===================================================================
--- trunk/busybox/networking/slattach.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/networking/slattach.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -43,7 +43,7 @@
 	xioctl(handle, TIOCGETD, &saved_disc);
 }
 
-static int set_termios_state_and_warn(struct termios *state)
+static int set_termios_state_or_warn(struct termios *state)
 {
 	int ret;
 
@@ -78,12 +78,12 @@
 	memcpy(&state, &saved_state, sizeof(state));
 	cfsetispeed(&state, B0);
 	cfsetospeed(&state, B0);
-	if (set_termios_state_and_warn(&state))
+	if (set_termios_state_or_warn(&state))
 		exitcode = 1;
 	sleep(1);
 
 	/* Restore line status */
-	if (set_termios_state_and_warn(&saved_state))
+	if (set_termios_state_or_warn(&saved_state))
 		exit(EXIT_FAILURE);
 	if (ENABLE_FEATURE_CLEAN_UP)
 		close(handle);
@@ -99,7 +99,7 @@
 	int disc;
 
 	/* Set line status */
-	if (set_termios_state_and_warn(state))
+	if (set_termios_state_or_warn(state))
 		goto bad;
 	/* Set line discliple (N_SLIP always) */
 	disc = N_SLIP;

Modified: trunk/busybox/shell/hush.c
===================================================================
--- trunk/busybox/shell/hush.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/shell/hush.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -808,12 +808,7 @@
 	if (sig <= 0)
 		_exit(- sig);
 
-	/* Enable only this sig and kill ourself with it */
-	signal(sig, SIG_DFL);
-	sigdelset(&block_all, sig);
-	sigprocmask(SIG_SETMASK, &block_all, NULL);
-	raise(sig);
-	_exit(1); /* Should not reach it */
+	kill_myself_with_sig(sig); /* does not return */
 }
 
 /* Restores tty foreground process group, and exits. */

Modified: trunk/busybox/sysklogd/klogd.c
===================================================================
--- trunk/busybox/sysklogd/klogd.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/sysklogd/klogd.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -26,7 +26,7 @@
 	klogctl(7, NULL, 0);
 	klogctl(0, NULL, 0);
 	syslog(LOG_NOTICE, "klogd: exiting");
-	exit(EXIT_SUCCESS);
+	kill_myself_with_sig(sig);
 }
 
 #define log_buffer bb_common_bufsiz1

Modified: trunk/busybox/sysklogd/syslogd.c
===================================================================
--- trunk/busybox/sysklogd/syslogd.c	2008-02-23 12:22:17 UTC (rev 21094)
+++ trunk/busybox/sysklogd/syslogd.c	2008-02-24 13:36:01 UTC (rev 21095)
@@ -475,7 +475,7 @@
 	puts("syslogd exiting");
 	if (ENABLE_FEATURE_IPC_SYSLOG)
 		ipcsyslog_cleanup();
-	exit(1);
+	kill_myself_with_sig(sig);
 }
 
 #ifdef SYSLOGD_MARK




More information about the busybox-cvs mailing list