summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2022-04-18 21:33:23 -0400
committerJakob Kaivo <jkk@ung.org>2022-04-18 21:33:23 -0400
commitabd037c8b62741b36db153a2c5df5f215eaaa223 (patch)
tree90b4f96f9b5926b3bbd611c055eb63e7ffb45f96
parent69e61c15b1a1f90d80080936f02f74a242c44c8a (diff)
just print single output if widest file name is too wide
-rw-r--r--ls.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/ls.c b/ls.c
index eb4e7c6..9ed6673 100644
--- a/ls.c
+++ b/ls.c
@@ -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;