aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2012-09-26 16:58:25 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2012-09-26 16:58:25 +0200
commit73a19908975948154d1a07c3550592059238e9ef (patch)
treed68fa79168852aaacab2ba933d2c42d37e569f5a
parent06a98e32ae930a4e332281b42b6bb769dcadc04e (diff)
downloadbusybox-w32-73a19908975948154d1a07c3550592059238e9ef.tar.gz
busybox-w32-73a19908975948154d1a07c3550592059238e9ef.tar.bz2
busybox-w32-73a19908975948154d1a07c3550592059238e9ef.zip
top: do not touch stdin if -b
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--procps/top.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/procps/top.c b/procps/top.c
index dc5ea7360..1977fcafc 100644
--- a/procps/top.c
+++ b/procps/top.c
@@ -717,7 +717,8 @@ static void clearmems(void)
717 717
718static void reset_term(void) 718static void reset_term(void)
719{ 719{
720 tcsetattr_stdin_TCSANOW(&initial_settings); 720 if (!OPT_BATCH_MODE)
721 tcsetattr_stdin_TCSANOW(&initial_settings);
721 if (ENABLE_FEATURE_CLEAN_UP) { 722 if (ENABLE_FEATURE_CLEAN_UP) {
722 clearmems(); 723 clearmems();
723# if ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE 724# if ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE
@@ -729,7 +730,7 @@ static void reset_term(void)
729static void sig_catcher(int sig UNUSED_PARAM) 730static void sig_catcher(int sig UNUSED_PARAM)
730{ 731{
731 reset_term(); 732 reset_term();
732 _exit(EXIT_FAILURE); 733 kill_myself_with_sig(sig);
733} 734}
734 735
735#endif /* FEATURE_USE_TERMIOS */ 736#endif /* FEATURE_USE_TERMIOS */
@@ -919,6 +920,12 @@ static unsigned handle_input(unsigned scan_mask, unsigned interval)
919{ 920{
920 struct pollfd pfd[1]; 921 struct pollfd pfd[1];
921 922
923 if (option_mask32 & OPT_EOF) {
924 /* EOF on stdin ("top </dev/null") */
925 sleep(interval);
926 return scan_mask;
927 }
928
922 pfd[0].fd = 0; 929 pfd[0].fd = 0;
923 pfd[0].events = POLLIN; 930 pfd[0].events = POLLIN;
924 931
@@ -1154,10 +1161,13 @@ int top_main(int argc UNUSED_PARAM, char **argv)
1154 sort_function[0] = mem_sort; 1161 sort_function[0] = mem_sort;
1155#endif 1162#endif
1156 1163
1164 if (OPT_BATCH_MODE) {
1165 option_mask32 |= OPT_EOF;
1166 }
1157#if ENABLE_FEATURE_USE_TERMIOS 1167#if ENABLE_FEATURE_USE_TERMIOS
1158 tcgetattr(0, (void *) &initial_settings); 1168 else {
1159 memcpy(&new_settings, &initial_settings, sizeof(new_settings)); 1169 tcgetattr(0, (void *) &initial_settings);
1160 if (!OPT_BATCH_MODE) { 1170 memcpy(&new_settings, &initial_settings, sizeof(new_settings));
1161 /* unbuffered input, turn off echo */ 1171 /* unbuffered input, turn off echo */
1162 new_settings.c_lflag &= ~(ISIG | ICANON | ECHO | ECHONL); 1172 new_settings.c_lflag &= ~(ISIG | ICANON | ECHO | ECHONL);
1163 tcsetattr_stdin_TCSANOW(&new_settings); 1173 tcsetattr_stdin_TCSANOW(&new_settings);
@@ -1269,11 +1279,7 @@ int top_main(int argc UNUSED_PARAM, char **argv)
1269#if !ENABLE_FEATURE_USE_TERMIOS 1279#if !ENABLE_FEATURE_USE_TERMIOS
1270 sleep(interval); 1280 sleep(interval);
1271#else 1281#else
1272 if (option_mask32 & OPT_EOF) 1282 scan_mask = handle_input(scan_mask, interval);
1273 /* EOF on stdin ("top </dev/null") */
1274 sleep(interval);
1275 else
1276 scan_mask = handle_input(scan_mask, interval);
1277#endif /* FEATURE_USE_TERMIOS */ 1283#endif /* FEATURE_USE_TERMIOS */
1278 } /* end of "while (not Q)" */ 1284 } /* end of "while (not Q)" */
1279 1285