ls: handle -p and -F through option_mask32

function                                             old     new   delta
display_single                                      1039    1044      +5
append_char                                           67      68      +1
display_files                                        399     396      -3
scan_and_display_dirs_recur                          545     541      -4
ls_main                                              736     722     -14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/3 up/down: 6/-21)             Total: -15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-01-23 19:56:13 +01:00
parent 51b01fda30
commit 96d9c5bdbd

View File

@ -194,23 +194,18 @@ SPLIT_DIR = 1,
SPLIT_SUBDIR = 2, SPLIT_SUBDIR = 2,
/* Bits in G.all_fmt: */ /* Bits in G.all_fmt: */
/* 51306 lrwxrwxrwx 1 root root 2 May 11 01:43 /bin/view -> vi* */
/* what file information will be listed */
LIST_LONG = 1 << 0, /* long listing (-l and equivalents) */ LIST_LONG = 1 << 0, /* long listing (-l and equivalents) */
LIST_FILETYPE = 1 << 1, /* show / suffix for dirs */
LIST_CLASSIFY = 1 << 2, /* requires LIST_FILETYPE, also show *,|,@,= suffixes */
/* what files will be displayed */ /* what files will be displayed */
DISP_DIRNAME = 1 << 3, /* 2 or more items? label directories */ DISP_DIRNAME = 1 << 1, /* 2 or more items? label directories */
DISP_NOLIST = 1 << 4, /* show directory as itself, not contents */ DISP_NOLIST = 1 << 2, /* show directory as itself, not contents */
DISP_RECURSIVE = 1 << 5, /* show directory and everything below it */ DISP_RECURSIVE = 1 << 3, /* show directory and everything below it */
DISP_ROWS = 1 << 6, /* print across rows */ DISP_ROWS = 1 << 4, /* print across rows */
/* what is the overall style of the listing */ /* what is the overall style of the listing */
STYLE_COLUMNAR = 1 << 7, /* many records per line */ STYLE_COLUMNAR = 1 << 5, /* many records per line */
STYLE_LONG = 2 << 8, /* one record per line, extended info */ STYLE_LONG = 2 << 5, /* one record per line, extended info */
STYLE_SINGLE = 3 << 9, /* one record per line */ STYLE_SINGLE = 3 << 5, /* one record per line */
STYLE_MASK = STYLE_SINGLE, STYLE_MASK = STYLE_SINGLE,
}; };
@ -311,8 +306,8 @@ static const uint32_t opt_flags[] = {
0, /* A */ 0, /* A */
0, /* k (ignored) */ 0, /* k (ignored) */
#if ENABLE_FEATURE_LS_FILETYPES #if ENABLE_FEATURE_LS_FILETYPES
LIST_FILETYPE | LIST_CLASSIFY, /* F */ 0, /* F */
LIST_FILETYPE, /* p */ 0, /* p */
#endif #endif
#if ENABLE_FEATURE_LS_RECURSIVE #if ENABLE_FEATURE_LS_RECURSIVE
DISP_RECURSIVE, /* R */ DISP_RECURSIVE, /* R */
@ -449,11 +444,12 @@ static char bold(mode_t mode)
#if ENABLE_FEATURE_LS_FILETYPES #if ENABLE_FEATURE_LS_FILETYPES
static char append_char(mode_t mode) static char append_char(mode_t mode)
{ {
if (!(G.all_fmt & LIST_FILETYPE)) if (!(option_mask32 & (OPT_F|OPT_p)))
return '\0'; return '\0';
if (S_ISDIR(mode)) if (S_ISDIR(mode))
return '/'; return '/';
if (!(G.all_fmt & LIST_CLASSIFY)) if (!(option_mask32 & OPT_F))
return '\0'; return '\0';
if (S_ISREG(mode) && (mode & (S_IXUSR | S_IXGRP | S_IXOTH))) if (S_ISREG(mode) && (mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
return '*'; return '*';
@ -643,7 +639,9 @@ static NOINLINE unsigned display_single(const struct dnode *dn)
if (lpath) { if (lpath) {
printf(" -> "); printf(" -> ");
#if ENABLE_FEATURE_LS_FILETYPES || ENABLE_FEATURE_LS_COLOR #if ENABLE_FEATURE_LS_FILETYPES || ENABLE_FEATURE_LS_COLOR
if ((G.all_fmt & LIST_FILETYPE) || G_show_color) { if ((option_mask32 & (OPT_F|OPT_p))
|| G_show_color
) {
mode_t mode = dn->dn_mode_stat; mode_t mode = dn->dn_mode_stat;
if (!mode) if (!mode)
if (stat(dn->fullname, &statbuf) == 0) if (stat(dn->fullname, &statbuf) == 0)
@ -665,7 +663,7 @@ static NOINLINE unsigned display_single(const struct dnode *dn)
} }
} }
#if ENABLE_FEATURE_LS_FILETYPES #if ENABLE_FEATURE_LS_FILETYPES
if (G.all_fmt & LIST_FILETYPE) { if (option_mask32 & (OPT_F|OPT_p)) {
if (append) { if (append) {
putchar(append); putchar(append);
column++; column++;