Teach get_terminal_width_height to fall back to $LINES and $COLUMNS when

used via things like a serial console.
This commit is contained in:
Rob Landley
2006-09-20 22:06:01 +00:00
parent 4ef6f647a3
commit fbdf121b7d
3 changed files with 27 additions and 37 deletions

View File

@ -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