Patch from Rich Felker:

- duplicated format bit 14 forced LIST_EXEC always-on
- -p option was behaving just like -F (SUSv3 says -p only shows / for
  dirs, not other special symbols)
- tests for LIST_EXEC in color functions were nonsense (constant
  tests). i assume they were supposed to be (all_fmt & LIST_EXEC)
  however having coloring of executable files depend on -F seems
  undesirable.
This commit is contained in:
Rob Landley 2006-06-15 22:11:10 +00:00
parent 1761b9dabe
commit 9947a244d4

View File

@ -90,8 +90,6 @@ enum {
#define LIST_MASK ((LIST_EXEC << 1) - 1) #define LIST_MASK ((LIST_EXEC << 1) - 1)
/* what files will be displayed */ /* what files will be displayed */
/* TODO -- We may be able to make DISP_NORMAL 0 to save a bit slot. */
#define DISP_NORMAL (1U<<14) /* show normal filenames */
#define DISP_DIRNAME (1U<<15) /* 2 or more items? label directories */ #define DISP_DIRNAME (1U<<15) /* 2 or more items? label directories */
#define DISP_HIDDEN (1U<<16) /* show filenames starting with . */ #define DISP_HIDDEN (1U<<16) /* show filenames starting with . */
#define DISP_DOT (1U<<17) /* show . and .. */ #define DISP_DOT (1U<<17) /* show . and .. */
@ -99,7 +97,7 @@ enum {
#define DISP_RECURSIVE (1U<<19) /* show directory and everything below it */ #define DISP_RECURSIVE (1U<<19) /* show directory and everything below it */
#define DISP_ROWS (1U<<20) /* print across rows */ #define DISP_ROWS (1U<<20) /* print across rows */
#define DISP_MASK (((DISP_ROWS << 1) - 1) & ~(DISP_NORMAL - 1)) #define DISP_MASK (((DISP_ROWS << 1) - 1) & ~(DISP_DIRNAME - 1))
#ifdef CONFIG_FEATURE_LS_SORTFILES #ifdef CONFIG_FEATURE_LS_SORTFILES
/* how will the files be sorted */ /* how will the files be sorted */
@ -254,8 +252,7 @@ static char fgcolor(mode_t mode)
if (errno == ENOENT) { if (errno == ENOENT) {
return '\037'; return '\037';
} }
if (LIST_EXEC && S_ISREG(mode) if (S_ISREG(mode) && (mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
&& (mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
return COLOR(0xF000); /* File is executable ... */ return COLOR(0xF000); /* File is executable ... */
return COLOR(mode); return COLOR(mode);
} }
@ -263,8 +260,7 @@ static char fgcolor(mode_t mode)
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
static char bgcolor(mode_t mode) static char bgcolor(mode_t mode)
{ {
if (LIST_EXEC && S_ISREG(mode) if (S_ISREG(mode) && (mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
&& (mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
return ATTR(0xF000); /* File is executable ... */ return ATTR(0xF000); /* File is executable ... */
return ATTR(mode); return ATTR(mode);
} }
@ -276,8 +272,11 @@ static char append_char(mode_t mode)
{ {
if (!(all_fmt & LIST_FILETYPE)) if (!(all_fmt & LIST_FILETYPE))
return '\0'; return '\0';
if ((all_fmt & LIST_EXEC) && S_ISREG(mode) if (S_ISDIR(mode))
&& (mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return '/';
if (!(all_fmt & LIST_EXEC))
return '\0';
if (S_ISREG(mode) && (mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
return '*'; return '*';
return APPCHAR(mode); return APPCHAR(mode);
} }
@ -944,7 +943,7 @@ int ls_main(int argc, char **argv)
char *color_opt; char *color_opt;
#endif #endif
all_fmt = LIST_SHORT | DISP_NORMAL | STYLE_AUTO all_fmt = LIST_SHORT | STYLE_AUTO
#ifdef CONFIG_FEATURE_LS_TIMESTAMPS #ifdef CONFIG_FEATURE_LS_TIMESTAMPS
| TIME_MOD | TIME_MOD
#endif #endif