|
@@ -56,13 +56,23 @@ var windowsDisallowedCharacters = string([]rune{
|
|
})
|
|
})
|
|
|
|
|
|
func WindowsInvalidFilename(name string) bool {
|
|
func WindowsInvalidFilename(name string) bool {
|
|
- // None of the path components should end in space
|
|
|
|
|
|
+ // None of the path components should end in space or period, or be a
|
|
|
|
+ // reserved name.
|
|
|
|
+ // (https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file)
|
|
for _, part := range strings.Split(name, `\`) {
|
|
for _, part := range strings.Split(name, `\`) {
|
|
if len(part) == 0 {
|
|
if len(part) == 0 {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
- if part[len(part)-1] == ' ' {
|
|
|
|
- // Names ending in space are not valid.
|
|
|
|
|
|
+ switch part[len(part)-1] {
|
|
|
|
+ case ' ', '.':
|
|
|
|
+ // Names ending in space or period are not valid.
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+ switch part {
|
|
|
|
+ case "CON", "PRN", "AUX", "NUL",
|
|
|
|
+ "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
|
|
|
|
+ "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9":
|
|
|
|
+ // These reserved names are not valid.
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|