diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2012-09-26 16:58:25 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2012-09-26 16:58:25 +0200 |
commit | 73a19908975948154d1a07c3550592059238e9ef (patch) | |
tree | d68fa79168852aaacab2ba933d2c42d37e569f5a | |
parent | 06a98e32ae930a4e332281b42b6bb769dcadc04e (diff) | |
download | busybox-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.c | 26 |
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 | ||
718 | static void reset_term(void) | 718 | static 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) | |||
729 | static void sig_catcher(int sig UNUSED_PARAM) | 730 | static 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 | ||