Bernhard Fischer suggested that get_terminal_width_height() should return
authorRob Landley <rob@landley.net>
Thu, 1 Sep 2005 02:57:45 +0000 (02:57 -0000)
committerRob Landley <rob@landley.net>
Thu, 1 Sep 2005 02:57:45 +0000 (02:57 -0000)
the result of the ioctl so callers can tell if we have a tty.  (0 means
we have a tty, nonzero means the ioctl couldn't find size info and we
fake 80x24.  Really we should fake 80x25, but oh well...)

include/libbb.h
libbb/get_terminal_width_height.c

index 14670f0..077b310 100644 (file)
@@ -474,7 +474,7 @@ extern void print_login_prompt(void);
 
 extern void vfork_daemon_rexec(int nochdir, int noclose,
                int argc, char **argv, char *foreground_opt);
-extern void get_terminal_width_height(int fd, int *width, int *height);
+extern int get_terminal_width_height(int fd, int *width, int *height);
 extern unsigned long get_ug_id(const char *s, long (*my_getxxnam)(const char *));
 extern void xregcomp(regex_t *preg, const char *regex, int cflags);
 
index 7a1af6d..ce3e83c 100644 (file)
 #include "busybox.h"
 
 /* It is perfectly ok to pass in a NULL for either width or for
- * height, in which case that value will not be set.  It is also
- * perfectly ok to have CONFIG_FEATURE_AUTOWIDTH disabled, in
- * which case you will always get 80x24 */
-void get_terminal_width_height(int fd, int *width, int *height)
+ * height, in which case that value will not be set.  */
+int get_terminal_width_height(int fd, int *width, int *height)
 {
        struct winsize win = { 0, 0, 0, 0 };
-#ifdef CONFIG_FEATURE_AUTOWIDTH
-       if (ioctl(fd, TIOCGWINSZ, &win) != 0) {
-               win.ws_row = 24;
-               win.ws_col = 80;
-       }
-#endif
-       if (win.ws_row <= 1) {
-               win.ws_row = 24;
-       }
-       if (win.ws_col <= 1) {
-               win.ws_col = 80;
-       }
-       if (height) {
-               *height = (int) win.ws_row;
-       }
-       if (width) {
-               *width = (int) win.ws_col;
-       }
+       int ret = ioctl(fd, TIOCGWINSZ, &win);
+       if (win.ws_row <= 1) win.ws_row = 24;
+       if (win.ws_col <= 1) win.ws_col = 80;
+       if (height) *height = (int) win.ws_row;
+       if (width) *width = (int) win.ws_col;
 }
 
 /* END CODE */