Teach get_terminal_width_height to fall back to $LINES and $COLUMNS when
used via things like a serial console.
This commit is contained in:
parent
4ef6f647a3
commit
fbdf121b7d
@ -22,16 +22,14 @@ LIBBB-y:= \
|
|||||||
kernel_version.c last_char_is.c login.c \
|
kernel_version.c last_char_is.c login.c \
|
||||||
make_directory.c md5.c mode_string.c mtab_file.c \
|
make_directory.c md5.c mode_string.c mtab_file.c \
|
||||||
obscure.c parse_mode.c parse_number.c perror_msg.c \
|
obscure.c parse_mode.c parse_number.c perror_msg.c \
|
||||||
perror_msg_and_die.c get_console.c \
|
perror_msg_and_die.c get_console.c process_escape_sequence.c procps.c \
|
||||||
process_escape_sequence.c procps.c \
|
recursive_action.c remove_file.c info_msg.c vinfo_msg.c \
|
||||||
recursive_action.c remove_file.c \
|
|
||||||
restricted_shell.c run_parts.c run_shell.c safe_read.c safe_write.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 \
|
safe_strncpy.c setup_environment.c sha1.c simplify_path.c \
|
||||||
trim.c u_signal_names.c vdprintf.c verror_msg.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 \
|
vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c \
|
||||||
xgethostbyname.c xgethostbyname2.c xreadlink.c xgetlarg.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 \
|
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 \
|
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 \
|
warn_ignoring_args.c concat_subpath_file.c vfork_daemon_rexec.c \
|
||||||
|
@ -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;
|
|
||||||
}
|
|
@ -6,7 +6,7 @@
|
|||||||
* Copyright (C) 2006 Rob Landley
|
* Copyright (C) 2006 Rob Landley
|
||||||
* Copyright (C) 2006 Denis Vlasenko
|
* 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"
|
#include "busybox.h"
|
||||||
@ -494,3 +494,26 @@ void xstat(char *name, struct stat *stat_buf)
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
||||||
|
Loading…
Reference in New Issue
Block a user