Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP5:GA
coreutils-testsuite.1874
coreutils-fix_handling_of_symlinks_in_mount_lis...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File coreutils-fix_handling_of_symlinks_in_mount_list.patch of Package coreutils-testsuite.1874
commit fb902297f536df060ff10ef06bb8fe6cfe0c845e Author: Pádraig Brady <P@draigBrady.com> Date: Mon May 12 13:29:01 2014 +0100 df: fix handling of symlinks in mount list The symlink handling in commit v8.21-172-g33660b4 was incomplete in the case where there were symlinks in the mount list itself. For example, in the case where /dev/mapper/fedora-home was in the mount list and that in turn was a symlink to /dev/dm-2, we have: before> df --out=source /dev/mapper/fedora-home devtmpfs after > df --out=source /dev/mapper/fedora-home /dev/mapper/fedora-home * src/df.c (get_disk): Compare canonicalized device names from the mount list. Note we still display the non canonicalized name, even if longer, as we assume that is the most representative. * tests/df/df-symlink.sh: This could theoretically fail on some systems depending on the content of the mount list, but adjust to fail on any system where symlinks are present in the mount list for the current dir. diff --git a/src/df.c b/src/df.c index 2b5a54e..24897a3 100644 --- a/src/df.c +++ b/src/df.c @@ -1056,13 +1056,19 @@ get_disk (char const *disk) char const *file = disk; char *resolved = canonicalize_file_name (disk); - if (resolved && resolved[0] == '/') + if (resolved && IS_ABSOLUTE_FILE_NAME (resolved)) disk = resolved; size_t best_match_len = SIZE_MAX; for (me = mount_list; me; me = me->me_next) { - if (STREQ (disk, me->me_devname)) + /* TODO: Should cache canon_dev in the mount_entry struct. */ + char *devname = me->me_devname; + char *canon_dev = canonicalize_file_name (me->me_devname); + if (canon_dev && IS_ABSOLUTE_FILE_NAME (canon_dev)) + devname = canon_dev; + + if (STREQ (disk, devname)) { size_t len = strlen (me->me_mountdir); if (len < best_match_len) @@ -1074,6 +1080,8 @@ get_disk (char const *disk) best_match_len = len; } } + + free (canon_dev); } free (resolved); diff --git a/tests/df/df-symlink.sh b/tests/df/df-symlink.sh index aaed810..6d96bd2 100755 --- a/tests/df/df-symlink.sh +++ b/tests/df/df-symlink.sh @@ -28,4 +28,11 @@ df --out=source,target "$disk" > exp || skip_ "cannot get info for $disk" df --out=source,target symlink > out || fail=1 compare exp out || fail=1 +# Ensure we output the same values for device nodes and '.' +# This was not the case in coreutil-8.22 on systems +# where the device in the mount list was a symlink itself. +# I.E. '.' => /dev/mapper/fedora-home -> /dev/dm-2 +df --out=source,target '.' > out || fail=1 +compare exp out || fail=1 + Exit $fail
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor