svn commit: r337885 - head/bin/ls
Kyle Evans
kevans at FreeBSD.org
Thu Aug 16 01:27:17 UTC 2018
Author: kevans
Date: Thu Aug 16 01:27:16 2018
New Revision: 337885
URL: https://svnweb.freebsd.org/changeset/base/337885
Log:
ls(1): Fix color env var checking
CLICOLOR will behavior as always- if present at all in the environment,
allow colors.
COLORTERM, recently enforced, will have to be both present and not empty.
Submitted by: imp
Modified:
head/bin/ls/ls.c
Modified: head/bin/ls/ls.c
==============================================================================
--- head/bin/ls/ls.c Thu Aug 16 01:18:20 2018 (r337884)
+++ head/bin/ls/ls.c Thu Aug 16 01:27:16 2018 (r337885)
@@ -60,6 +60,7 @@ __FBSDID("$FreeBSD$");
#include <limits.h>
#include <locale.h>
#include <pwd.h>
+#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -152,6 +153,29 @@ char *enter_bold; /* ANSI sequence to set color to bo
static int rval;
+static bool
+do_color_from_env(void)
+{
+ const char *p;
+ bool doit;
+
+ doit = false;
+ p = getenv("CLICOLOR");
+ if (p == NULL) {
+ /*
+ * COLORTERM is the more standard name for this variable. We'll
+ * honor it as long as it's both set and not empty.
+ */
+ p = getenv("COLORTERM");
+ if (p != NULL && *p != '\0')
+ doit = true;
+ } else
+ doit = true;
+
+ return (doit &&
+ (isatty(STDOUT_FILENO) || getenv("CLICOLOR_FORCE")));
+}
+
int
main(int argc, char *argv[])
{
@@ -368,8 +392,7 @@ main(int argc, char *argv[])
f_listdot = 1;
/* Enabling of colours is conditional on the environment. */
- if ((getenv("CLICOLOR") || getenv("COLORTERM")) &&
- (isatty(STDOUT_FILENO) || getenv("CLICOLOR_FORCE")))
+ if (do_color_from_env())
#ifdef COLORLS
if (tgetent(termcapbuf, getenv("TERM")) == 1) {
ansi_fgcol = tgetstr("AF", &bp);
More information about the svn-src-all
mailing list