mirror of
https://git.FreeBSD.org/src.git
synced 2024-10-18 02:19:39 +00:00
ls: Make -, apply to -s as well as -l.
While here, remove a bogus comment about a gcc bug. The bug was in ls,
which used an incorrect format string, and in libc, which accepted it.
MFC after: 1 week
Reviewed by: brooks
Differential Revision: https://reviews.freebsd.org/D46067
(cherry picked from commit 647d4a8caf
)
This commit is contained in:
parent
0e678b79d7
commit
6005047675
@ -31,7 +31,7 @@
|
||||
.\"
|
||||
.\" @(#)ls.1 8.7 (Berkeley) 7/29/94
|
||||
.\"
|
||||
.Dd October 31, 2022
|
||||
.Dd July 22, 2024
|
||||
.Dt LS 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -439,6 +439,8 @@ output is not to a terminal.
|
||||
.It Fl ,
|
||||
(Comma) When the
|
||||
.Fl l
|
||||
or
|
||||
.Fl s
|
||||
option is set, print file sizes grouped and separated by thousands using the
|
||||
non-monetary separator returned by
|
||||
.Xr localeconv 3 ,
|
||||
|
@ -968,7 +968,8 @@ display(const FTSENT *p, FTSENT *list, int options)
|
||||
d.maxlen = maxlen;
|
||||
if (needstats) {
|
||||
d.btotal = btotal;
|
||||
d.s_block = snprintf(NULL, 0, "%lu", howmany(maxblock, blocksize));
|
||||
d.s_block = snprintf(NULL, 0, f_thousands ? "%'ld" : "%ld",
|
||||
howmany(maxblock, blocksize));
|
||||
d.s_flags = maxflags;
|
||||
d.s_label = maxlabelstr;
|
||||
d.s_group = maxgroup;
|
||||
|
@ -227,7 +227,7 @@ printlong(const DISPLAY *dp)
|
||||
(void)printf("%*ju ",
|
||||
dp->s_inode, (uintmax_t)sp->st_ino);
|
||||
if (f_size)
|
||||
(void)printf("%*jd ",
|
||||
(void)printf(f_thousands ? "%'*jd " : "%*jd ",
|
||||
dp->s_block, howmany(sp->st_blocks, blocksize));
|
||||
strmode(sp->st_mode, buf);
|
||||
aclmode(buf, p);
|
||||
@ -404,7 +404,7 @@ printaname(const FTSENT *p, u_long inodefield, u_long sizefield)
|
||||
chcnt += printf("%*ju ",
|
||||
(int)inodefield, (uintmax_t)sp->st_ino);
|
||||
if (f_size)
|
||||
chcnt += printf("%*jd ",
|
||||
chcnt += printf(f_thousands ? "%'*jd " : "%*jd ",
|
||||
(int)sizefield, howmany(sp->st_blocks, blocksize));
|
||||
#ifdef COLORLS
|
||||
if (f_color)
|
||||
@ -757,12 +757,10 @@ printsize(size_t width, off_t bytes)
|
||||
humanize_number(buf, sizeof(buf), (int64_t)bytes, "",
|
||||
HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
|
||||
(void)printf("%*s ", (u_int)width, buf);
|
||||
} else if (f_thousands) { /* with commas */
|
||||
/* This format assignment needed to work round gcc bug. */
|
||||
const char *format = "%*j'd ";
|
||||
(void)printf(format, (u_int)width, bytes);
|
||||
} else
|
||||
(void)printf("%*jd ", (u_int)width, bytes);
|
||||
} else {
|
||||
(void)printf(f_thousands ? "%'*jd " : "%*jd ",
|
||||
(u_int)width, bytes);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -799,6 +799,21 @@ s_flag_body()
|
||||
done
|
||||
}
|
||||
|
||||
atf_test_case scomma_flag
|
||||
scomma_flag_head()
|
||||
{
|
||||
atf_set "descr" "Verify that -s, prints out the size with ',' delimiters"
|
||||
}
|
||||
|
||||
scomma_flag_body()
|
||||
{
|
||||
export LC_ALL=en_US.UTF-8
|
||||
atf_check -e ignore dd if=/dev/urandom of=file bs=65536 count=64
|
||||
blocks=$(stat -f "%b" file)
|
||||
cblocks=$(printf "%'d" $blocks)
|
||||
atf_check -e empty -o match:"$cblocks[[:space:]]+file" ls -s, file
|
||||
}
|
||||
|
||||
atf_test_case t_flag
|
||||
t_flag_head()
|
||||
{
|
||||
@ -971,6 +986,7 @@ atf_init_test_cases()
|
||||
atf_add_test_case q_flag_and_w_flag
|
||||
atf_add_test_case r_flag
|
||||
atf_add_test_case s_flag
|
||||
atf_add_test_case scomma_flag
|
||||
atf_add_test_case t_flag
|
||||
atf_add_test_case u_flag
|
||||
atf_add_test_case v_flag
|
||||
|
Loading…
Reference in New Issue
Block a user