Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Mar 2017 22:38:10 +0000 (UTC)
From:      Conrad Meyer <cem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r314685 - head/bin/ps
Message-ID:  <201703042238.v24McAD8008837@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cem
Date: Sat Mar  4 22:38:10 2017
New Revision: 314685
URL: https://svnweb.freebsd.org/changeset/base/314685

Log:
  ps(1): Only detect terminal width if stdout is a tty
  
  If stdout isn't a tty, use unlimited width output rather than truncating to
  79 characters.  This is helpful for shell scripts or e.g., 'ps | grep foo'.
  
  This hardcoded width has some history: In The Beginning of History[0], the
  width of ps was hardcoded as 80 bytes.  In 1985, Bloom@ added detection
  using TIOCGWINSZ on stdin.[1]  In 1986, Kirk merged a change to check
  stdout's window size instead.  In 1990, the fallback checks to stderr and
  stdin's TIOCGWINSZ were added by Marc@, with the commit message "new
  version."[2]
  
  OS X Darwin has a very similar modification to ps(1), which simply sets
  UNLIMITED for all non-tty outputs.[3]  I've chosen to respect COLUMNS
  instead of behaving identically to Darwin here, but I don't feel strongly
  about that.  We could match OS X for parity if that is desired.
  
  [0]: https://svnweb.freebsd.org/csrg/bin/ps/ps.c?annotate=1065
  [1]: https://svnweb.freebsd.org/csrg/bin/ps/ps.c?r1=18105&r2=18106
  [2]:
  https://svnweb.freebsd.org/csrg/bin/ps/ps.c?r1=40675&r2=40674&pathrev=40675
  [3]:
  https://opensource.apple.com/source/adv_cmds/adv_cmds-168/ps/ps.c.auto.html
  
  PR:		217159
  Reported by:	Deepak Nagaraj <n.deepak at gmail.com>

Modified:
  head/bin/ps/ps.c

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) ||



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201703042238.v24McAD8008837>