ls: stop doing time() for each file in "ls -l"
ls: use fully-buffered stdout (can it be problematic on VERY slow/hanging NFS mounts?)
This commit is contained in:
parent
4ebaf10742
commit
e055443412
@ -537,6 +537,12 @@ static struct dnode **list_dir(const char *path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if ENABLE_FEATURE_LS_TIMESTAMPS
|
||||||
|
/* Do time() just once. Saves one syscall per file for "ls -l" */
|
||||||
|
/* Initialized in main() */
|
||||||
|
static time_t current_time_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
static int list_single(struct dnode *dn)
|
static int list_single(struct dnode *dn)
|
||||||
{
|
{
|
||||||
int i, column = 0;
|
int i, column = 0;
|
||||||
@ -611,7 +617,8 @@ static int list_single(struct dnode *dn)
|
|||||||
break;
|
break;
|
||||||
case LIST_DATE_TIME:
|
case LIST_DATE_TIME:
|
||||||
if ((all_fmt & LIST_FULLTIME) == 0) {
|
if ((all_fmt & LIST_FULLTIME) == 0) {
|
||||||
age = time(NULL) - ttime;
|
/* current_time_t ~== time(NULL) */
|
||||||
|
age = current_time_t - ttime;
|
||||||
printf("%6.6s ", filetime + 4);
|
printf("%6.6s ", filetime + 4);
|
||||||
if (age < 3600L * 24 * 365 / 2 && age > -15 * 60) {
|
if (age < 3600L * 24 * 365 / 2 && age > -15 * 60) {
|
||||||
/* hh:mm if less than 6 months old */
|
/* hh:mm if less than 6 months old */
|
||||||
@ -785,6 +792,12 @@ int ls_main(int argc, char **argv)
|
|||||||
USE_FEATURE_AUTOWIDTH(char *terminal_width_str = NULL;)
|
USE_FEATURE_AUTOWIDTH(char *terminal_width_str = NULL;)
|
||||||
USE_FEATURE_LS_COLOR(char *color_opt;)
|
USE_FEATURE_LS_COLOR(char *color_opt;)
|
||||||
|
|
||||||
|
setvbuf(stdout, bb_common_bufsiz1, _IOFBF, BUFSIZ);
|
||||||
|
|
||||||
|
#if ENABLE_FEATURE_LS_TIMESTAMPS
|
||||||
|
time(¤t_time_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
all_fmt = LIST_SHORT |
|
all_fmt = LIST_SHORT |
|
||||||
(ENABLE_FEATURE_LS_SORTFILES * (SORT_NAME | SORT_FORWARD));
|
(ENABLE_FEATURE_LS_SORTFILES * (SORT_NAME | SORT_FORWARD));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user