From fbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Wed, 20 Sep 2006 22:06:01 +0000 Subject: [PATCH] Teach get_terminal_width_height to fall back to $LINES and $COLUMNS when used via things like a serial console. --- libbb/Makefile.in | 8 +++----- libbb/get_terminal_width_height.c | 31 ------------------------------- libbb/xfuncs.c | 25 ++++++++++++++++++++++++- 3 files changed, 27 insertions(+), 37 deletions(-) delete mode 100644 libbb/get_terminal_width_height.c diff --git a/libbb/Makefile.in b/libbb/Makefile.in index 3db891d59..f731e6e03 100644 --- a/libbb/Makefile.in +++ b/libbb/Makefile.in @@ -22,16 +22,14 @@ LIBBB-y:= \ kernel_version.c last_char_is.c login.c \ make_directory.c md5.c mode_string.c mtab_file.c \ obscure.c parse_mode.c parse_number.c perror_msg.c \ - perror_msg_and_die.c get_console.c \ - process_escape_sequence.c procps.c \ - recursive_action.c remove_file.c \ + perror_msg_and_die.c get_console.c process_escape_sequence.c procps.c \ + recursive_action.c remove_file.c info_msg.c vinfo_msg.c \ restricted_shell.c run_parts.c run_shell.c safe_read.c safe_write.c \ safe_strncpy.c setup_environment.c sha1.c simplify_path.c \ trim.c u_signal_names.c vdprintf.c verror_msg.c \ - info_msg.c vinfo_msg.c \ vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c \ xgethostbyname.c xgethostbyname2.c xreadlink.c xgetlarg.c \ - get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \ + fclose_nonstdin.c fflush_stdout_and_exit.c \ getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \ perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \ warn_ignoring_args.c concat_subpath_file.c vfork_daemon_rexec.c \ diff --git a/libbb/get_terminal_width_height.c b/libbb/get_terminal_width_height.c deleted file mode 100644 index 941f04c3a..000000000 --- a/libbb/get_terminal_width_height.c +++ /dev/null @@ -1,31 +0,0 @@ -/* vi: set sw=4 ts=4: */ -/* - * Determine the width and height of the terminal. - * - * Copyright (C) 1999-2004 by Erik Andersen - * - * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. - */ - -#include -#include -#include -#include -#include -#include -#include -#include "libbb.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. */ -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 <= 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; - - return ret; -} diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index d77bf3839..92091e555 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