diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-07-03 12:22:19 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-07-03 12:22:19 +0200 |
commit | ae05dd42ca809d81f7025d29701d4641f1a996bf (patch) | |
tree | c1755f25015c5a9aeaf99c7d9a412f0d07109fbd | |
parent | 5508363fd05ecf71bc1db887256da1c0ae960c8d (diff) | |
download | busybox-w32-ae05dd42ca809d81f7025d29701d4641f1a996bf.tar.gz busybox-w32-ae05dd42ca809d81f7025d29701d4641f1a996bf.tar.bz2 busybox-w32-ae05dd42ca809d81f7025d29701d4641f1a996bf.zip |
ls: make --color more compatible with coreutils
function old new delta
static.color_str - 34 +34
static.ls_longopts - 9 +9
ls_color_opt 9 - -9
ls_main 865 843 -22
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/1 up/down: 43/-31) Total: 12 bytes
text data bss dec hex filename
820145 450 7692 828287 ca37f busybox_old
820144 450 7692 828286 ca37e busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | coreutils/ls.c | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/coreutils/ls.c b/coreutils/ls.c index db42601e2..8a6faf23f 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c | |||
@@ -898,16 +898,6 @@ static int list_single(const struct dnode *dn) | |||
898 | } | 898 | } |
899 | 899 | ||
900 | 900 | ||
901 | /* colored LS support by JaWi, janwillem.janssen@lxtreme.nl */ | ||
902 | #if ENABLE_FEATURE_LS_COLOR | ||
903 | /* long option entry used only for --color, which has no short option | ||
904 | * equivalent */ | ||
905 | static const char ls_color_opt[] ALIGN1 = | ||
906 | "color\0" Optional_argument "\xff" /* no short equivalent */ | ||
907 | ; | ||
908 | #endif | ||
909 | |||
910 | |||
911 | int ls_main(int argc UNUSED_PARAM, char **argv) | 901 | int ls_main(int argc UNUSED_PARAM, char **argv) |
912 | { | 902 | { |
913 | struct dnode **dnd; | 903 | struct dnode **dnd; |
@@ -920,8 +910,25 @@ int ls_main(int argc UNUSED_PARAM, char **argv) | |||
920 | int dnfiles; | 910 | int dnfiles; |
921 | int dndirs; | 911 | int dndirs; |
922 | int i; | 912 | int i; |
913 | #if ENABLE_FEATURE_LS_COLOR | ||
914 | /* colored LS support by JaWi, janwillem.janssen@lxtreme.nl */ | ||
915 | /* coreutils 6.10: | ||
916 | * # ls --color=BOGUS | ||
917 | * ls: invalid argument 'BOGUS' for '--color' | ||
918 | * Valid arguments are: | ||
919 | * 'always', 'yes', 'force' | ||
920 | * 'never', 'no', 'none' | ||
921 | * 'auto', 'tty', 'if-tty' | ||
922 | * (and substrings: "--color=alwa" work too) | ||
923 | */ | ||
924 | static const char ls_longopts[] ALIGN1 = | ||
925 | "color\0" Optional_argument "\xff"; /* no short equivalent */ | ||
926 | static const char color_str[] ALIGN1 = | ||
927 | "always\0""yes\0""force\0" | ||
928 | "auto\0""tty\0""if-tty\0"; | ||
923 | /* need to initialize since --color has _an optional_ argument */ | 929 | /* need to initialize since --color has _an optional_ argument */ |
924 | IF_FEATURE_LS_COLOR(const char *color_opt = "always";) | 930 | const char *color_opt = color_str; /* "always" */ |
931 | #endif | ||
925 | 932 | ||
926 | INIT_G(); | 933 | INIT_G(); |
927 | 934 | ||
@@ -929,14 +936,14 @@ int ls_main(int argc UNUSED_PARAM, char **argv) | |||
929 | (ENABLE_FEATURE_LS_SORTFILES * (SORT_NAME | SORT_FORWARD)); | 936 | (ENABLE_FEATURE_LS_SORTFILES * (SORT_NAME | SORT_FORWARD)); |
930 | 937 | ||
931 | #if ENABLE_FEATURE_AUTOWIDTH | 938 | #if ENABLE_FEATURE_AUTOWIDTH |
932 | /* Obtain the terminal width */ | 939 | /* obtain the terminal width */ |
933 | get_terminal_width_height(STDIN_FILENO, &terminal_width, NULL); | 940 | get_terminal_width_height(STDIN_FILENO, &terminal_width, NULL); |
934 | /* Go one less... */ | 941 | /* go one less... */ |
935 | terminal_width--; | 942 | terminal_width--; |
936 | #endif | 943 | #endif |
937 | 944 | ||
938 | /* process options */ | 945 | /* process options */ |
939 | IF_FEATURE_LS_COLOR(applet_long_options = ls_color_opt;) | 946 | IF_FEATURE_LS_COLOR(applet_long_options = ls_longopts;) |
940 | #if ENABLE_FEATURE_AUTOWIDTH | 947 | #if ENABLE_FEATURE_AUTOWIDTH |
941 | opt_complementary = "T+:w+"; /* -T N, -w N */ | 948 | opt_complementary = "T+:w+"; /* -T N, -w N */ |
942 | opt = getopt32(argv, ls_options, &tabstops, &terminal_width | 949 | opt = getopt32(argv, ls_options, &tabstops, &terminal_width |
@@ -975,13 +982,20 @@ int ls_main(int argc UNUSED_PARAM, char **argv) | |||
975 | if (!p || (p[0] && strcmp(p, "none") != 0)) | 982 | if (!p || (p[0] && strcmp(p, "none") != 0)) |
976 | show_color = 1; | 983 | show_color = 1; |
977 | } | 984 | } |
978 | if (opt & OPT_color) { /* next flag after short options */ | 985 | if (opt & OPT_color) { |
979 | if (strcmp("always", color_opt) == 0) | 986 | if (color_opt[0] == 'n') |
980 | show_color = 1; | ||
981 | else if (strcmp("never", color_opt) == 0) | ||
982 | show_color = 0; | 987 | show_color = 0; |
983 | else if (strcmp("auto", color_opt) == 0 && isatty(STDOUT_FILENO)) | 988 | else switch (index_in_substrings(color_str, color_opt)) { |
984 | show_color = 1; | 989 | case 3: |
990 | case 4: | ||
991 | case 5: | ||
992 | if (isatty(STDOUT_FILENO)) { | ||
993 | case 0: | ||
994 | case 1: | ||
995 | case 2: | ||
996 | show_color = 1; | ||
997 | } | ||
998 | } | ||
985 | } | 999 | } |
986 | #endif | 1000 | #endif |
987 | 1001 | ||