[git commit] top: do not touch stdin if -b

Denys Vlasenko vda.linux at googlemail.com
Wed Sep 26 14:58:25 UTC 2012


commit: http://git.busybox.net/busybox/commit/?id=73a19908975948154d1a07c3550592059238e9ef
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 procps/top.c |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/procps/top.c b/procps/top.c
index dc5ea73..1977fca 100644
--- a/procps/top.c
+++ b/procps/top.c
@@ -717,7 +717,8 @@ static void clearmems(void)
 
 static void reset_term(void)
 {
-	tcsetattr_stdin_TCSANOW(&initial_settings);
+	if (!OPT_BATCH_MODE)
+		tcsetattr_stdin_TCSANOW(&initial_settings);
 	if (ENABLE_FEATURE_CLEAN_UP) {
 		clearmems();
 # if ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE
@@ -729,7 +730,7 @@ static void reset_term(void)
 static void sig_catcher(int sig UNUSED_PARAM)
 {
 	reset_term();
-	_exit(EXIT_FAILURE);
+	kill_myself_with_sig(sig);
 }
 
 #endif /* FEATURE_USE_TERMIOS */
@@ -919,6 +920,12 @@ static unsigned handle_input(unsigned scan_mask, unsigned interval)
 {
 	struct pollfd pfd[1];
 
+	if (option_mask32 & OPT_EOF) {
+		/* EOF on stdin ("top </dev/null") */
+		sleep(interval);
+		return scan_mask;
+	}
+
 	pfd[0].fd = 0;
 	pfd[0].events = POLLIN;
 
@@ -1154,10 +1161,13 @@ int top_main(int argc UNUSED_PARAM, char **argv)
 	sort_function[0] = mem_sort;
 #endif
 
+	if (OPT_BATCH_MODE) {
+		option_mask32 |= OPT_EOF;
+	}
 #if ENABLE_FEATURE_USE_TERMIOS
-	tcgetattr(0, (void *) &initial_settings);
-	memcpy(&new_settings, &initial_settings, sizeof(new_settings));
-	if (!OPT_BATCH_MODE) {
+	else {
+		tcgetattr(0, (void *) &initial_settings);
+		memcpy(&new_settings, &initial_settings, sizeof(new_settings));
 		/* unbuffered input, turn off echo */
 		new_settings.c_lflag &= ~(ISIG | ICANON | ECHO | ECHONL);
 		tcsetattr_stdin_TCSANOW(&new_settings);
@@ -1269,11 +1279,7 @@ int top_main(int argc UNUSED_PARAM, char **argv)
 #if !ENABLE_FEATURE_USE_TERMIOS
 		sleep(interval);
 #else
-		if (option_mask32 & OPT_EOF)
-			/* EOF on stdin ("top </dev/null") */
-			sleep(interval);
-		else
-			scan_mask = handle_input(scan_mask, interval);
+		scan_mask = handle_input(scan_mask, interval);
 #endif /* FEATURE_USE_TERMIOS */
 	} /* end of "while (not Q)" */
 


More information about the busybox-cvs mailing list