Make mount default to using /proc/filesystems to avoid

ever trying to mount a nodev filesystem.
 -Erik
This commit is contained in:
Eric Andersen 2001-10-18 04:10:22 +00:00
parent 11fdb8a4c7
commit 8acbf1d307
2 changed files with 62 additions and 4 deletions

33
mount.c
View File

@ -240,6 +240,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
{ {
int status = 0; int status = 0;
#if defined BB_FEATURE_USE_DEVPS_PATCH
if (strcmp(filesystemType, "auto") == 0) { if (strcmp(filesystemType, "auto") == 0) {
static const char *noauto_array[] = { "tmpfs", "shm", "proc", "ramfs", "devpts", "devfs", "usbdevfs", 0 }; static const char *noauto_array[] = { "tmpfs", "shm", "proc", "ramfs", "devpts", "devfs", "usbdevfs", 0 };
const char **noauto_fstype; const char **noauto_fstype;
@ -264,7 +265,35 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
break; 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, status = do_mount(blockDevice, directory, filesystemType,
flags | MS_MGC_VAL, string_flags, useMtab, flags | MS_MGC_VAL, string_flags, useMtab,
fakeIt, mtab_opts, mount_all); fakeIt, mtab_opts, mount_all);
@ -279,7 +308,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
return (TRUE); return (TRUE);
} }
void show_mounts() void show_mounts(void)
{ {
#if defined BB_FEATURE_USE_DEVPS_PATCH #if defined BB_FEATURE_USE_DEVPS_PATCH
int fd, i, numfilesystems; int fd, i, numfilesystems;

View File

@ -240,6 +240,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
{ {
int status = 0; int status = 0;
#if defined BB_FEATURE_USE_DEVPS_PATCH
if (strcmp(filesystemType, "auto") == 0) { if (strcmp(filesystemType, "auto") == 0) {
static const char *noauto_array[] = { "tmpfs", "shm", "proc", "ramfs", "devpts", "devfs", "usbdevfs", 0 }; static const char *noauto_array[] = { "tmpfs", "shm", "proc", "ramfs", "devpts", "devfs", "usbdevfs", 0 };
const char **noauto_fstype; const char **noauto_fstype;
@ -264,7 +265,35 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
break; 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, status = do_mount(blockDevice, directory, filesystemType,
flags | MS_MGC_VAL, string_flags, useMtab, flags | MS_MGC_VAL, string_flags, useMtab,
fakeIt, mtab_opts, mount_all); fakeIt, mtab_opts, mount_all);
@ -279,7 +308,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
return (TRUE); return (TRUE);
} }
void show_mounts() void show_mounts(void)
{ {
#if defined BB_FEATURE_USE_DEVPS_PATCH #if defined BB_FEATURE_USE_DEVPS_PATCH
int fd, i, numfilesystems; int fd, i, numfilesystems;