diff options
-rw-r--r-- | ls.c | 28 |
1 files changed, 18 insertions, 10 deletions
@@ -394,16 +394,6 @@ static void ls_print_long(size_t n, struct file_info files[static n]) } } -static void ls_print_single(size_t n, struct file_info files[static n]) -{ - for (size_t i = 0; i < n; i++) { - if (ls_print_inodes) { - printf("%ju ", (uintmax_t)files[i].st.st_ino); - } - printf("%s\n", ls_filename(files + i)); - } -} - static size_t ls_get_columns(void) { static size_t columns = 0; @@ -446,10 +436,24 @@ static void ls_print_serial(size_t n, struct file_info files[static n]) printf("%s\n", ls_filename(files + n - 1)); } +static void ls_print_single(size_t n, struct file_info files[static n]) +{ + for (size_t i = 0; i < n; i++) { + if (ls_print_inodes) { + printf("%ju ", (uintmax_t)files[i].st.st_ino); + } + printf("%s\n", ls_filename(files + i)); + } +} + static void ls_print_columns(size_t n, struct file_info files[static n]) { size_t widest = ls_find_widest(n, files); size_t columns = ls_get_columns(); + if (widest > columns / 2) { + ls_print_single(n, files); + return; + } size_t ncolumns = columns / widest; if (ls_print_inodes) { ncolumns /= 2; @@ -484,6 +488,10 @@ static void ls_print_rows(size_t n, struct file_info files[static n]) { size_t widest = ls_find_widest(n, files); size_t columns = ls_get_columns(); + if (widest > columns / 2) { + ls_print_single(n, files); + return; + } size_t ncolumns = columns / widest; if (ncolumns == 0) { ncolumns = 1; |