]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(show_all_fs):
authorJim Meyering <jim@meyering.net>
Wed, 29 Jul 1998 04:01:29 +0000 (04:01 +0000)
committerJim Meyering <jim@meyering.net>
Wed, 29 Jul 1998 04:01:29 +0000 (04:01 +0000)
Revert to boolean value; the old negative value is
now in show_local_fs.
(show_local_fs): New variable.
(show_dev): New args me_dummy and me_class.  Use show_local_fs
and boolean show_all_fs in combination with these new args
to decide whether to show a device.
(show_disk): Pass flags to show_dev.
(show_point): Use a non-dummy mount entry if possible.
(show_all_entries): Pass flags to show_dev.
(main): --local sets show_local_fs now.  Ask for file system types if
show_local_fs is nonzero, since ME_REMOTE might need them.

From Paul.

src/df.c

index ce7ff3b210d08485bb6e98d6660521d4a68af1c3..6ff12cc9eba90bdbc93b4934b492b99b0290b99e 100644 (file)
--- a/src/df.c
+++ b/src/df.c
@@ -47,10 +47,13 @@ char *program_name;
 /* If nonzero, show inode information. */
 static int inode_format;
 
-/* If positive, show all entries; if zero, omit size-zero entries and
-   automounter dummies; if negative, also omit non-local filesystems.  */
+/* If nonzero, show even filesystems with zero size or
+   uninteresting types. */
 static int show_all_fs;
 
+/* If nonzero, show only local filesystems.  */
+static int show_local_fs;
+
 /* If nonzero, output data for each filesystem corresponding to a
    command line argument -- even if it's a dummy (automounter) entry.  */
 static int show_listed_fs;
@@ -206,26 +209,31 @@ df_readable (uintmax_t n, char *buf,
    filesystem on DISK.
    If FSTYPE is non-NULL, it is the type of the filesystem on DISK.
    If MOUNT_POINT is non-NULL, then DISK may be NULL -- certain systems may
-   not be able to produce statistics in this case.  */
+   not be able to produce statistics in this case.
+   ME_DUMMY and ME_REMOTE are the mount entry flags.  */
 
 static void
-show_dev (const char *disk, const char *mount_point, const char *fstype)
+show_dev (const char *disk, const char *mount_point, const char *fstype,
+         int me_dummy, int me_remote)
 {
   struct fs_usage fsu;
   const char *stat_file;
 
-  /* If MOUNT_POINT is NULL, then the filesystem is not mounted, and this
-     program reports on the filesystem that the special file is on.
-     It would be better to report on the unmounted filesystem,
-     but statfs doesn't do that on most systems.  */
-  stat_file = mount_point ? mount_point : disk;
+  if (me_remote && show_local_fs)
+    return;
 
-  if (show_all_fs < 0 && fstype && REMOTE_FS_TYPE (fstype))
+  if (me_dummy && show_all_fs == 0 && !show_listed_fs)
     return;
 
   if (!selected_fstype (fstype) || excluded_fstype (fstype))
     return;
 
+  /* If MOUNT_POINT is NULL, then the filesystem is not mounted, and this
+     program reports on the filesystem that the special file is on.
+     It would be better to report on the unmounted filesystem,
+     but statfs doesn't do that on most systems.  */
+  stat_file = mount_point ? mount_point : disk;
+
   if (get_fs_usage (stat_file, disk, &fsu))
     {
       error (0, errno, "%s", stat_file);
@@ -233,7 +241,7 @@ show_dev (const char *disk, const char *mount_point, const char *fstype)
       return;
     }
 
-  if (fsu.fsu_blocks == 0 && show_all_fs <= 0 && !show_listed_fs)
+  if (fsu.fsu_blocks == 0 && !show_all_fs && !show_listed_fs)
     return;
 
   if (! disk)
@@ -354,11 +362,12 @@ show_disk (const char *disk)
   for (me = mount_list; me; me = me->me_next)
     if (STREQ (disk, me->me_devname))
       {
-       show_dev (me->me_devname, me->me_mountdir, me->me_type);
+       show_dev (me->me_devname, me->me_mountdir, me->me_type,
+                 me->me_dummy, me->me_remote);
        return;
       }
   /* No filesystem is mounted on DISK. */
-  show_dev (disk, (char *) NULL, (char *) NULL);
+  show_dev (disk, (char *) NULL, (char *) NULL, 0, 0);
 }
 
 /* Return the root mountpoint of the filesystem on which FILE exists, in
@@ -440,6 +449,7 @@ show_point (const char *point, const struct stat *statp)
 {
   struct stat disk_stats;
   struct mount_entry *me;
+  struct mount_entry *matching_dummy = NULL;
 
   for (me = mount_list; me; me = me->me_next)
     {
@@ -462,11 +472,27 @@ show_point (const char *point, const struct stat *statp)
          if (stat (me->me_mountdir, &disk_stats) != 0 ||
              disk_stats.st_dev != me->me_dev)
            continue;
-         show_dev (me->me_devname, me->me_mountdir, me->me_type);
+
+         /* Prefer non-dummy entries.  */
+         if (me->me_dummy)
+           {
+             matching_dummy = me;
+             continue;
+           }
+
+         show_dev (me->me_devname, me->me_mountdir, me->me_type,
+                   me->me_dummy, me->me_remote);
          return;
        }
     }
 
+  if (matching_dummy)
+    {
+      show_dev (matching_dummy->me_devname, matching_dummy->me_mountdir,
+               matching_dummy->me_type, 1, matching_dummy->me_remote);
+      return;
+    }
+
   /* We couldn't find the mount entry corresponding to POINT.  Go ahead and
      print as much info as we can; methods that require the device to be
      present will fail at a later point.  */
@@ -475,7 +501,7 @@ show_point (const char *point, const struct stat *statp)
     char *mp = find_mount_point (point, statp);
     if (mp)
       {
-       show_dev (0, mp, 0);
+       show_dev (0, mp, 0, 0, 0);
        free (mp);
       }
     else
@@ -504,7 +530,8 @@ show_all_entries (void)
   struct mount_entry *me;
 
   for (me = mount_list; me; me = me->me_next)
-    show_dev (me->me_devname, me->me_mountdir, me->me_type);
+    show_dev (me->me_devname, me->me_mountdir, me->me_type,
+             me->me_dummy, me->me_remote);
 }
 
 /* Add FSTYPE to the list of filesystem types to display. */
@@ -616,7 +643,7 @@ main (int argc, char **argv)
          output_block_size = 1024;
          break;
        case 'l':
-         show_all_fs = -1;
+         show_local_fs = 1;
          break;
        case 'm':
          output_block_size = 1024 * 1024;
@@ -715,8 +742,8 @@ main (int argc, char **argv)
   mount_list =
     read_filesystem_list ((fs_select_list != NULL
                           || fs_exclude_list != NULL
-                          || print_type),
-                         optind == argc ? show_all_fs : 1);
+                          || print_type
+                          || show_local_fs));
 
   if (mount_list == NULL)
     error (1, errno, _("cannot read table of mounted filesystems"));