diff options
author | Rob Landley | 2006-09-20 22:06:01 +0000 |
---|---|---|
committer | Rob Landley | 2006-09-20 22:06:01 +0000 |
commit | fbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4 (patch) | |
tree | d75a76ec70963d1803d2a76bcf5030d30d8c6093 /libbb | |
parent | 4ef6f647a3f971a69c599b51f917a6b74ae32a4c (diff) | |
download | busybox-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')
-rw-r--r-- | libbb/Makefile.in | 8 | ||||
-rw-r--r-- | libbb/get_terminal_width_height.c | 31 | ||||
-rw-r--r-- | libbb/xfuncs.c | 25 |
3 files changed, 27 insertions, 37 deletions
diff --git a/libbb/Makefile.in b/libbb/Makefile.in index 3db891d..f731e6e 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 941f04c..0000000 --- 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 <andersen@codepoet.org> - * - * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. - */ - -#include <stdio.h> -#include <errno.h> -#include <fcntl.h> -#include <unistd.h> -#include <unistd.h> -#include <termios.h> -#include <sys/ioctl.h> -#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 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 |