| diff -urpN busybox-1.14.2/coreutils/ls.c busybox-1.14.2-ls/coreutils/ls.c |
| --- busybox-1.14.2/coreutils/ls.c 2009-06-22 00:40:29.000000000 +0200 |
| +++ busybox-1.14.2-ls/coreutils/ls.c 2009-07-03 12:46:16.000000000 +0200 |
| @@ -144,8 +144,7 @@ static const char ls_options[] ALIGN1 = |
| USE_FEATURE_LS_FOLLOWLINKS("L") /* 1, 24 */ |
| USE_FEATURE_LS_RECURSIVE("R") /* 1, 25 */ |
| USE_FEATURE_HUMAN_READABLE("h") /* 1, 26 */ |
| - USE_SELINUX("K") /* 1, 27 */ |
| - USE_SELINUX("Z") /* 1, 28 */ |
| + USE_SELINUX("KZ") /* 2, 28 */ |
| USE_FEATURE_AUTOWIDTH("T:w:") /* 2, 30 */ |
| ; |
| enum { |
| @@ -162,6 +161,16 @@ enum { |
| OPT_Q = (1 << 10), |
| //OPT_A = (1 << 11), |
| //OPT_k = (1 << 12), |
| + OPTBIT_color = 13 |
| + + 4 * ENABLE_FEATURE_LS_TIMESTAMPS |
| + + 4 * ENABLE_FEATURE_LS_SORTFILES |
| + + 2 * ENABLE_FEATURE_LS_FILETYPES |
| + + 1 * ENABLE_FEATURE_LS_FOLLOWLINKS |
| + + 1 * ENABLE_FEATURE_LS_RECURSIVE |
| + + 1 * ENABLE_FEATURE_HUMAN_READABLE |
| + + 2 * ENABLE_SELINUX |
| + + 2 * ENABLE_FEATURE_AUTOWIDTH, |
| + OPT_color = 1 << OPTBIT_color, |
| }; |
| |
| enum { |
| @@ -889,16 +898,6 @@ static int list_single(const struct dnod |
| } |
| |
| |
| -/* colored LS support by JaWi, janwillem.janssen@lxtreme.nl */ |
| -#if ENABLE_FEATURE_LS_COLOR |
| -/* long option entry used only for --color, which has no short option |
| - * equivalent */ |
| -static const char ls_color_opt[] ALIGN1 = |
| - "color\0" Optional_argument "\xff" /* no short equivalent */ |
| - ; |
| -#endif |
| - |
| - |
| int ls_main(int argc UNUSED_PARAM, char **argv) |
| { |
| struct dnode **dnd; |
| @@ -911,8 +910,25 @@ int ls_main(int argc UNUSED_PARAM, char |
| int dnfiles; |
| int dndirs; |
| int i; |
| +#if ENABLE_FEATURE_LS_COLOR |
| + /* colored LS support by JaWi, janwillem.janssen@lxtreme.nl */ |
| + /* coreutils 6.10: |
| + * # ls --color=BOGUS |
| + * ls: invalid argument 'BOGUS' for '--color' |
| + * Valid arguments are: |
| + * 'always', 'yes', 'force' |
| + * 'never', 'no', 'none' |
| + * 'auto', 'tty', 'if-tty' |
| + * (and substrings: "--color=alwa" work too) |
| + */ |
| + static const char ls_longopts[] ALIGN1 = |
| + "color\0" Optional_argument "\xff"; /* no short equivalent */ |
| + static const char color_str[] ALIGN1 = |
| + "always\0""yes\0""force\0" |
| + "auto\0""tty\0""if-tty\0"; |
| /* need to initialize since --color has _an optional_ argument */ |
| - USE_FEATURE_LS_COLOR(const char *color_opt = "always";) |
| + const char *color_opt = color_str; /* "always" */ |
| +#endif |
| |
| INIT_G(); |
| |
| @@ -927,7 +943,7 @@ int ls_main(int argc UNUSED_PARAM, char |
| #endif |
| |
| /* process options */ |
| - USE_FEATURE_LS_COLOR(applet_long_options = ls_color_opt;) |
| + USE_FEATURE_LS_COLOR(applet_long_options = ls_longopts;) |
| #if ENABLE_FEATURE_AUTOWIDTH |
| opt_complementary = "T+:w+"; /* -T N, -w N */ |
| opt = getopt32(argv, ls_options, &tabstops, &terminal_width |
| @@ -966,13 +982,20 @@ int ls_main(int argc UNUSED_PARAM, char |
| if (!p || (p[0] && strcmp(p, "none") != 0)) |
| show_color = 1; |
| } |
| - if (opt & (1 << i)) { /* next flag after short options */ |
| - if (strcmp("always", color_opt) == 0) |
| - show_color = 1; |
| - else if (strcmp("never", color_opt) == 0) |
| + if (opt & OPT_color) { |
| + if (color_opt[0] == 'n') |
| show_color = 0; |
| - else if (strcmp("auto", color_opt) == 0 && isatty(STDOUT_FILENO)) |
| - show_color = 1; |
| + else switch (index_in_substrings(color_str, color_opt)) { |
| + case 3: |
| + case 4: |
| + case 5: |
| + if (isatty(STDOUT_FILENO)) { |
| + case 0: |
| + case 1: |
| + case 2: |
| + show_color = 1; |
| + } |
| + } |
| } |
| #endif |
| |
| diff -urpN busybox-1.14.2/testsuite/ls/ls-1-works busybox-1.14.2-ls/testsuite/ls/ls-1-works |
| --- busybox-1.14.2/testsuite/ls/ls-1-works 2009-06-22 00:32:00.000000000 +0200 |
| +++ busybox-1.14.2-ls/testsuite/ls/ls-1-works 2009-07-02 14:28:45.000000000 +0200 |
| @@ -1,4 +1,4 @@ |
| [ -n "$d" ] || d=.. |
| -ls -1 "$d" > logfile.gnu |
| -busybox ls -1 "$d" > logfile.bb |
| -cmp logfile.gnu logfile.bb |
| +LC_ALL=C ls -1 "$d" > logfile.gnu |
| +LC_ALL=C busybox ls -1 "$d" > logfile.bb |
| +diff -ubw logfile.gnu logfile.bb |
| diff -urpN busybox-1.14.2/testsuite/ls/ls-h-works busybox-1.14.2-ls/testsuite/ls/ls-h-works |
| --- busybox-1.14.2/testsuite/ls/ls-h-works 2009-06-22 00:32:00.000000000 +0200 |
| +++ busybox-1.14.2-ls/testsuite/ls/ls-h-works 2009-07-02 14:28:45.000000000 +0200 |
| @@ -1,4 +1,4 @@ |
| [ -n "$d" ] || d=.. |
| -ls -h "$d" > logfile.gnu |
| -busybox ls -h "$d" > logfile.bb |
| -cmp logfile.gnu logfile.bb |
| +LC_ALL=C ls -h "$d" > logfile.gnu |
| +LC_ALL=C busybox ls -h "$d" > logfile.bb |
| +diff -ubw logfile.gnu logfile.bb |
| diff -urpN busybox-1.14.2/testsuite/ls/ls-l-works busybox-1.14.2-ls/testsuite/ls/ls-l-works |
| --- busybox-1.14.2/testsuite/ls/ls-l-works 2009-06-22 00:32:00.000000000 +0200 |
| +++ busybox-1.14.2-ls/testsuite/ls/ls-l-works 2009-07-02 14:28:45.000000000 +0200 |
| @@ -1,4 +1,4 @@ |
| [ -n "$d" ] || d=.. |
| LC_ALL=C ls -l "$d" > logfile.gnu |
| -busybox ls -l "$d" > logfile.bb |
| -diff -w logfile.gnu logfile.bb |
| +LC_ALL=C busybox ls -l "$d" > logfile.bb |
| +diff -ubw logfile.gnu logfile.bb |
| diff -urpN busybox-1.14.2/testsuite/ls/ls-s-works busybox-1.14.2-ls/testsuite/ls/ls-s-works |
| --- busybox-1.14.2/testsuite/ls/ls-s-works 2009-06-22 00:32:00.000000000 +0200 |
| +++ busybox-1.14.2-ls/testsuite/ls/ls-s-works 2009-07-02 14:28:45.000000000 +0200 |
| @@ -1,4 +1,4 @@ |
| [ -n "$d" ] || d=.. |
| LC_ALL=C ls -1s "$d" > logfile.gnu |
| -busybox ls -1s "$d" > logfile.bb |
| -cmp logfile.gnu logfile.bb |
| +LC_ALL=C busybox ls -1s "$d" > logfile.bb |
| +diff -ubw logfile.gnu logfile.bb |