ls: fix columnar output. Closes 8731

In coreutils/ls.c, 1.19 introduced commit
2f7d9e8903029b1b5e51a15f9cb0dcb6ca17c3ac, removing the variable tabstops and
hard coding the column separation to 2 characters, but was not done correctly.
The column_width assumes a gap of 1 character, so the computed number of
columns exceeds the terminal width when many small files are encountered.

A minor problem but surprisingly annoying.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2016-03-06 17:53:11 +01:00
parent 7849ccb61c
commit ea351b9742

View File

@ -668,7 +668,7 @@ 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 += 1 + column_width += 2 +
IF_SELINUX( ((G.all_fmt & LIST_CONTEXT) ? 33 : 0) + ) IF_SELINUX( ((G.all_fmt & LIST_CONTEXT) ? 33 : 0) + )
((G.all_fmt & LIST_INO) ? 8 : 0) + ((G.all_fmt & LIST_INO) ? 8 : 0) +
((G.all_fmt & LIST_BLOCKS) ? 5 : 0); ((G.all_fmt & LIST_BLOCKS) ? 5 : 0);
@ -696,8 +696,8 @@ static void display_files(struct dnode **dn, unsigned nfiles)
if (i < nfiles) { if (i < nfiles) {
if (column > 0) { if (column > 0) {
nexttab -= column; nexttab -= column;
printf("%*s ", nexttab, ""); printf("%*s", nexttab, "");
column += nexttab + 1; column += nexttab;
} }
nexttab = column + column_width; nexttab = column + column_width;
column += display_single(dn[i]); column += display_single(dn[i]);