summaryrefslogtreecommitdiffhomepage
path: root/util-linux
diff options
context:
space:
mode:
Diffstat (limited to 'util-linux')
-rw-r--r--util-linux/mount.c68
1 files changed, 52 insertions, 16 deletions
diff --git a/util-linux/mount.c b/util-linux/mount.c
index 3d1f7ebbf..f6c647259 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -272,25 +272,61 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
#else
if (strcmp(filesystemType, "auto") == 0) {
char buf[255];
- FILE *f = xfopen("/proc/filesystems", "r");
-
- while (fgets(buf, sizeof(buf), f) != NULL) {
- filesystemType = buf;
- if (*filesystemType == '\t') { // Not a nodev filesystem
+ FILE *f;
+ int read_proc = 0;
+
+ f = fopen ( "/etc/filesystems", "r" );
+
+ if ( f ) {
+ while ( fgets ( buf, sizeof( buf ), f )) {
+ if ( *buf == '*' )
+ read_proc = 1;
+ else if ( *buf == '#' )
+ continue;
+ else {
+ filesystemType = buf;
+
+ // Add NULL termination to each line
+ while (*filesystemType && !isspace ( *filesystemType ))
+ filesystemType++;
+ *filesystemType = '\0';
+
+ filesystemType = buf;
+
+ if ( xstrlen ( filesystemType )) {
+ status = do_mount(blockDevice, directory, filesystemType,
+ flags | MS_MGC_VAL, string_flags,
+ useMtab, fakeIt, mtab_opts, mount_all);
+ if (status)
+ break;
+ }
+
+ }
+ }
+ fclose ( f );
+ }
- // Add NULL termination to each line
- while (*filesystemType && *filesystemType != '\n')
- filesystemType++;
- *filesystemType = '\0';
+ if (( !f || read_proc ) && !status ) {
+ f = xfopen("/proc/filesystems", "r");
+ while (fgets(buf, sizeof(buf), f) != NULL) {
filesystemType = buf;
- filesystemType++; // hop past tab
-
- status = do_mount(blockDevice, directory, filesystemType,
- flags | MS_MGC_VAL, string_flags,
- useMtab, fakeIt, mtab_opts, mount_all);
- if (status)
- break;
+ if (*filesystemType == '\t') { // Not a nodev filesystem
+
+ // Add NULL termination to each line
+ while (*filesystemType && *filesystemType != '\n')
+ filesystemType++;
+ *filesystemType = '\0';
+
+ filesystemType = buf;
+ filesystemType++; // hop past tab
+
+ status = do_mount(blockDevice, directory, filesystemType,
+ flags | MS_MGC_VAL, string_flags,
+ useMtab, fakeIt, mtab_opts, mount_all);
+ if (status)
+ break;
+ }
}
}
fclose(f);