From 7ce7594fa31c64f49f9e6730c605879e0f3e7ac8 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Wed, 25 Jul 2007 17:27:58 +0000 Subject: ps: fix non-desktop ps -ww -- thanks rockeychu --- procps/ps.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'procps/ps.c') diff --git a/procps/ps.c b/procps/ps.c index 47e4c6111..50b6a6c94 100644 --- a/procps/ps.c +++ b/procps/ps.c @@ -11,6 +11,9 @@ #include "libbb.h" +/* Absolute maximum on output line length */ +enum { MAX_WIDTH = 2*1024 }; + #if ENABLE_DESKTOP /* Print value to buf, max size+1 chars (including trailing '\0') */ @@ -317,10 +320,11 @@ int ps_main(int argc, char **argv) /* Was INT_MAX, but some libc's go belly up with printf("%.*s") * and such large widths */ - terminal_width = 30000; + terminal_width = MAX_WIDTH; if (isatty(1)) { get_terminal_width_height(1, &terminal_width, NULL); - terminal_width--; + if (--terminal_width > MAX_WIDTH) + terminal_width = MAX_WIDTH; } format_header(); @@ -358,11 +362,12 @@ int ps_main(int argc, char **argv) * if w is given more than once, it is "unlimited" */ if (w_count) { - terminal_width = (w_count==1) ? 132 : INT_MAX; + terminal_width = (w_count==1) ? 132 : MAX_WIDTH; } else { get_terminal_width_height(1, &terminal_width, NULL); /* Go one less... */ - terminal_width--; + if (--terminal_width > MAX_WIDTH) + terminal_width = MAX_WIDTH; } #else /* only ENABLE_SELINUX */ i = getopt32(argc, argv, "Z"); -- cgit v1.2.3