diff options
author | Jim Meyering <jim@meyering.net> | 2006-08-17 15:46:56 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2006-08-17 15:46:56 +0000 |
commit | 23f176cae633cc795a8d7a0becb56ba1481f32ba (patch) | |
tree | db012f6f766824817d546b10670712dca73ab185 /src | |
parent | 1b3ac49f0e2c447f42b5252c48212078829d8211 (diff) | |
download | coreutils-23f176cae633cc795a8d7a0becb56ba1481f32ba.tar.xz |
ls -CF would misalign columns in some cases.
* src/ls.c (get_type_indicator): New function. extracted from...
(print_type_indicator): ...here. Use it.
(length_of_file_name_and_frills): Use it here, too, rather than
assuming stat.st_mode is valid.
Reported by Andreas Schwab, here:
<http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/7774>
FIXME: add a test for this: FYI, I did ls -CF /proc and visually
inspected the result.
Diffstat (limited to 'src')
-rw-r--r-- | src/ls.c | 24 |
1 files changed, 12 insertions, 12 deletions
@@ -3797,8 +3797,10 @@ print_file_name_and_frills (const struct fileinfo *f) print_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype); } -static void -print_type_indicator (bool stat_ok, mode_t mode, enum filetype type) +/* Given these arguments describing a file, return the single-byte + type indicator, or 0. */ +static char +get_type_indicator (bool stat_ok, mode_t mode, enum filetype type) { char c; @@ -3826,7 +3828,13 @@ print_type_indicator (bool stat_ok, mode_t mode, enum filetype type) else c = 0; } + return c; +} +static void +print_type_indicator (bool stat_ok, mode_t mode, enum filetype type) +{ + char c = get_type_indicator (stat_ok, mode, type); if (c) DIRED_PUTCHAR (c); } @@ -3950,16 +3958,8 @@ length_of_file_name_and_frills (const struct fileinfo *f) if (indicator_style != none) { - mode_t mode = f->stat.st_mode; - - len += (S_ISREG (mode) - ? (indicator_style == classify && (mode & S_IXUGO)) - : (S_ISDIR (mode) - || (indicator_style != slash - && (S_ISLNK (mode) - || S_ISFIFO (mode) - || S_ISSOCK (mode) - || S_ISDOOR (mode))))); + char c = get_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype); + len += (c != 0); } return len; |