summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-10-18 04:10:22 +0000
committerEric Andersen <andersen@codepoet.org>2001-10-18 04:10:22 +0000
commit8acbf1d3079e9ed6d15c39bd57135b13ecb4076f (patch)
treece1a2059658a8763b0db8c4174deff95935bb969
parent11fdb8a4c79752157a8263fbcf583916d5ec0347 (diff)
Make mount default to using /proc/filesystems to avoid
ever trying to mount a nodev filesystem. -Erik
-rw-r--r--mount.c33
-rw-r--r--util-linux/mount.c33
2 files changed, 62 insertions, 4 deletions
diff --git a/mount.c b/mount.c
index 2fc84f2c0..af57a7623 100644
--- a/mount.c
+++ b/mount.c
@@ -240,6 +240,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
{
int status = 0;
+#if defined BB_FEATURE_USE_DEVPS_PATCH
if (strcmp(filesystemType, "auto") == 0) {
static const char *noauto_array[] = { "tmpfs", "shm", "proc", "ramfs", "devpts", "devfs", "usbdevfs", 0 };
const char **noauto_fstype;
@@ -264,7 +265,35 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
break;
}
}
- } else {
+ }
+#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
+
+ // 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 == TRUE)
+ break;
+ }
+ }
+ fclose(f);
+ }
+#endif
+ else {
status = do_mount(blockDevice, directory, filesystemType,
flags | MS_MGC_VAL, string_flags, useMtab,
fakeIt, mtab_opts, mount_all);
@@ -279,7 +308,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
return (TRUE);
}
-void show_mounts()
+void show_mounts(void)
{
#if defined BB_FEATURE_USE_DEVPS_PATCH
int fd, i, numfilesystems;
diff --git a/util-linux/mount.c b/util-linux/mount.c
index 2fc84f2c0..af57a7623 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -240,6 +240,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
{
int status = 0;
+#if defined BB_FEATURE_USE_DEVPS_PATCH
if (strcmp(filesystemType, "auto") == 0) {
static const char *noauto_array[] = { "tmpfs", "shm", "proc", "ramfs", "devpts", "devfs", "usbdevfs", 0 };
const char **noauto_fstype;
@@ -264,7 +265,35 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
break;
}
}
- } else {
+ }
+#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
+
+ // 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 == TRUE)
+ break;
+ }
+ }
+ fclose(f);
+ }
+#endif
+ else {
status = do_mount(blockDevice, directory, filesystemType,
flags | MS_MGC_VAL, string_flags, useMtab,
fakeIt, mtab_opts, mount_all);
@@ -279,7 +308,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
return (TRUE);
}
-void show_mounts()
+void show_mounts(void)
{
#if defined BB_FEATURE_USE_DEVPS_PATCH
int fd, i, numfilesystems;