git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
fs
/
msdos
/
namei.c
diff --git
a/fs/msdos/namei.c
b/fs/msdos/namei.c
index
5b76ccd
..
626a367
100644
(file)
--- a/
fs/msdos/namei.c
+++ b/
fs/msdos/namei.c
@@
-12,6
+12,14
@@
#include <linux/msdos_fs.h>
#include <linux/smp_lock.h>
#include <linux/msdos_fs.h>
#include <linux/smp_lock.h>
+/* MS-DOS "device special files" */
+static const unsigned char *reserved_names[] = {
+ "CON ", "PRN ", "NUL ", "AUX ",
+ "LPT1 ", "LPT2 ", "LPT3 ", "LPT4 ",
+ "COM1 ", "COM2 ", "COM3 ", "COM4 ",
+ NULL
+};
+
/* Characters that are undesirable in an MS-DOS file name */
static unsigned char bad_chars[] = "*?<>|\"";
static unsigned char bad_if_strict_pc[] = "+=,; ";
/* Characters that are undesirable in an MS-DOS file name */
static unsigned char bad_chars[] = "*?<>|\"";
static unsigned char bad_if_strict_pc[] = "+=,; ";
@@
-32,6
+40,7
@@
static int msdos_format_name(const unsigned char *name, int len,
*/
{
unsigned char *walk;
*/
{
unsigned char *walk;
+ const unsigned char **reserved;
unsigned char c;
int space;
unsigned char c;
int space;
@@
-118,7
+127,11
@@
static int msdos_format_name(const unsigned char *name, int len,
}
while (walk - res < MSDOS_NAME)
*walk++ = ' ';
}
while (walk - res < MSDOS_NAME)
*walk++ = ' ';
-
+ if (!opts->atari)
+ /* GEMDOS is less stupid and has no reserved names */
+ for (reserved = reserved_names; *reserved; reserved++)
+ if (!strncmp(res, *reserved, 8))
+ return -EINVAL;
return 0;
}
return 0;
}