Skip to content
Snippets Groups Projects
Commit 4fc80f3e authored by Jay Satiro's avatar Jay Satiro
Browse files

tool_doswin: Support for literal path prefix \\?\

For example something like --output \\?\C:\foo
parent 6b64d735
No related branches found
No related tags found
No related merge requests found
......@@ -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
},
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment