diff options
author | Jim Meyering <jim@meyering.net> | 2006-07-25 15:30:27 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2006-07-25 15:30:27 +0000 |
commit | c04a374bb026e19b2a993681cadae617b918d692 (patch) | |
tree | 2ea91d3ef63c72a242e2e704a037aa2d50fa522c | |
parent | 5a06d062c78b2f0b755eef9c4ec2faaf385fa6ac (diff) | |
download | coreutils-c04a374bb026e19b2a993681cadae617b918d692.tar.xz |
Get --dired offsets right when handling stat-failed entries.
* src/ls.c (print_long_format): Be careful to increment P by the
appropriate amount, even when inode_number_width and nlink_width
are zero.
* tests/ls/stat-failed: Test for the above.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | src/ls.c | 9 | ||||
-rwxr-xr-x | tests/ls/stat-failed | 22 |
3 files changed, 35 insertions, 2 deletions
@@ -1,5 +1,11 @@ 2006-07-25 Jim Meyering <jim@meyering.net> + Get --dired offsets right when handling stat-failed entries. + * src/ls.c (print_long_format): Be careful to increment P by the + appropriate amount, even when inode_number_width and nlink_width + are zero. + * tests/ls/stat-failed: Test for the above. + * src/ls.c (gobble_file) [USE_ACL]: Don't use-uninitialized the have_acl member. That would happen for a directory with both a non-stat'able entry and one with an ACL. @@ -3395,7 +3395,9 @@ print_long_format (const struct fileinfo *f) char hbuf[INT_BUFSIZE_BOUND (uintmax_t)]; sprintf (p, "%*s ", inode_number_width, f->stat_failed ? "?" : umaxtostr (f->stat.st_ino, hbuf)); - p += inode_number_width + 1; + /* Increment by strlen (p) here, rather than by inode_number_width + 1. + The latter is wrong when inode_number_width is zero. */ + p += strlen (p); } if (print_block_size) @@ -3421,7 +3423,10 @@ print_long_format (const struct fileinfo *f) sprintf (p, "%s %*s ", modebuf, nlink_width, f->stat_failed ? "?" : umaxtostr (f->stat.st_nlink, hbuf)); } - p += sizeof modebuf - 2 + any_has_acl + 1 + nlink_width + 1; + /* Increment by strlen (p) here, rather than by, e.g., + sizeof modebuf - 2 + any_has_acl + 1 + nlink_width + 1. + The latter is wrong when nlink_width is zero. */ + p += strlen (p); DIRED_INDENT (); diff --git a/tests/ls/stat-failed b/tests/ls/stat-failed index a7c006609..bf86681ba 100755 --- a/tests/ls/stat-failed +++ b/tests/ls/stat-failed @@ -33,4 +33,26 @@ fail=0 ls -Log d > out 2> err test $? = 1 || fail=1 +cat <<\EOF > exp || fail=1 +total 0 +?--------- ? ? ? d/s +EOF + +cmp out exp || fail=1 +test $fail = 1 && diff out exp 2> /dev/null + +# Ensure that the offsets in --dired output are accurate. +rm -f out exp +ls --dired -il d > out 2> /dev/null && fail=1 + +cat <<\EOF > exp || fail=1 + total 0 + ? ?--------- ? ? ? ? ? d/s +//DIRED// 46 49 +//DIRED-OPTIONS// --quoting-style=literal +EOF + +cmp out exp || fail=1 +test $fail = 1 && diff out exp 2> /dev/null + (exit $fail); exit $fail |