diff options
Diffstat (limited to 'fs/msdos')
-rw-r--r-- | fs/msdos/namei.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/fs/msdos/namei.c b/fs/msdos/namei.c index 1f7f2956412a..e4ad6c6b753e 100644 --- a/fs/msdos/namei.c +++ b/fs/msdos/namei.c | |||
@@ -14,12 +14,7 @@ | |||
14 | 14 | ||
15 | /* Characters that are undesirable in an MS-DOS file name */ | 15 | /* Characters that are undesirable in an MS-DOS file name */ |
16 | static unsigned char bad_chars[] = "*?<>|\""; | 16 | static unsigned char bad_chars[] = "*?<>|\""; |
17 | static unsigned char bad_if_strict_pc[] = "+=,; "; | 17 | static unsigned char bad_if_strict[] = "+=,; "; |
18 | /* GEMDOS is less restrictive */ | ||
19 | static unsigned char bad_if_strict_atari[] = " "; | ||
20 | |||
21 | #define bad_if_strict(opts) \ | ||
22 | ((opts)->atari ? bad_if_strict_atari : bad_if_strict_pc) | ||
23 | 18 | ||
24 | /***** Formats an MS-DOS file name. Rejects invalid names. */ | 19 | /***** Formats an MS-DOS file name. Rejects invalid names. */ |
25 | static int msdos_format_name(const unsigned char *name, int len, | 20 | static int msdos_format_name(const unsigned char *name, int len, |
@@ -40,21 +35,20 @@ static int msdos_format_name(const unsigned char *name, int len, | |||
40 | /* Get rid of dot - test for it elsewhere */ | 35 | /* Get rid of dot - test for it elsewhere */ |
41 | name++; | 36 | name++; |
42 | len--; | 37 | len--; |
43 | } else if (!opts->atari) | 38 | } else |
44 | return -EINVAL; | 39 | return -EINVAL; |
45 | } | 40 | } |
46 | /* | 41 | /* |
47 | * disallow names that _really_ start with a dot for MS-DOS, | 42 | * disallow names that _really_ start with a dot |
48 | * GEMDOS does not care | ||
49 | */ | 43 | */ |
50 | space = !opts->atari; | 44 | space = 1; |
51 | c = 0; | 45 | c = 0; |
52 | for (walk = res; len && walk - res < 8; walk++) { | 46 | for (walk = res; len && walk - res < 8; walk++) { |
53 | c = *name++; | 47 | c = *name++; |
54 | len--; | 48 | len--; |
55 | if (opts->name_check != 'r' && strchr(bad_chars, c)) | 49 | if (opts->name_check != 'r' && strchr(bad_chars, c)) |
56 | return -EINVAL; | 50 | return -EINVAL; |
57 | if (opts->name_check == 's' && strchr(bad_if_strict(opts), c)) | 51 | if (opts->name_check == 's' && strchr(bad_if_strict, c)) |
58 | return -EINVAL; | 52 | return -EINVAL; |
59 | if (c >= 'A' && c <= 'Z' && opts->name_check == 's') | 53 | if (c >= 'A' && c <= 'Z' && opts->name_check == 's') |
60 | return -EINVAL; | 54 | return -EINVAL; |
@@ -94,7 +88,7 @@ static int msdos_format_name(const unsigned char *name, int len, | |||
94 | if (opts->name_check != 'r' && strchr(bad_chars, c)) | 88 | if (opts->name_check != 'r' && strchr(bad_chars, c)) |
95 | return -EINVAL; | 89 | return -EINVAL; |
96 | if (opts->name_check == 's' && | 90 | if (opts->name_check == 's' && |
97 | strchr(bad_if_strict(opts), c)) | 91 | strchr(bad_if_strict, c)) |
98 | return -EINVAL; | 92 | return -EINVAL; |
99 | if (c < ' ' || c == ':' || c == '\\') | 93 | if (c < ' ' || c == ':' || c == '\\') |
100 | return -EINVAL; | 94 | return -EINVAL; |