libbb: factor out code which queries screen width
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 22 Oct 2015 23:44:22 +0000 (01:44 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 22 Oct 2015 23:44:22 +0000 (01:44 +0200)
function                                             old     new   delta
get_terminal_width                                     -      17     +17
stty_main                                           1196    1197      +1
pstree_main                                          321     319      -2
ls_main                                              735     731      -4
watch_main                                           232     225      -7
bb_progress_update                                   714     706      -8
ps_main                                              555     543     -12
run_applet_and_exit                                  708     695     -13
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/6 up/down: 18/-46)            Total: -28 byte

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/ls.c
coreutils/stty.c
include/libbb.h
libbb/appletlib.c
libbb/progress.c
libbb/xfuncs.c
procps/ps.c
procps/pstree.c
procps/watch.c

index 14c8beaffa6f043069170006b431e42c7d1c8d27..c48498858182c37cc555ee2789b2b1fb0a8e03cd 100644 (file)
@@ -1105,7 +1105,7 @@ int ls_main(int argc UNUSED_PARAM, char **argv)
 
 #if ENABLE_FEATURE_AUTOWIDTH
        /* obtain the terminal width */
-       get_terminal_width_height(STDIN_FILENO, &G_terminal_width, NULL);
+       G_terminal_width = get_terminal_width(STDIN_FILENO);
        /* go one less... */
        G_terminal_width--;
 #endif
index 378a848e7547e55d3dd1052fb4602779fc95bb79..b63b0b91af7bce562f8d47b753129234583e9937 100644 (file)
@@ -1403,7 +1403,7 @@ int stty_main(int argc UNUSED_PARAM, char **argv)
                perror_on_device_and_die("%s");
 
        if (stty_state & (STTY_verbose_output | STTY_recoverable_output | STTY_noargs)) {
-               get_terminal_width_height(STDOUT_FILENO, &G.max_col, NULL);
+               G.max_col = get_terminal_width(STDOUT_FILENO);
                output_func(&mode, display_all);
                return EXIT_SUCCESS;
        }
index 28f57223dbd1d3975faea7f3fff86fb018f2cc2c..82484f9117adfab5297abdf99cd2c12fc0301b99 100644 (file)
@@ -1399,6 +1399,7 @@ extern void print_login_prompt(void) FAST_FUNC;
 char *xmalloc_ttyname(int fd) FAST_FUNC RETURNS_MALLOC;
 /* NB: typically you want to pass fd 0, not 1. Think 'applet | grep something' */
 int get_terminal_width_height(int fd, unsigned *width, unsigned *height) FAST_FUNC;
+int get_terminal_width(int fd) FAST_FUNC;
 
 int tcsetattr_stdin_TCSANOW(const struct termios *tp) FAST_FUNC;
 
index 0f83eda4bd87390a1778f8ee1a415b07351ffcf1..58bb2f1a00c80236db3a5dd4c66437422ff364a5 100644 (file)
@@ -623,7 +623,7 @@ static int busybox_main(char **argv)
                output_width = 80;
                if (ENABLE_FEATURE_AUTOWIDTH) {
                        /* Obtain the terminal width */
-                       get_terminal_width_height(0, &output_width, NULL);
+                       output_width = get_terminal_width(2);
                }
 
                dup2(1, 2);
index 372feb0c2423e155de181c66b031113065ff43c0..6154dca1784e84d3a8dc6c311ac216174128784c 100644 (file)
@@ -45,13 +45,6 @@ enum {
        STALLTIME = 5
 };
 
-static unsigned int get_tty2_width(void)
-{
-       unsigned width;
-       get_terminal_width_height(2, &width, NULL);
-       return width;
-}
-
 void FAST_FUNC bb_progress_init(bb_progress_t *p, const char *curfile)
 {
 #if ENABLE_UNICODE_SUPPORT
@@ -148,7 +141,7 @@ void FAST_FUNC bb_progress_update(bb_progress_t *p,
                unsigned ratio = 100 * beg_and_transferred / totalsize;
                fprintf(stderr, "%4u%%", ratio);
 
-               barlength = get_tty2_width() - 49;
+               barlength = get_terminal_width(2) - 49;
                if (barlength > 0) {
                        /* god bless gcc for variable arrays :) */
                        char buf[barlength + 1];
index 0c9969640de6db7c9fd3b1cad79cf1992b52865b..206edb4a0f0c2ad3c061e74c9e3eb09e4cc0ce4d 100644 (file)
@@ -270,6 +270,12 @@ int FAST_FUNC get_terminal_width_height(int fd, unsigned *width, unsigned *heigh
                *width = wh_helper(win.ws_col, 80, "COLUMNS", &err);
        return err;
 }
+int FAST_FUNC get_terminal_width(int fd)
+{
+       unsigned width;
+       get_terminal_width_height(fd, &width, NULL);
+       return width;
+}
 
 int FAST_FUNC tcsetattr_stdin_TCSANOW(const struct termios *tp)
 {
index bde5f94853e99554a8d04f7d35b735cbf3fde968..fbafa68a92d1023668f9d9e070d3b34e5e921415 100644 (file)
@@ -622,7 +622,7 @@ int ps_main(int argc UNUSED_PARAM, char **argv)
         * and such large widths */
        terminal_width = MAX_WIDTH;
        if (isatty(1)) {
-               get_terminal_width_height(0, &terminal_width, NULL);
+               terminal_width = get_terminal_width(0);
                if (--terminal_width > MAX_WIDTH)
                        terminal_width = MAX_WIDTH;
        }
@@ -672,7 +672,7 @@ int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
        if (w_count) {
                terminal_width = (w_count == 1) ? 132 : MAX_WIDTH;
        } else {
-               get_terminal_width_height(0, &terminal_width, NULL);
+               terminal_width = get_terminal_width(0);
                /* Go one less... */
                if (--terminal_width > MAX_WIDTH)
                        terminal_width = MAX_WIDTH;
index ed1a4128950dbd65bc1015fede1217174512bbb2..c5fb83688ed4f95e394a7680ae3358ec617b06e4 100644 (file)
@@ -381,7 +381,7 @@ int pstree_main(int argc UNUSED_PARAM, char **argv)
 
        INIT_G();
 
-       get_terminal_width_height(0, &G.output_width, NULL);
+       G.output_width = get_terminal_width(0);
 
        opt_complementary = "?1";
        getopt32(argv, "p");
index 0397f21bf2b01a77509920d609188ff85f4e8efb..97aa04767bd33de7fd56a6d1d5f166d9081e5872 100644 (file)
@@ -72,7 +72,7 @@ int watch_main(int argc UNUSED_PARAM, char **argv)
 
                        // STDERR_FILENO is procps3 compat:
                        // "watch ls 2>/dev/null" does not detect tty size
-                       get_terminal_width_height(STDERR_FILENO, &new_width, NULL);
+                       new_width = get_terminal_width(STDERR_FILENO);
                        if (new_width != width) {
                                width = new_width;
                                free(header);