From: Robert Griebl <griebl@gmx.de>
Date: Wed, 24 Jul 2002 01:41:30 +0000 (-0000)
Subject: Add support for /etc/filesystem when searching for an "auto" filesystem
X-Git-Tag: 0_60_4~109
X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=2a4a8d8ffb67407d4701e3501ec680e9a26f99f6;p=oweals%2Fbusybox.git

Add support for /etc/filesystem when searching for an "auto" filesystem
This is bug #1246
---

diff --git a/util-linux/mount.c b/util-linux/mount.c
index 3d1f7ebbf..f6c647259 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -272,25 +272,61 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
 #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
+		FILE *f;
+		int read_proc = 0;
+		
+		f = fopen ( "/etc/filesystems", "r" );
+		
+		if ( f ) {
+			while ( fgets ( buf, sizeof( buf ), f )) {
+				if ( *buf == '*' )
+					read_proc = 1;
+				else if ( *buf == '#' )
+					continue;
+				else {
+					filesystemType = buf;
+				
+					// Add NULL termination to each line
+					while (*filesystemType && !isspace ( *filesystemType ))
+						filesystemType++;
+					*filesystemType = '\0';
+
+					filesystemType = buf;
+					
+					if ( xstrlen ( filesystemType )) {
+						status = do_mount(blockDevice, directory, filesystemType,
+										  flags | MS_MGC_VAL, string_flags,
+										  useMtab, fakeIt, mtab_opts, mount_all);
+						if (status)
+							break;
+					}
+					
+				}
+			}		
+			fclose ( f );
+		}
 
-				// Add NULL termination to each line
-				while (*filesystemType && *filesystemType != '\n')
-					filesystemType++;
-				*filesystemType = '\0';
+		if (( !f || read_proc ) && !status ) {
+			f = xfopen("/proc/filesystems", "r");
 
+			while (fgets(buf, sizeof(buf), f) != NULL) {
 				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;
+				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);