Making note of my changes
[oweals/busybox.git] / mtab.c
diff --git a/mtab.c b/mtab.c
index b6304a174c841881e276c673e82738330ffc5417..98e42a383c8249c89dfad18980841197159c335f 100644 (file)
--- a/mtab.c
+++ b/mtab.c
@@ -26,8 +26,14 @@ erase_mtab(const char * name)
        FILE *mountTable = setmntent(mtab_file, "r");
        struct mntent * m;
 
-       if ( mountTable == 0
-        && (mountTable = setmntent("/proc/mounts", "r")) == 0 ) {
+       /* Check if reading the mtab file failed */
+       if ( mountTable == 0 
+#if ! defined BB_FEATURE_USE_PROCFS
+                             ) {
+#else 
+           /* Bummer.  fall back on trying the /proc filesystem */
+            && (mountTable = setmntent("/proc/mounts", "r")) == 0 ) {
+#endif
                perror(mtab_file);
                return;
        }
@@ -59,48 +65,6 @@ erase_mtab(const char * name)
                perror(mtab_file);
 }
 
-/*
- * Given a block device, find the mount table entry if that block device
- * is mounted.
- *
- * Given any other file (or directory), find the mount table entry for its
- * filesystem.
- */
-static struct mntent *
-findMountPoint(const char * name, const char * table)
-{
-    struct stat        s;
-    dev_t mountDevice;
-    FILE* mountTable;
-    struct mntent* mountEntry;
-
-    if ( stat(name, &s) != 0 )
-       return 0;
-
-    if ( (s.st_mode & S_IFMT) == S_IFBLK )
-       mountDevice = s.st_rdev;
-    else
-       mountDevice = s.st_dev;
-
-    
-    if ( (mountTable = setmntent(table, "r")) == 0 )
-       return 0;
-
-    while ( (mountEntry = getmntent(mountTable)) != 0 ) {
-       if ( strcmp(name, mountEntry->mnt_dir) == 0 || 
-               strcmp(name, mountEntry->mnt_fsname) == 0 )     /* String match. */
-           break;
-       if ( stat(mountEntry->mnt_fsname, &s) == 0 && 
-               s.st_rdev == mountDevice )      /* Match the device. */
-           break;
-       if ( stat(mountEntry->mnt_dir, &s) == 0 && 
-               s.st_dev == mountDevice )       /* Match the directory's mount point. */
-           break;
-    }
-    endmntent(mountTable);
-    return mountEntry;
-}
-
 extern void 
 write_mtab(char* blockDevice, char* directory, 
        char* filesystemType, long flags, char* string_flags)
@@ -118,13 +82,14 @@ write_mtab(char* blockDevice, char* directory,
            if ( length > 1 && directory[length - 1] == '/' )
                    directory[length - 1] = '\0';
 
+#ifdef BB_FEATURE_USE_PROCFS
            if ( filesystemType == 0 ) {
-                   struct mntent *     p
-                    = findMountPoint(blockDevice, "/proc/mounts");
+                   struct mntent *p = findMountPoint(blockDevice, "/proc/mounts");
 
                    if ( p && p->mnt_type )
                            filesystemType = p->mnt_type;
            }
+#endif
            m.mnt_fsname = blockDevice;
            m.mnt_dir = directory;
            m.mnt_type = filesystemType ? filesystemType : "default";