ls: handle -s through option_mask32
function old new delta scan_and_display_dirs_recur 493 494 +1 sort_and_display_files 424 423 -1 ls_main 682 677 -5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b60686cc2a
commit
5d43ddc59b
@ -198,7 +198,6 @@ SPLIT_SUBDIR = 2,
|
|||||||
|
|
||||||
/* 51306 lrwxrwxrwx 1 root root 2 May 11 01:43 /bin/view -> vi* */
|
/* 51306 lrwxrwxrwx 1 root root 2 May 11 01:43 /bin/view -> vi* */
|
||||||
/* what file information will be listed */
|
/* what file information will be listed */
|
||||||
LIST_BLOCKS = 1 << 1,
|
|
||||||
LIST_MODEBITS = 1 << 2,
|
LIST_MODEBITS = 1 << 2,
|
||||||
LIST_NLINKS = 1 << 3,
|
LIST_NLINKS = 1 << 3,
|
||||||
LIST_ID_NAME = 1 << 4,
|
LIST_ID_NAME = 1 << 4,
|
||||||
@ -210,23 +209,21 @@ LIST_FULLTIME = 1 << 9,
|
|||||||
LIST_SYMLINK = 1 << 10,
|
LIST_SYMLINK = 1 << 10,
|
||||||
LIST_FILETYPE = 1 << 11, /* show / suffix for dirs */
|
LIST_FILETYPE = 1 << 11, /* show / suffix for dirs */
|
||||||
LIST_CLASSIFY = 1 << 12, /* requires LIST_FILETYPE, also show *,|,@,= suffixes */
|
LIST_CLASSIFY = 1 << 12, /* requires LIST_FILETYPE, also show *,|,@,= suffixes */
|
||||||
LIST_MASK = (LIST_CLASSIFY << 1) - 1,
|
|
||||||
|
LIST_LONG = LIST_MODEBITS | LIST_NLINKS | LIST_ID_NAME | LIST_SIZE | \
|
||||||
|
LIST_DATE_TIME | LIST_SYMLINK,
|
||||||
|
|
||||||
/* what files will be displayed */
|
/* what files will be displayed */
|
||||||
DISP_DIRNAME = 1 << 13, /* 2 or more items? label directories */
|
DISP_DIRNAME = 1 << 13, /* 2 or more items? label directories */
|
||||||
DISP_NOLIST = 1 << 16, /* show directory as itself, not contents */
|
DISP_NOLIST = 1 << 16, /* show directory as itself, not contents */
|
||||||
DISP_RECURSIVE = 1 << 17, /* show directory and everything below it */
|
DISP_RECURSIVE = 1 << 17, /* show directory and everything below it */
|
||||||
DISP_ROWS = 1 << 18, /* print across rows */
|
DISP_ROWS = 1 << 18, /* print across rows */
|
||||||
DISP_MASK = ((DISP_ROWS << 1) - 1) & ~(DISP_DIRNAME - 1),
|
|
||||||
|
|
||||||
/* what is the overall style of the listing */
|
/* what is the overall style of the listing */
|
||||||
STYLE_COLUMNAR = 1 << 19, /* many records per line */
|
STYLE_COLUMNAR = 1 << 19, /* many records per line */
|
||||||
STYLE_LONG = 2 << 19, /* one record per line, extended info */
|
STYLE_LONG = 2 << 19, /* one record per line, extended info */
|
||||||
STYLE_SINGLE = 3 << 19, /* one record per line */
|
STYLE_SINGLE = 3 << 19, /* one record per line */
|
||||||
STYLE_MASK = STYLE_SINGLE,
|
STYLE_MASK = STYLE_SINGLE,
|
||||||
|
|
||||||
LIST_LONG = LIST_MODEBITS | LIST_NLINKS | LIST_ID_NAME | LIST_SIZE | \
|
|
||||||
LIST_DATE_TIME | LIST_SYMLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* -Cadi1l Std options, busybox always supports */
|
/* -Cadi1l Std options, busybox always supports */
|
||||||
@ -262,7 +259,7 @@ enum {
|
|||||||
OPT_l = (1 << 5),
|
OPT_l = (1 << 5),
|
||||||
OPT_g = (1 << 6),
|
OPT_g = (1 << 6),
|
||||||
//OPT_n = (1 << 7),
|
//OPT_n = (1 << 7),
|
||||||
//OPT_s = (1 << 8),
|
OPT_s = (1 << 8),
|
||||||
//OPT_x = (1 << 9),
|
//OPT_x = (1 << 9),
|
||||||
OPT_A = (1 << 10),
|
OPT_A = (1 << 10),
|
||||||
//OPT_k = (1 << 11),
|
//OPT_k = (1 << 11),
|
||||||
@ -321,7 +318,7 @@ static const uint32_t opt_flags[] = {
|
|||||||
LIST_LONG | STYLE_LONG, /* l - by keeping it after -1, "ls -l -1" ignores -1 */
|
LIST_LONG | STYLE_LONG, /* l - by keeping it after -1, "ls -l -1" ignores -1 */
|
||||||
LIST_LONG | STYLE_LONG, /* g (don't show owner) - handled via OPT_g. assumes l */
|
LIST_LONG | STYLE_LONG, /* g (don't show owner) - handled via OPT_g. assumes l */
|
||||||
LIST_LONG | STYLE_LONG | LIST_ID_NUMERIC, /* n (assumes l) */
|
LIST_LONG | STYLE_LONG | LIST_ID_NUMERIC, /* n (assumes l) */
|
||||||
LIST_BLOCKS, /* s */
|
0, /* s */
|
||||||
DISP_ROWS | STYLE_COLUMNAR, /* x */
|
DISP_ROWS | STYLE_COLUMNAR, /* x */
|
||||||
0, /* A */
|
0, /* A */
|
||||||
ENABLE_SELINUX * (LIST_CONTEXT|STYLE_SINGLE), /* k (ignored if !SELINUX) */
|
ENABLE_SELINUX * (LIST_CONTEXT|STYLE_SINGLE), /* k (ignored if !SELINUX) */
|
||||||
@ -559,7 +556,7 @@ static NOINLINE unsigned display_single(const struct dnode *dn)
|
|||||||
if (option_mask32 & OPT_i) /* list inodes */
|
if (option_mask32 & OPT_i) /* list inodes */
|
||||||
column += printf("%7llu ", (long long) dn->dn_ino);
|
column += printf("%7llu ", (long long) dn->dn_ino);
|
||||||
//TODO: -h should affect -s too:
|
//TODO: -h should affect -s too:
|
||||||
if (G.all_fmt & LIST_BLOCKS)
|
if (option_mask32 & OPT_s) /* list allocated blocks */
|
||||||
column += printf("%6"OFF_FMT"u ", (off_t) (dn->dn_blocks >> 1));
|
column += printf("%6"OFF_FMT"u ", (off_t) (dn->dn_blocks >> 1));
|
||||||
if (G.all_fmt & LIST_MODEBITS)
|
if (G.all_fmt & LIST_MODEBITS)
|
||||||
column += printf("%-10s ", (char *) bb_mode_string(dn->dn_mode));
|
column += printf("%-10s ", (char *) bb_mode_string(dn->dn_mode));
|
||||||
@ -704,10 +701,11 @@ static void display_files(struct dnode **dn, unsigned nfiles)
|
|||||||
if (column_width < len)
|
if (column_width < len)
|
||||||
column_width = len;
|
column_width = len;
|
||||||
}
|
}
|
||||||
column_width += 2 +
|
column_width += 2
|
||||||
IF_SELINUX( ((G.all_fmt & LIST_CONTEXT) ? 33 : 0) + )
|
IF_SELINUX(+ ((G.all_fmt & LIST_CONTEXT) ? 33 : 0))
|
||||||
((option_mask32 & OPT_i) ? 8 : 0) /* inode# width */
|
+ ((option_mask32 & OPT_i) ? 8 : 0) /* inode# width */
|
||||||
+ ((G.all_fmt & LIST_BLOCKS) ? 5 : 0);
|
+ ((option_mask32 & OPT_s) ? 5 : 0) /* "alloc block" width */
|
||||||
|
;
|
||||||
ncols = (unsigned)G_terminal_width / column_width;
|
ncols = (unsigned)G_terminal_width / column_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1069,8 +1067,11 @@ static void scan_and_display_dirs_recur(struct dnode **dn, int first)
|
|||||||
}
|
}
|
||||||
subdnp = scan_one_dir((*dn)->fullname, &nfiles);
|
subdnp = scan_one_dir((*dn)->fullname, &nfiles);
|
||||||
#if ENABLE_DESKTOP
|
#if ENABLE_DESKTOP
|
||||||
if ((G.all_fmt & STYLE_MASK) == STYLE_LONG || (G.all_fmt & LIST_BLOCKS))
|
if ((G.all_fmt & STYLE_MASK) == STYLE_LONG
|
||||||
|
|| (option_mask32 & OPT_s)
|
||||||
|
) {
|
||||||
printf("total %"OFF_FMT"u\n", calculate_blocks(subdnp));
|
printf("total %"OFF_FMT"u\n", calculate_blocks(subdnp));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (nfiles > 0) {
|
if (nfiles > 0) {
|
||||||
/* list all files at this level */
|
/* list all files at this level */
|
||||||
@ -1247,8 +1248,7 @@ int ls_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
cur = my_stat(*argv, *argv,
|
cur = my_stat(*argv, *argv,
|
||||||
/* follow links on command line unless -l, -s or -F: */
|
/* follow links on command line unless -l, -s or -F: */
|
||||||
!((G.all_fmt & STYLE_MASK) == STYLE_LONG
|
!((G.all_fmt & STYLE_MASK) == STYLE_LONG
|
||||||
|| (G.all_fmt & LIST_BLOCKS)
|
|| (option_mask32 & (OPT_s|OPT_F))
|
||||||
|| (option_mask32 & OPT_F)
|
|
||||||
)
|
)
|
||||||
/* ... or if -H: */
|
/* ... or if -H: */
|
||||||
|| (option_mask32 & OPT_H)
|
|| (option_mask32 & OPT_H)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user