linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / msdos / namei.c
index 5b76ccd..626a367 100644 (file)
 #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[] = "+=,; ";
@@ -32,6 +40,7 @@ static int msdos_format_name(const unsigned char *name, int len,
         */
 {
        unsigned char *walk;
+       const unsigned char **reserved;
        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++ = ' ';
-
+       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;
 }