From: Pádraig Brady
Date: Mon, 16 Jun 2014 23:18:47 +0000 (+0100)
Subject: df: use all of the last device details provided
X-Git-Tag: v8.23~38
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f8d74eb1b2ba17ef05f81c1c725e60a65cf8293;p=thirdparty%2Fcoreutils.git
df: use all of the last device details provided
* src/df.c (filter_mount_list): Recent commit v8.22-108-g25a2c94
failed to copy file system type along with the updated device name.
Therefore simply replace the existing mount entry with the
current one with all the latest device details. Note the name,
even if not shorter in this entry, will be replaced with a shorter
name in a subsequent mount entry.
* tests/df/skip-duplicates.sh: Add a test case.
---
diff --git a/src/df.c b/src/df.c
index 747d138b85..10047cea11 100644
--- a/src/df.c
+++ b/src/df.c
@@ -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 6fb6ff5618..a620e7320c 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