- int status = 0;
-
- char buf[255];
-
-#if defined BB_FEATURE_USE_PROCFS
- if (strcmp(filesystemType, "auto") == 0) {
- FILE *f = fopen ("/proc/filesystems", "r");
-
- if (f == NULL)
- return( FALSE);
-
- 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);
- if (status == TRUE)
- break;
- }
+ int status = 0;
+
+#if defined CONFIG_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;
+ const int num_of_filesystems = sysfs(3, 0, 0);
+ char buf[255];
+ int i=0;
+
+ filesystemType=buf;
+
+ while(i < num_of_filesystems) {
+ sysfs(2, i++, filesystemType);
+ for (noauto_fstype = noauto_array; *noauto_fstype; noauto_fstype++) {
+ if (!strcmp(filesystemType, *noauto_fstype)) {
+ break;
+ }
+ }
+ if (!*noauto_fstype) {
+ status = do_mount(blockDevice, directory, filesystemType,
+ flags | MS_MGC_VAL, string_flags,
+ useMtab, fakeIt, mtab_opts, mount_all);
+ if (status)
+ break;
+ }
+ }
+ }
+#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)
+ break;
+ }
+ }
+ fclose(f);