tool_doswin: Support for literal path prefix \\?\
For example something like --output \\?\C:\foo
This commit is contained in:
Родитель
6b64d735cd
Коммит
4fc80f3e75
|
@ -150,9 +150,8 @@ SANITIZEcode sanitize_file_name(char **const sanitized, const char *file_name,
|
|||
|
||||
if((flags & SANITIZE_ALLOW_PATH)) {
|
||||
#ifndef MSDOS
|
||||
if((flags & SANITIZE_ALLOW_PATH) &&
|
||||
file_name[0] == '\\' && file_name[1] == '\\')
|
||||
/* UNC prefixed path, eg \\?\C:\foo */
|
||||
if(file_name[0] == '\\' && file_name[1] == '\\')
|
||||
/* UNC prefixed path \\ (eg \\?\C:\foo) */
|
||||
max_sanitized_len = 32767-1;
|
||||
else
|
||||
#endif
|
||||
|
@ -180,8 +179,16 @@ SANITIZEcode sanitize_file_name(char **const sanitized, const char *file_name,
|
|||
strncpy(target, file_name, len);
|
||||
target[len] = '\0';
|
||||
|
||||
#ifndef MSDOS
|
||||
if((flags & SANITIZE_ALLOW_PATH) && !strncmp(target, "\\\\?\\", 4))
|
||||
/* Skip the literal path prefix \\?\ */
|
||||
p = target + 4;
|
||||
else
|
||||
#endif
|
||||
p = target;
|
||||
|
||||
/* replace control characters and other banned characters */
|
||||
for(p = target; *p; ++p) {
|
||||
for(; *p; ++p) {
|
||||
const char *banned;
|
||||
|
||||
if((1 <= *p && *p <= 31) ||
|
||||
|
|
|
@ -110,6 +110,14 @@ UNITTEST_START
|
|||
{ "f:/foo", SANITIZE_ALLOW_PATH,
|
||||
"f:/foo", SANITIZE_ERR_OK
|
||||
},
|
||||
#ifndef MSDOS
|
||||
{ "\\\\?\\C:\\foo", SANITIZE_ALLOW_PATH,
|
||||
"\\\\?\\C:\\foo", SANITIZE_ERR_OK
|
||||
},
|
||||
{ "\\\\?\\C:\\foo", 0,
|
||||
"____C__foo", SANITIZE_ERR_OK
|
||||
},
|
||||
#endif
|
||||
{ "foo:bar", 0,
|
||||
"foo_bar", SANITIZE_ERR_OK
|
||||
},
|
||||
|
@ -164,6 +172,17 @@ UNITTEST_START
|
|||
{ "com1:\\com1", SANITIZE_ALLOW_RESERVED,
|
||||
"com1__com1", SANITIZE_ERR_OK
|
||||
},
|
||||
#ifndef MSDOS
|
||||
{ "\\com1", SANITIZE_ALLOW_PATH,
|
||||
"\\_com1", SANITIZE_ERR_OK
|
||||
},
|
||||
{ "\\\\com1", SANITIZE_ALLOW_PATH,
|
||||
"\\\\com1", SANITIZE_ERR_OK
|
||||
},
|
||||
{ "\\\\?\\C:\\com1", SANITIZE_ALLOW_PATH,
|
||||
"\\\\?\\C:\\com1", SANITIZE_ERR_OK
|
||||
},
|
||||
#endif
|
||||
{ "CoM1", 0,
|
||||
"_CoM1", SANITIZE_ERR_OK
|
||||
},
|
||||
|
|
Загрузка…
Ссылка в новой задаче