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
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -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) ||
+19 −0
Original line number Diff line number Diff line
@@ -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
    },