commiting patch from bug 71: 0000071: patch: implement "--color" option for ls coloring control
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -304,11 +304,23 @@ config CONFIG_FEATURE_LS_USERNAME | |
| Allow ls to display username/groupname for files. | |
| config CONFIG_FEATURE_LS_COLOR | |
| - | bool " Use color to identify file types" |
| + | bool " Allow use of color to identify file types" |
| default y | |
| depends on CONFIG_LS | |
| help | |
| - | Allow ls to use color when displaying files. |
| + | This enables the --color option to ls. |
| + | |
| + | if CONFIG_FEATURE_LS_COLOR |
| + | config CONFIG_FEATURE_LS_COLOR_IS_DEFAULT |
| + | bool " Produce colored ls output by default" |
| + | default n |
| + | help |
| + | Saying yes here will turn coloring on by default, |
| + | even if no "--color" option is given to the ls command. |
| + | This is not recommended, since the colors are not |
| + | configurable, and the output may not be legible on |
| + | many output screens. |
| + | endif |
| config CONFIG_MD5SUM | |
| bool "md5sum" | |
| @@ -60,6 +60,7 @@ enum { | |
| #include <fcntl.h> | |
| #include <signal.h> | |
| #include <termios.h> | |
| + | #include <getopt.h> |
| #include <sys/ioctl.h> | |
| #include <sys/sysmacros.h> /* major() and minor() */ | |
| #include "busybox.h" | |
| @@ -164,8 +165,18 @@ enum { | |
| /* colored LS support by JaWi, [email protected] */ | |
| #ifdef CONFIG_FEATURE_LS_COLOR | |
| + | |
| static int show_color = 0; | |
| + | /* long option entry used only for --color, which has no short option |
| + | * equivalent. */ |
| + | static int got_color_opt; |
| + | static struct option ls_color_opt[] = |
| + | { |
| + | {"color", optional_argument, &got_color_opt, 1}, |
| + | {NULL, 0, NULL, 0} |
| + | }; |
| + | |
| #define COLOR(mode) ("\000\043\043\043\042\000\043\043"\ | |
| "\000\000\044\000\043\000\000\040" [TYPEINDEX(mode)]) | |
| #define ATTR(mode) ("\00\00\01\00\01\00\01\00"\ | |
| @@ -984,8 +995,7 @@ extern int ls_main(int argc, char **argv) | |
| #endif | |
| #ifdef CONFIG_FEATURE_LS_COLOR | |
| - | if (isatty(STDOUT_FILENO)) |
| - | show_color = 1; |
| + | bb_applet_long_options = ls_color_opt; |
| #endif | |
| /* process options */ | |
| @@ -1034,6 +1044,55 @@ extern int ls_main(int argc, char **argv) | |
| } | |
| } | |
| + | #ifdef CONFIG_FEATURE_LS_COLOR |
| + | if (got_color_opt) { |
| + | /* there is no way for bb_getopt_ulflags() to |
| + | * return us the argument string for long options |
| + | * which don't have a short option equivalent. |
| + | * all we can find out is that the option was |
| + | * present, and we have to rescan to find the |
| + | * argument string. |
| + | */ |
| + | got_color_opt=0; |
| + | optind = 1; |
| + | while ((i = getopt_long (argc, argv, ls_options, |
| + | ls_color_opt, NULL)) >= 0) { |
| + | if (i != 0) continue; |
| + | if (got_color_opt) { |
| + | if (!optarg || strcmp("always", optarg) == 0) |
| + | show_color = 1; |
| + | else if (strcmp("never", optarg) == 0) |
| + | show_color = 0; |
| + | else if (strcmp("auto", optarg) == 0 && |
| + | isatty(STDOUT_FILENO)) |
| + | show_color = 1; |
| + | |
| + | /* don't break; want to a) pick up repeated |
| + | * --color options, and b) leave optind |
| + | * set correctly when we're done. |
| + | */ |
| + | got_color_opt = 0; |
| + | } |
| + | } |
| + | #if CONFIG_FEATURE_LS_COLOR_IS_DEFAULT |
| + | } else { |
| + | /* if no option set by user, then this config option |
| + | * forces "auto", which is what busybox 1.00 and previous |
| + | * did. however, provide one more "out" for users that |
| + | * don't want color: if LS_COLOR is set, and is null or |
| + | * "none" -- then default coloring to "off". |
| + | */ |
| + | char *p; |
| + | if ((p = getenv ("LS_COLORS")) != NULL && |
| + | (*p == '\0' || (strcmp(p, "none") == 0))) { |
| + | show_color = 0; |
| + | } else if (isatty(STDOUT_FILENO)) { |
| + | show_color = 1; |
| + | } |
| + | #endif |
| + | } |
| + | #endif |
| + | |
| /* sort out which command line options take precedence */ | |
| #ifdef CONFIG_FEATURE_LS_RECURSIVE | |
| if (all_fmt & DISP_NOLIST) | |
| @@ -1602,6 +1602,11 @@ | |
| #else | |
| # define USAGE_AUTOWIDTH(a) | |
| #endif | |
| + | #ifdef CONFIG_FEATURE_LS_COLOR |
| + | #define USAGE_LS_COLOR(a) a |
| + | #else |
| + | #define USAGE_LS_COLOR(a) |
| + | #endif |
| #define ls_trivial_usage \ | |
| "[-1Aa" USAGE_LS_TIMESTAMPS("c") "Cd" USAGE_LS_TIMESTAMPS("e") USAGE_LS_FILETYPES("F") "iln" USAGE_LS_FILETYPES("p") USAGE_LS_FOLLOWLINKS("L") USAGE_LS_RECURSIVE("R") USAGE_LS_SORTFILES("rS") "s" USAGE_AUTOWIDTH("T") USAGE_LS_TIMESTAMPS("tu") USAGE_LS_SORTFILES("v") USAGE_AUTOWIDTH("w") "x" USAGE_LS_SORTFILES("X") USAGE_HUMAN_READABLE("h") USAGE_NOT_HUMAN_READABLE("") "k" USAGE_SELINUX("K") "] [filenames...]" | |
| @@ -1613,6 +1618,7 @@ | |
| "\t-a\tdo not hide entries starting with .\n" \ | |
| "\t-C\tlist entries by columns\n" \ | |
| USAGE_LS_TIMESTAMPS("\t-c\twith -l: show ctime\n") \ | |
| + | USAGE_LS_COLOR("\t--color[={always,never,auto}]\tto control coloring\n") \ |
| "\t-d\tlist directory entries instead of contents\n" \ | |
| USAGE_LS_TIMESTAMPS("\t-e\tlist both full date and full time\n") \ | |
| USAGE_LS_FILETYPES("\t-F\tappend indicator (one of */=@|) to entries\n") \ | |