From fbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Wed, 20 Sep 2006 22:06:01 +0000 Subject: Teach get_terminal_width_height to fall back to $LINES and $COLUMNS when used via things like a serial console. --- libbb/xfuncs.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'libbb/xfuncs.c') 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 -- cgit v1.1