svn commit: r314685 - head/bin/ps

Ed Schouten ed at nuxi.nl
Sat Mar 4 22:59:08 UTC 2017


Hi Conrad,

2017-03-04 23:38 GMT+01:00 Conrad Meyer <cem at freebsd.org>:
> Log:
>   ps(1): Only detect terminal width if stdout is a tty

Nice!

> Modified: head/bin/ps/ps.c
> ==============================================================================
> --- head/bin/ps/ps.c    Sat Mar  4 22:23:59 2017        (r314684)
> +++ head/bin/ps/ps.c    Sat Mar  4 22:38:10 2017        (r314685)
> @@ -194,6 +194,8 @@ main(int argc, char *argv[])
>
>         if ((cols = getenv("COLUMNS")) != NULL && *cols != '\0')
>                 termwidth = atoi(cols);
> +       else if (!isatty(STDOUT_FILENO))
> +               termwidth = UNLIMITED;
>         else if ((ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&ws) == -1 &&
>              ioctl(STDERR_FILENO, TIOCGWINSZ, (char *)&ws) == -1 &&
>              ioctl(STDIN_FILENO,  TIOCGWINSZ, (char *)&ws) == -1) ||
>

I think you can actually go ahead and simplify this a bit:

- If something is a TTY, then our implementation of the TTY layer
guarantees that TIOCGWINSZ always works.
- If we're only interested in testing stdout whether it's a TTY, I
think it makes little sense to check TIOCGWINSZ on stdin, stderr.

I think there would therefore be very little harm to use something like this:

|         if ((cols = getenv("COLUMNS")) != NULL && *cols != '\0')
|                 termwidth = atoi(cols);
|         else if ((ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&ws) ==
-1 && ws.ws_row == 0)
|                 termwidth = UNLIMITED;
|        else
|                termwidth = ws.ws_col - 1;

-- 
Ed Schouten <ed at nuxi.nl>
Nuxi, 's-Hertogenbosch, the Netherlands
KvK-nr.: 62051717


More information about the svn-src-head mailing list