Hi,

Unlike all the other software in the tree that checks terminal sizes, 
ps(1) used to check the stdin and stderr terminal sizes as well as stdout.
When I unified the terminal size checks in the tree in March, I missed
this, and now "ps aux | blah" gets wrapped to 79 characters no matter
how big the terminal is.

The below diff brings back the old behavior: if the output is a pipe,
ps will check if either stderr or stdin is a terminal and if so will use
its width.

ok?

Index: ps.c
===================================================================
RCS file: /cvs/src/bin/ps/ps.c,v
retrieving revision 1.70
diff -u -p -r1.70 ps.c
--- ps.c        17 Mar 2016 05:27:10 -0000      1.70
+++ ps.c        22 Sep 2016 10:14:10 -0000
@@ -105,7 +105,10 @@ main(int argc, char *argv[])
        termwidth = 0;
        if ((cols = getenv("COLUMNS")) != NULL)
                termwidth = strtonum(cols, 1, INT_MAX, NULL);
-       if (termwidth == 0 && ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == 0 &&
+       if (termwidth == 0 &&
+           (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == 0 ||
+           ioctl(STDERR_FILENO, TIOCGWINSZ, &ws) == 0 ||
+           ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) == 0) &&
            ws.ws_col > 0)
                termwidth = ws.ws_col - 1;
        if (termwidth == 0)
Index: ps.1
===================================================================
RCS file: /cvs/src/bin/ps/ps.1,v
retrieving revision 1.108
diff -u -p -r1.108 ps.1
--- ps.1        8 Sep 2016 15:54:36 -0000       1.108
+++ ps.1        22 Sep 2016 10:14:10 -0000
@@ -543,8 +543,13 @@ If set to a positive integer,
 output is formatted to the given width in columns.
 Otherwise,
 .Nm
-defaults to the terminal width \(mi 1, or 79 columns if the output is not a
-terminal.
+defaults to the terminal width \(mi 1,
+or 79 columns if none of
+.Dv stdout ,
+.Dv stderr
+and
+.Dv stdin
+are a terminal.
 .It Ev TZ
 The time zone to use when displaying dates.
 See

Reply via email to