aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coreutils/ls.c12
-rw-r--r--include/libbb.h1
-rw-r--r--libbb/xfuncs.c6
3 files changed, 15 insertions, 4 deletions
diff --git a/coreutils/ls.c b/coreutils/ls.c
index 80ef92079..1f7d7f7bf 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -1145,11 +1145,15 @@ int ls_main(int argc UNUSED_PARAM, char **argv)
1145 1145
1146#if ENABLE_FEATURE_LS_COLOR 1146#if ENABLE_FEATURE_LS_COLOR
1147 /* set G_show_color = 1/0 */ 1147 /* set G_show_color = 1/0 */
1148 if (ENABLE_FEATURE_LS_COLOR_IS_DEFAULT && isatty(STDOUT_FILENO)) { 1148 if (ENABLE_FEATURE_LS_COLOR_IS_DEFAULT && !is_TERM_dumb()) {
1149 char *p = getenv("LS_COLORS"); 1149 char *p = getenv("LS_COLORS");
1150 /* LS_COLORS is unset, or (not empty && not "none") ? */ 1150 /* LS_COLORS is unset, or (not empty && not "none") ? */
1151 if (!p || (p[0] && strcmp(p, "none") != 0)) 1151 if (!p || (p[0] && strcmp(p, "none") != 0)) {
1152 G_show_color = 1; 1152 if (isatty(STDOUT_FILENO)) {
1153 /* check isatty() last because it's expensive (syscall) */
1154 G_show_color = 1;
1155 }
1156 }
1153 } 1157 }
1154 if (opt & OPT_color) { 1158 if (opt & OPT_color) {
1155 if (color_opt[0] == 'n') 1159 if (color_opt[0] == 'n')
@@ -1158,7 +1162,7 @@ int ls_main(int argc UNUSED_PARAM, char **argv)
1158 case 3: 1162 case 3:
1159 case 4: 1163 case 4:
1160 case 5: 1164 case 5:
1161 if (isatty(STDOUT_FILENO)) { 1165 if (!is_TERM_dumb() && isatty(STDOUT_FILENO)) {
1162 case 0: 1166 case 0:
1163 case 1: 1167 case 1:
1164 case 2: 1168 case 2:
diff --git a/include/libbb.h b/include/libbb.h
index 03f9c35f3..4c9c83bd1 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -1773,6 +1773,7 @@ extern void print_login_issue(const char *issue_file, const char *tty) FAST_FUNC
1773extern void print_login_prompt(void) FAST_FUNC; 1773extern void print_login_prompt(void) FAST_FUNC;
1774 1774
1775char *xmalloc_ttyname(int fd) FAST_FUNC RETURNS_MALLOC; 1775char *xmalloc_ttyname(int fd) FAST_FUNC RETURNS_MALLOC;
1776int is_TERM_dumb(void) FAST_FUNC;
1776/* NB: typically you want to pass fd 0, not 1. Think 'applet | grep something' */ 1777/* NB: typically you want to pass fd 0, not 1. Think 'applet | grep something' */
1777int get_terminal_width_height(int fd, unsigned *width, unsigned *height) FAST_FUNC; 1778int get_terminal_width_height(int fd, unsigned *width, unsigned *height) FAST_FUNC;
1778int get_terminal_width(int fd) FAST_FUNC; 1779int get_terminal_width(int fd) FAST_FUNC;
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index d93d8aaf5..c81ce4546 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -303,6 +303,12 @@ int FAST_FUNC get_terminal_width(int fd)
303 return width; 303 return width;
304} 304}
305 305
306int FAST_FUNC is_dumb_term(void)
307{
308 char *term = getenv("TERM");
309 return term && strcmp(term, "dumb") == 0;
310}
311
306int FAST_FUNC tcsetattr_stdin_TCSANOW(const struct termios *tp) 312int FAST_FUNC tcsetattr_stdin_TCSANOW(const struct termios *tp)
307{ 313{
308 return tcsetattr(STDIN_FILENO, TCSANOW, tp); 314 return tcsetattr(STDIN_FILENO, TCSANOW, tp);