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;
}
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)
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";