From 8acbf1d3079e9ed6d15c39bd57135b13ecb4076f Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 18 Oct 2001 04:10:22 +0000 Subject: Make mount default to using /proc/filesystems to avoid ever trying to mount a nodev filesystem. -Erik --- mount.c | 33 +++++++++++++++++++++++++++++++-- util-linux/mount.c | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/mount.c b/mount.c index 2fc84f2..af57a76 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 2fc84f2..af57a76 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; -- cgit v1.1