diff options
-rw-r--r-- | src/df.c | 15 | ||||
-rwxr-xr-x | tests/df/skip-duplicates.sh | 15 |
2 files changed, 11 insertions, 19 deletions
@@ -642,7 +642,9 @@ filter_mount_list (void) if ((strchr (me->me_devname, '/') && ! strchr (devlist->me->me_devname, '/')) || (strlen (devlist->me->me_mountdir) - > strlen (me->me_mountdir))) + > strlen (me->me_mountdir)) + /* or one overmounted on a different device. */ + || ! STREQ (devlist->me->me_devname, me->me_devname)) { /* Discard mount entry for existing device. */ discard_me = devlist->me; @@ -652,17 +654,6 @@ filter_mount_list (void) { /* Discard mount entry currently being processed. */ discard_me = me; - - /* We might still want the devname from this mount entry as - the dev_num might not correlate with st_dev if another - device is subsequently overmounted at mountdir, so honor - the order of the presented list and replace with the - latest devname encountered. */ - if (! STREQ (devlist->me->me_devname, me->me_devname)) - { - free (devlist->me->me_devname); - devlist->me->me_devname = xstrdup (me->me_devname); - } } } diff --git a/tests/df/skip-duplicates.sh b/tests/df/skip-duplicates.sh index 6fb6ff561..a620e7320 100755 --- a/tests/df/skip-duplicates.sh +++ b/tests/df/skip-duplicates.sh @@ -54,8 +54,8 @@ struct mntent *getmntent (FILE *fp) {.mnt_fsname="fsname", .mnt_dir="/",}, {.mnt_fsname="/fsname", .mnt_dir="/."}, {.mnt_fsname="/fsname", .mnt_dir="/"}, - {.mnt_fsname="virtfs", .mnt_dir="/NONROOT"}, - {.mnt_fsname="virtfs2", .mnt_dir="/NONROOT"}, + {.mnt_fsname="virtfs", .mnt_dir="/NONROOT", .mnt_type="fstype1"}, + {.mnt_fsname="virtfs2", .mnt_dir="/NONROOT", .mnt_type="fstype2"}, {.mnt_fsname="netns", .mnt_dir="net:[1234567]"}, }; @@ -71,7 +71,8 @@ struct mntent *getmntent (FILE *fp) while (done++ <= 7) { - mntents[done-2].mnt_type = "-"; + if (!mntents[done-2].mnt_type) + mntents[done-2].mnt_type = "-"; if (STREQ (mntents[done-2].mnt_dir, "/NONROOT")) mntents[done-2].mnt_dir = nonroot_fs; return &mntents[done-2]; @@ -92,11 +93,11 @@ test -f x || skip_ "internal test failure: maybe LD_PRELOAD doesn't work?" # The fake mtab file should only contain entries # having the same device number; thus the output should # consist of a header and unique entries. -LD_PRELOAD=./k.so df >out || fail=1 +LD_PRELOAD=./k.so df -T >out || fail=1 test $(wc -l <out) -eq $(expr 1 + $unique_entries) || { fail=1; cat out; } # Ensure we fail when unable to stat invalid entries -LD_PRELOAD=./k.so CU_TEST_DUPE_INVALID=1 df >out && fail=1 +LD_PRELOAD=./k.so CU_TEST_DUPE_INVALID=1 df -T >out && fail=1 test $(wc -l <out) -eq $(expr 1 + $unique_entries) || { fail=1; cat out; } # df should also prefer "/fsname" over "fsname" @@ -106,8 +107,8 @@ if test "$unique_entries" = 2; then test $(grep -cF '/.' <out) -eq 0 || { fail=1; cat out; } fi -# df should use the last seen devname (mnt_fsname) -test $(grep -c 'virtfs2' <out) -eq 1 || { fail=1; cat out; } +# df should use the last seen devname (mnt_fsname) and devtype (mnt_type) +test $(grep -c 'virtfs2.*fstype2' <out) -eq 1 || { fail=1; cat out; } # Ensure that filtering duplicates does not affect -a processing. LD_PRELOAD=./k.so df -a >out || fail=1 |