diff options
| author | Rob Landley <rob@landley.net> | 2006-09-20 22:06:01 +0000 |
|---|---|---|
| committer | Rob Landley <rob@landley.net> | 2006-09-20 22:06:01 +0000 |
| commit | fbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4 (patch) | |
| tree | d75a76ec70963d1803d2a76bcf5030d30d8c6093 /libbb | |
| parent | 4ef6f647a3f971a69c599b51f917a6b74ae32a4c (diff) | |
| download | busybox-w32-fbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4.tar.gz busybox-w32-fbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4.tar.bz2 busybox-w32-fbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4.zip | |
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 3db891d59..f731e6e03 100644 --- a/libbb/Makefile.in +++ b/libbb/Makefile.in | |||
| @@ -22,16 +22,14 @@ LIBBB-y:= \ | |||
| 22 | kernel_version.c last_char_is.c login.c \ | 22 | kernel_version.c last_char_is.c login.c \ |
| 23 | make_directory.c md5.c mode_string.c mtab_file.c \ | 23 | make_directory.c md5.c mode_string.c mtab_file.c \ |
| 24 | obscure.c parse_mode.c parse_number.c perror_msg.c \ | 24 | obscure.c parse_mode.c parse_number.c perror_msg.c \ |
| 25 | perror_msg_and_die.c get_console.c \ | 25 | perror_msg_and_die.c get_console.c process_escape_sequence.c procps.c \ |
| 26 | process_escape_sequence.c procps.c \ | 26 | recursive_action.c remove_file.c info_msg.c vinfo_msg.c \ |
| 27 | recursive_action.c remove_file.c \ | ||
| 28 | restricted_shell.c run_parts.c run_shell.c safe_read.c safe_write.c \ | 27 | restricted_shell.c run_parts.c run_shell.c safe_read.c safe_write.c \ |
| 29 | safe_strncpy.c setup_environment.c sha1.c simplify_path.c \ | 28 | safe_strncpy.c setup_environment.c sha1.c simplify_path.c \ |
| 30 | trim.c u_signal_names.c vdprintf.c verror_msg.c \ | 29 | trim.c u_signal_names.c vdprintf.c verror_msg.c \ |
| 31 | info_msg.c vinfo_msg.c \ | ||
| 32 | vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c \ | 30 | vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c \ |
| 33 | xgethostbyname.c xgethostbyname2.c xreadlink.c xgetlarg.c \ | 31 | xgethostbyname.c xgethostbyname2.c xreadlink.c xgetlarg.c \ |
| 34 | get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \ | 32 | fclose_nonstdin.c fflush_stdout_and_exit.c \ |
| 35 | getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \ | 33 | getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \ |
| 36 | perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \ | 34 | perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \ |
| 37 | warn_ignoring_args.c concat_subpath_file.c vfork_daemon_rexec.c \ | 35 | 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 @@ | |||
| 1 | /* vi: set sw=4 ts=4: */ | ||
| 2 | /* | ||
| 3 | * Determine the width and height of the terminal. | ||
| 4 | * | ||
| 5 | * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> | ||
| 6 | * | ||
| 7 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #include <stdio.h> | ||
| 11 | #include <errno.h> | ||
| 12 | #include <fcntl.h> | ||
| 13 | #include <unistd.h> | ||
| 14 | #include <unistd.h> | ||
| 15 | #include <termios.h> | ||
| 16 | #include <sys/ioctl.h> | ||
| 17 | #include "libbb.h" | ||
| 18 | |||
| 19 | /* It is perfectly ok to pass in a NULL for either width or for | ||
| 20 | * height, in which case that value will not be set. */ | ||
| 21 | int get_terminal_width_height(int fd, int *width, int *height) | ||
| 22 | { | ||
| 23 | struct winsize win = { 0, 0, 0, 0 }; | ||
| 24 | int ret = ioctl(fd, TIOCGWINSZ, &win); | ||
| 25 | if (win.ws_row <= 1) win.ws_row = 24; | ||
| 26 | if (win.ws_col <= 1) win.ws_col = 80; | ||
| 27 | if (height) *height = (int) win.ws_row; | ||
| 28 | if (width) *width = (int) win.ws_col; | ||
| 29 | |||
| 30 | return ret; | ||
| 31 | } | ||
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 @@ | |||
| 6 | * Copyright (C) 2006 Rob Landley | 6 | * Copyright (C) 2006 Rob Landley |
| 7 | * Copyright (C) 2006 Denis Vlasenko | 7 | * Copyright (C) 2006 Denis Vlasenko |
| 8 | * | 8 | * |
| 9 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. | 9 | * Licensed under GPL version 2, see file LICENSE in this tarball for details. |
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | #include "busybox.h" | 12 | #include "busybox.h" |
| @@ -494,3 +494,26 @@ void xstat(char *name, struct stat *stat_buf) | |||
| 494 | } | 494 | } |
| 495 | #endif | 495 | #endif |
| 496 | 496 | ||
| 497 | #ifdef L_get_terminal_width_height | ||
| 498 | /* It is perfectly ok to pass in a NULL for either width or for | ||
| 499 | * * height, in which case that value will not be set. */ | ||
| 500 | int get_terminal_width_height(int fd, int *width, int *height) | ||
| 501 | { | ||
| 502 | struct winsize win = { 0, 0, 0, 0 }; | ||
| 503 | int ret = ioctl(fd, TIOCGWINSZ, &win); | ||
| 504 | if (!win.ws_row) { | ||
| 505 | char *s = getenv("LINES"); | ||
| 506 | if (s) win.ws_row = atoi(s); | ||
| 507 | } | ||
| 508 | if (win.ws_row <= 1) win.ws_row = 24; | ||
| 509 | if (!win.ws_col) { | ||
| 510 | char *s = getenv("COLUMNS"); | ||
| 511 | if (s) win.ws_col = atoi(s); | ||
| 512 | } | ||
| 513 | if (win.ws_col <= 1) win.ws_col = 80; | ||
| 514 | if (height) *height = (int) win.ws_row; | ||
| 515 | if (width) *width = (int) win.ws_col; | ||
| 516 | |||
| 517 | return ret; | ||
| 518 | } | ||
| 519 | #endif | ||
