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