summaryrefslogtreecommitdiff
path: root/libbb/xfuncs.c
diff options
context:
space:
mode:
authorRob Landley2006-09-20 22:06:01 +0000
committerRob Landley2006-09-20 22:06:01 +0000
commitfbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4 (patch)
treed75a76ec70963d1803d2a76bcf5030d30d8c6093 /libbb/xfuncs.c
parent4ef6f647a3f971a69c599b51f917a6b74ae32a4c (diff)
downloadbusybox-fbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4.zip
busybox-fbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4.tar.gz
Teach get_terminal_width_height to fall back to $LINES and $COLUMNS when
used via things like a serial console.
Diffstat (limited to 'libbb/xfuncs.c')
-rw-r--r--libbb/xfuncs.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index d77bf38..92091e5 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -6,7 +6,7 @@
* Copyright (C) 2006 Rob Landley
* Copyright (C) 2006 Denis Vlasenko
*
- * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
+ * Licensed under GPL version 2, see file LICENSE in this tarball for details.
*/
#include "busybox.h"
@@ -494,3 +494,26 @@ void xstat(char *name, struct stat *stat_buf)
}
#endif
+#ifdef L_get_terminal_width_height
+/* It is perfectly ok to pass in a NULL for either width or for
+ * * 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 };
+ int ret = ioctl(fd, TIOCGWINSZ, &win);
+ if (!win.ws_row) {
+ char *s = getenv("LINES");
+ if (s) win.ws_row = atoi(s);
+ }
+ if (win.ws_row <= 1) win.ws_row = 24;
+ if (!win.ws_col) {
+ char *s = getenv("COLUMNS");
+ if (s) win.ws_col = atoi(s);
+ }
+ if (win.ws_col <= 1) win.ws_col = 80;
+ if (height) *height = (int) win.ws_row;
+ if (width) *width = (int) win.ws_col;
+
+ return ret;
+}
+#endif