aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-08-09 08:27:24 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-08-09 08:27:24 +0000
commitf893da875a24138fac30f070c7101b5330f0fef0 (patch)
treeede441ba82f7a1bf9942ba33a64e91bcd8173920
parent501bfe2630054f9988e08a5d77e1b1ff2abc78bb (diff)
downloadbusybox-w32-f893da875a24138fac30f070c7101b5330f0fef0.tar.gz
busybox-w32-f893da875a24138fac30f070c7101b5330f0fef0.tar.bz2
busybox-w32-f893da875a24138fac30f070c7101b5330f0fef0.zip
ls,ps,watch: measure terminal width on fd 0, not 1
-rw-r--r--coreutils/ls.c2
-rw-r--r--include/libbb.h3
-rw-r--r--libbb/xfuncs.c2
-rw-r--r--procps/ps.c4
-rw-r--r--procps/watch.c5
5 files changed, 9 insertions, 7 deletions
diff --git a/coreutils/ls.c b/coreutils/ls.c
index f47ec204c..920fad85e 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -811,7 +811,7 @@ int ls_main(int argc, char **argv)
811 811
812#if ENABLE_FEATURE_AUTOWIDTH 812#if ENABLE_FEATURE_AUTOWIDTH
813 /* Obtain the terminal width */ 813 /* Obtain the terminal width */
814 get_terminal_width_height(STDOUT_FILENO, &terminal_width, NULL); 814 get_terminal_width_height(STDIN_FILENO, &terminal_width, NULL);
815 /* Go one less... */ 815 /* Go one less... */
816 terminal_width--; 816 terminal_width--;
817#endif 817#endif
diff --git a/include/libbb.h b/include/libbb.h
index 546bbafc6..a14d6be44 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -803,7 +803,8 @@ extern int crypt_make_salt(char *p, int cnt, int rnd);
803extern int update_passwd(const char *filename, const char *username, 803extern int update_passwd(const char *filename, const char *username,
804 const char *new_pw); 804 const char *new_pw);
805 805
806int get_terminal_width_height(const int fd, int *width, int *height); 806/* NB: typically you want to pass fd 0, not 1. Think 'applet | grep something' */
807int get_terminal_width_height(int fd, int *width, int *height);
807 808
808int ioctl_or_perror(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5))); 809int ioctl_or_perror(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
809void ioctl_or_perror_and_die(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5))); 810void ioctl_or_perror_and_die(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index 177247c6b..67c986640 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -612,7 +612,7 @@ void selinux_or_die(void)
612 612
613/* It is perfectly ok to pass in a NULL for either width or for 613/* It is perfectly ok to pass in a NULL for either width or for
614 * height, in which case that value will not be set. */ 614 * height, in which case that value will not be set. */
615int get_terminal_width_height(const int fd, int *width, int *height) 615int get_terminal_width_height(int fd, int *width, int *height)
616{ 616{
617 struct winsize win = { 0, 0, 0, 0 }; 617 struct winsize win = { 0, 0, 0, 0 };
618 int ret = ioctl(fd, TIOCGWINSZ, &win); 618 int ret = ioctl(fd, TIOCGWINSZ, &win);
diff --git a/procps/ps.c b/procps/ps.c
index 50b6a6c94..5150a08a2 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -322,7 +322,7 @@ int ps_main(int argc, char **argv)
322 * and such large widths */ 322 * and such large widths */
323 terminal_width = MAX_WIDTH; 323 terminal_width = MAX_WIDTH;
324 if (isatty(1)) { 324 if (isatty(1)) {
325 get_terminal_width_height(1, &terminal_width, NULL); 325 get_terminal_width_height(0, &terminal_width, NULL);
326 if (--terminal_width > MAX_WIDTH) 326 if (--terminal_width > MAX_WIDTH)
327 terminal_width = MAX_WIDTH; 327 terminal_width = MAX_WIDTH;
328 } 328 }
@@ -364,7 +364,7 @@ int ps_main(int argc, char **argv)
364 if (w_count) { 364 if (w_count) {
365 terminal_width = (w_count==1) ? 132 : MAX_WIDTH; 365 terminal_width = (w_count==1) ? 132 : MAX_WIDTH;
366 } else { 366 } else {
367 get_terminal_width_height(1, &terminal_width, NULL); 367 get_terminal_width_height(0, &terminal_width, NULL);
368 /* Go one less... */ 368 /* Go one less... */
369 if (--terminal_width > MAX_WIDTH) 369 if (--terminal_width > MAX_WIDTH)
370 terminal_width = MAX_WIDTH; 370 terminal_width = MAX_WIDTH;
diff --git a/procps/watch.c b/procps/watch.c
index 2ad0564cd..b2adcd5ce 100644
--- a/procps/watch.c
+++ b/procps/watch.c
@@ -28,7 +28,7 @@ int watch_main(int argc, char **argv)
28{ 28{
29 unsigned opt; 29 unsigned opt;
30 unsigned period = 2; 30 unsigned period = 2;
31 unsigned cmdlen = 1; // 1 for terminal NUL 31 unsigned cmdlen;
32 char *header = NULL; 32 char *header = NULL;
33 char *cmd; 33 char *cmd;
34 char *tmp; 34 char *tmp;
@@ -42,6 +42,7 @@ int watch_main(int argc, char **argv)
42 argv += optind; 42 argv += optind;
43 43
44 p = argv; 44 p = argv;
45 cmdlen = 1; // 1 for terminal NUL
45 while (*p) 46 while (*p)
46 cmdlen += strlen(*p++) + 1; 47 cmdlen += strlen(*p++) + 1;
47 tmp = cmd = xmalloc(cmdlen); 48 tmp = cmd = xmalloc(cmdlen);
@@ -58,7 +59,7 @@ int watch_main(int argc, char **argv)
58 char *thyme; 59 char *thyme;
59 time_t t; 60 time_t t;
60 61
61 get_terminal_width_height(STDOUT_FILENO, &width, 0); 62 get_terminal_width_height(STDIN_FILENO, &width, 0);
62 header = xrealloc(header, width--); 63 header = xrealloc(header, width--);
63 // '%-*s' pads header with spaces to the full width 64 // '%-*s' pads header with spaces to the full width
64 snprintf(header, width, "Every %ds: %-*s", period, width, cmd); 65 snprintf(header, width, "Every %ds: %-*s", period, width, cmd);