diff options
author | Karel Zak | 2012-05-15 11:58:20 +0200 |
---|---|---|
committer | Karel Zak | 2012-05-15 11:58:20 +0200 |
commit | 7e9a9af14fef3ad555a287a367165e4a66b8482d (patch) | |
tree | 7c8faeec3718acc38cc4669a86abd398bd4b7939 | |
parent | blkid: use get_terminal_width() from ttyutils.h (diff) | |
download | kernel-qcow2-util-linux-7e9a9af14fef3ad555a287a367165e4a66b8482d.tar.gz kernel-qcow2-util-linux-7e9a9af14fef3ad555a287a367165e4a66b8482d.tar.xz kernel-qcow2-util-linux-7e9a9af14fef3ad555a287a367165e4a66b8482d.zip |
include/ttyutils: more robust get_terminal_width()
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r-- | include/ttyutils.h | 14 | ||||
-rw-r--r-- | misc-utils/blkid.c | 6 |
2 files changed, 16 insertions, 4 deletions
diff --git a/include/ttyutils.h b/include/ttyutils.h index 15809e85a..3c40d72a4 100644 --- a/include/ttyutils.h +++ b/include/ttyutils.h @@ -3,6 +3,7 @@ #include <stdlib.h> #include <termios.h> +#include <limits.h> #ifdef HAVE_SYS_IOCTL_H #include <sys/ioctl.h> #endif @@ -97,8 +98,17 @@ static inline int get_terminal_width(void) return w_win.ws_col; #endif cp = getenv("COLUMNS"); - if (cp) - return strtol(cp, NULL, 10); + if (cp) { + char *end = NULL; + long c; + + errno = 0; + c = strtol(cp, &end, 10); + + if (errno == 0 && end && *end == '\0' && end > cp && + c > 0 && c <= INT_MAX) + return c; + } return 0; } diff --git a/misc-utils/blkid.c b/misc-utils/blkid.c index aec3528b4..5268aba1e 100644 --- a/misc-utils/blkid.c +++ b/misc-utils/blkid.c @@ -148,9 +148,11 @@ static void pretty_print_line(const char *device, const char *fs_type, static int term_width = -1; int len, w; - if (term_width < 0) + if (term_width < 0) { term_width = get_terminal_width(); - + if (term_width <= 0) + term_width = 80; + } if (term_width > 80) { term_width -= 80; w = term_width / 10; |