aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2006-09-20 22:06:01 +0000
committerRob Landley <rob@landley.net>2006-09-20 22:06:01 +0000
commitfbdf121b7da7fa78160f7c35ea7c4b3ed2f307d4 (patch)
treed75a76ec70963d1803d2a76bcf5030d30d8c6093
parent4ef6f647a3f971a69c599b51f917a6b74ae32a4c (diff)
downloadbusybox-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.in8
-rw-r--r--libbb/get_terminal_width_height.c31
-rw-r--r--libbb/xfuncs.c25
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. */
21int 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. */
500int 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