Skip to contentSkip to conversation

Fix unrecognized option of fat (3/6)

PATCH New OGAWA Hirofumi 1 participant 1 message Oct 6, 2003 VFAT/FAT/msdos filesystem

lore
Share & tools
lore

OGAWA Hirofumi

author maintainer
#0 lore raw

PATCH 1/1 Fix unrecognized option of fat (3/6)

Hi,

vfat doesn't recognize the msdos option. Also msdos doesn't recognize vfat option.

And this separates fat/vfat/msdos option structures. I think this looks more good as document.

Please apply.

 linux-2.6.0-test6-hirofumi/fs/fat/inode.c |  114 +++++++++++++-----------------
 1 files changed, 52 insertions(+), 62 deletions(-)
fs/fat/inode.c renamed from fs/fat/inode.c~fat_unrecognized +52 -62
diff -puN fs/fat/inode.c~fat_unrecognized fs/fat/inode.c
@@ -267,7 +267,7 @@ enum {
 	Opt_nonumtail_on, Opt_nonumtail_yes, Opt_nonumtail_true, Opt_nonumtail_opt,
 };
 
-static match_table_t FAT_tokens = {
+static match_table_t fat_tokens = {
 	{Opt_check_r, "check=relaxed"},
 	{Opt_check_s, "check=strict"},
 	{Opt_check_n, "check=normal"},
@@ -280,10 +280,6 @@ static match_table_t FAT_tokens = {
 	{Opt_conv_b, "conv=b"},
 	{Opt_conv_t, "conv=t"},
 	{Opt_conv_a, "conv=a"},
-	{Opt_nodots, "nodots"},
-	{Opt_nodots, "dotsOK=no"},
-	{Opt_dots, "dotsOK=yes"},
-	{Opt_dots, "dots"},
 	{Opt_uid, "uid=%d"},
 	{Opt_gid, "gid=%d"},
 	{Opt_umask, "umask=%o"},
@@ -291,11 +287,26 @@ static match_table_t FAT_tokens = {
 	{Opt_fmask, "fmask=%o"},
 	{Opt_fat, "fat=%d"},
 	{Opt_codepage, "codepage=%d"},
-	{Opt_charset, "iocharset=%s"},
 	{Opt_blocksize, "blocksize=%d"},
 	{Opt_nocase, "nocase"},
 	{Opt_cvf_format, "cvf_format=%20s"},
 	{Opt_cvf_options, "cvf_options=%100s"},
+	{Opt_quiet, "quiet"},
+	{Opt_showexec, "showexec"},
+	{Opt_debug, "debug"},
+	{Opt_immutable, "sys_immutable"},
+	{Opt_posix, "posix"},
+	{Opt_err, NULL}
+};
+static match_table_t msdos_tokens = {
+	{Opt_nodots, "nodots"},
+	{Opt_nodots, "dotsOK=no"},
+	{Opt_dots, "dotsOK=yes"},
+	{Opt_dots, "dots"},
+	{Opt_err, NULL}
+};
+static match_table_t vfat_tokens = {
+	{Opt_charset, "iocharset=%s"},
 	{Opt_shortname_lower, "shortname=lower"},
 	{Opt_shortname_win95, "shortname=win95"},
 	{Opt_shortname_winnt, "shortname=winnt"},
@@ -321,11 +332,6 @@ static match_table_t FAT_tokens = {
 	{Opt_nonumtail_yes, "nonumtail=yes"},
 	{Opt_nonumtail_true, "nonumtail=true"},
 	{Opt_nonumtail_opt, "nonumtail"},
-	{Opt_quiet, "quiet"},
-	{Opt_showexec, "showexec"},
-	{Opt_debug, "debug"},
-	{Opt_immutable, "sys_immutable"},
-	{Opt_posix, "posix"},
 	{Opt_err, NULL}
 };
 
@@ -362,7 +368,13 @@ static int parse_options(char *options, 
 		if (!*p)
 			continue;
 
-		token = match_token(p, FAT_tokens, args);
+		token = match_token(p, fat_tokens, args);
+		if (token == Opt_err) {
+			if (is_vfat)
+				token = match_token(p, vfat_tokens, args);
+			else
+				token = match_token(p, msdos_tokens, args);
+		}
 		switch (token) {
 		case Opt_check_s:
 			opts->name_check = 's';
@@ -373,14 +385,6 @@ static int parse_options(char *options, 
 		case Opt_check_n:
  				opts->name_check = 'n';
 			break;
-		case Opt_dots:		/* msdos specific */
-			if (!is_vfat)
-				opts->dotsOK = 1;
-			break;
-		case Opt_nodots:	/* msdos specific */
-			if (!is_vfat)
-				opts->dotsOK = 0;
-			break;
 		case Opt_nocase:
 			if (!is_vfat)
 				opts->nocase = 1;
@@ -435,85 +439,71 @@ static int parse_options(char *options, 
  					opts->codepage);
 			break;
 
+		/* msdos specific */
+		case Opt_dots:
+			opts->dotsOK = 1;
+			break;
+		case Opt_nodots:
+			opts->dotsOK = 0;
+			break;
+
 		/* vfat specific */
 		case Opt_charset:
-			if (is_vfat) {
-				kfree(opts->iocharset);
-				opts->iocharset = match_strdup(&args[0]);
-				if (!opts->iocharset)
-					return 0;
-				printk("MSDOS FS: IO charset %s\n",
-					opts->iocharset);
-			}
+			kfree(opts->iocharset);
+			opts->iocharset = match_strdup(&args[0]);
+			if (!opts->iocharset)
+				return 0;
+			printk("MSDOS FS: IO charset %s\n",
+			       opts->iocharset);
 			break;
 		case Opt_shortname_lower:
-			if (is_vfat) {
-				opts->shortname = VFAT_SFN_DISPLAY_LOWER
-						| VFAT_SFN_CREATE_WIN95;
-			}
+			opts->shortname = VFAT_SFN_DISPLAY_LOWER
+					| VFAT_SFN_CREATE_WIN95;
 			break;
 		case Opt_shortname_win95:
-			if (is_vfat) {
-				opts->shortname = VFAT_SFN_DISPLAY_WIN95
-						| VFAT_SFN_CREATE_WIN95;
-			}
+			opts->shortname = VFAT_SFN_DISPLAY_WIN95
+					| VFAT_SFN_CREATE_WIN95;
 			break;
 		case Opt_shortname_winnt:
-			if (is_vfat) {
-				opts->shortname = VFAT_SFN_DISPLAY_WINNT
-						| VFAT_SFN_CREATE_WINNT;
-			}
+			opts->shortname = VFAT_SFN_DISPLAY_WINNT
+					| VFAT_SFN_CREATE_WINNT;
 			break;
 		case Opt_shortname_mixed:
-			if (is_vfat) {
-				opts->shortname = VFAT_SFN_DISPLAY_WINNT
-						| VFAT_SFN_CREATE_WIN95;
-			}
+			opts->shortname = VFAT_SFN_DISPLAY_WINNT
+					| VFAT_SFN_CREATE_WIN95;
 			break;
 		case Opt_utf8_off:	/* 0 or no or false */
 		case Opt_utf8_no:
 		case Opt_utf8_false:
-			if (is_vfat) {
-				opts->utf8 = 0;
-			}
+			opts->utf8 = 0;
 			break;
 		case Opt_utf8_on:	/* empty or 1 or yes or true */
 		case Opt_utf8_opt:
 		case Opt_utf8_yes:
 		case Opt_utf8_true:
-			if (is_vfat) {
-				opts->utf8 = 1;
-			}
+			opts->utf8 = 1;
 			break;
 		case Opt_uni_xl_off:	/* 0 or no or false */
 		case Opt_uni_xl_no:
 		case Opt_uni_xl_false:
-			if (is_vfat) {
-				opts->unicode_xlate = 0;
-			}
+			opts->unicode_xlate = 0;
 			break;
 		case Opt_uni_xl_on:	/* empty or 1 or yes or true */
 		case Opt_uni_xl_yes:
 		case Opt_uni_xl_true:
 		case Opt_uni_xl_opt:
-			if (is_vfat) {
-				opts->unicode_xlate = 1;
-			}
+			opts->unicode_xlate = 1;
 			break;
 		case Opt_nonumtail_off:		/* 0 or no or false */
 		case Opt_nonumtail_no:
 		case Opt_nonumtail_false:
-			if (is_vfat) {
-					opts->numtail = 1;	/* negated option */
-			}
+			opts->numtail = 1;	/* negated option */
 			break;
 		case Opt_nonumtail_on:		/* empty or 1 or yes or true */
 		case Opt_nonumtail_yes:
 		case Opt_nonumtail_true:
 		case Opt_nonumtail_opt:
-			if (is_vfat) {
-					opts->numtail = 0;	/* negated option */
-			}
+			opts->numtail = 0;	/* negated option */
 			break;
 
 		/* obsolete mount options */

_

Signature · 1 line
OGAWA Hirofumi <[email protected]>