diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-10-18 04:10:22 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-10-18 04:10:22 +0000 |
commit | 8acbf1d3079e9ed6d15c39bd57135b13ecb4076f (patch) | |
tree | ce1a2059658a8763b0db8c4174deff95935bb969 | |
parent | 11fdb8a4c79752157a8263fbcf583916d5ec0347 (diff) | |
download | busybox-8acbf1d3079e9ed6d15c39bd57135b13ecb4076f.tar.gz |
Make mount default to using /proc/filesystems to avoid
ever trying to mount a nodev filesystem.
-Erik
-rw-r--r-- | mount.c | 33 | ||||
-rw-r--r-- | util-linux/mount.c | 33 |
2 files changed, 62 insertions, 4 deletions
@@ -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; |