aboutsummaryrefslogtreecommitdiff
path: root/procps
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 /procps
parent06a98e32ae930a4e332281b42b6bb769dcadc04e (diff)
downloadbusybox-73a19908975948154d1a07c3550592059238e9ef.tar.gz
top: do not touch stdin if -b
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'procps')
-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)
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)" */