Teach get_terminal_width_height to fall back to $LINES and $COLUMNS when used via things like a serial console.
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -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 \ | |
| @@ -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 <[email protected]> |
| - | * |
| - | * 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 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 |