]> granicus.if.org Git - procps-ng/commitdiff
'slabtop -o' with stdin not a tty would complain
authorDerek Fawcus <dfawcus@brocade.com>
Thu, 15 Jan 2015 13:14:53 +0000 (13:14 +0000)
committerCraig Small <csmall@enc.com.au>
Sat, 24 Jan 2015 06:27:12 +0000 (17:27 +1100)
When the command is executed in one shot mode (-o) with stdin
being something other than a terminal,  the tcgetattr() call
would fail,  and generate an error message. e.g.:

slabtop: terminal setting retrieval: Inappropriate ioctl for device
 Active / Total Objects (% used)    : 905319 / 915886 (98.8%)

Signed-off-by: Craig Small <csmall@enc.com.au>
slabtop.c

index 4be35b919b5ed41811b1041dbdf1d63c86b4f1f0..ec7515ded6a22b812fdacc218ed3330d9acfded0 100644 (file)
--- a/slabtop.c
+++ b/slabtop.c
@@ -286,7 +286,7 @@ static void parse_input(char c)
 #define print_line(fmt, ...) if (run_once) printf(fmt, __VA_ARGS__); else printw(fmt, __VA_ARGS__)
 int main(int argc, char *argv[])
 {
-       int o;
+       int is_tty, o;
        unsigned short old_rows;
        struct slab_info *slab_list = NULL;
        int run_once = 0, retval = EXIT_SUCCESS;
@@ -337,7 +337,8 @@ int main(int argc, char *argv[])
                }
        }
 
-       if (tcgetattr(STDIN_FILENO, &saved_tty) == -1)
+       is_tty = isatty(STDIN_FILENO);
+       if (is_tty && tcgetattr(STDIN_FILENO, &saved_tty) == -1)
                xwarn(_("terminal setting retrieval"));
 
        old_rows = rows;
@@ -429,7 +430,8 @@ int main(int argc, char *argv[])
                }
        } while (delay);
 
-       tcsetattr(STDIN_FILENO, TCSAFLUSH, &saved_tty);
+       if (is_tty)
+               tcsetattr(STDIN_FILENO, TCSAFLUSH, &saved_tty);
        free_slabinfo(slab_list);
        if (!run_once)
                endwin();