summaryrefslogtreecommitdiff
path: root/lib/mountlist.c
diff options
context:
space:
mode:
authorAndrew Warshall <warshall@99main.com>2012-11-04 16:41:15 -0800
committerJim Meyering <jim@meyering.net>2012-11-04 16:55:55 -0800
commit613bcb6205cf2b64d835c19074c5a7e7c6cb99eb (patch)
treecd2640bc7e305c5e51b7115a96ecaafdc60d2679 /lib/mountlist.c
parent0dbbe3f55352241d290403577dfebed802d6fd9a (diff)
downloadgnulib-613bcb6205cf2b64d835c19074c5a7e7c6cb99eb.tar.gz
mountlist: do not classify a bind-mounted dir entry as "dummy"
* lib/mountlist.c (ME_DUMMY_0): Rename from ME_DUMMY, but omit the "none"-testing clause. (ME_DUMMY) [MOUNTED_GETMNTENT1]: New macro to encapsulate the exception for bind-mounted directories. Copyright-paperwork-exempt: Yes
Diffstat (limited to 'lib/mountlist.c')
-rw-r--r--lib/mountlist.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/lib/mountlist.c b/lib/mountlist.c
index 67154b88d8..a9a9f2c7fa 100644
--- a/lib/mountlist.c
+++ b/lib/mountlist.c
@@ -149,16 +149,27 @@
#undef opendir
#undef closedir
-#ifndef ME_DUMMY
-# define ME_DUMMY(Fs_name, Fs_type) \
- (strcmp (Fs_type, "autofs") == 0 \
- || strcmp (Fs_type, "none") == 0 \
- || strcmp (Fs_type, "proc") == 0 \
- || strcmp (Fs_type, "subfs") == 0 \
- /* for NetBSD 3.0 */ \
- || strcmp (Fs_type, "kernfs") == 0 \
- /* for Irix 6.5 */ \
- || strcmp (Fs_type, "ignore") == 0)
+#define ME_DUMMY_0(Fs_name, Fs_type) \
+ (strcmp (Fs_type, "autofs") == 0 \
+ || strcmp (Fs_type, "proc") == 0 \
+ || strcmp (Fs_type, "subfs") == 0 \
+ /* for NetBSD 3.0 */ \
+ || strcmp (Fs_type, "kernfs") == 0 \
+ /* for Irix 6.5 */ \
+ || strcmp (Fs_type, "ignore") == 0)
+
+/* Historically, we have marked as "dummy" any file system of type "none",
+ but now that programs like du need to know about bind-mounted directories,
+ we grant an exception to any with "bind" in its list of mount options.
+ I.e., those are *not* dummy entries. */
+#ifdef MOUNTED_GETMNTENT1
+# define ME_DUMMY(Fs_name, Fs_type, Fs_ent) \
+ (ME_DUMMY_0 (Fs_name, Fs_type) \
+ || (strcmp (Fs_type, "none") == 0 \
+ && !hasmntopt (Fs_ent, "bind")))
+#else
+# define ME_DUMMY(Fs_name, Fs_type) \
+ (ME_DUMMY_0 (Fs_name, Fs_type) || strcmp (Fs_type, "none") == 0)
#endif
#ifdef __CYGWIN__