Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (fullCheck)
- {
- path = path.TrimEnd(Path.TrimEndChars);
- Path.CheckInvalidPathChars(path);
- }
- int i = 0;
- PathHelper pathHelper = null;
- if (path.Length <= Path.MaxPath)
- {
- char* charArrayPtr = stackalloc char[(UIntPtr)Path.MaxPath];
- pathHelper = new PathHelper(charArrayPtr, Path.MaxPath);
- }
- else
- {
- pathHelper = new PathHelper(path.Length + Path.MaxPath, maxPathLength);
- }
- uint num = 0u;
- uint num2 = 0u;
- bool flag = false;
- uint num3 = 0u;
- int num4 = -1;
- bool flag2 = false;
- bool flag3 = true;
- bool flag4 = false;
- int num5 = 0;
- if (path.Length > 0 && (path[0] == Path.DirectorySeparatorChar || path[0] == Path.AltDirectorySeparatorChar))
- {
- pathHelper.Append('\\');
- i++;
- num4 = 0;
- }
- while (i < path.Length)
- {
- char c = path[i];
- if (c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar)
- {
- if (num3 == 0u)
- {
- if (num2 > 0u)
- {
- int num6 = num4 + 1;
- if (path[num6] != '.')
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- if (num2 >= 2u)
- {
- if (flag2 && num2 > 2u)
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- if (path[num6 + 1] == '.')
- {
- int num7 = num6 + 2;
- while ((long)num7 < (long)num6 + (long)((ulong)num2))
- {
- if (path[num7] != '.')
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- num7++;
- }
- num2 = 2u;
- }
- else
- {
- if (num2 > 1u)
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- num2 = 1u;
- }
- }
- if (num2 == 2u)
- {
- pathHelper.Append('.');
- }
- pathHelper.Append('.');
- flag = false;
- }
- if (num > 0u && flag3 && i + 1 < path.Length && (path[i + 1] == Path.DirectorySeparatorChar || path[i + 1] == Path.AltDirectorySeparatorChar))
- {
- pathHelper.Append(Path.DirectorySeparatorChar);
- }
- }
- num2 = 0u;
- num = 0u;
- if (!flag)
- {
- flag = true;
- pathHelper.Append(Path.DirectorySeparatorChar);
- }
- num3 = 0u;
- num4 = i;
- flag2 = false;
- flag3 = false;
- if (flag4)
- {
- pathHelper.TryExpandShortFileName();
- flag4 = false;
- }
- int num8 = pathHelper.Length - 1;
- if (num8 - num5 > Path.MaxDirectoryLength)
- {
- throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
- }
- num5 = num8;
- }
- else
- {
- if (c == '.')
- {
- num2 += 1u;
- }
- else
- {
- if (c == ' ')
- {
- num += 1u;
- }
- else
- {
- if (c == '~')
- {
- flag4 = true;
- }
- flag = false;
- if (flag3 && c == Path.VolumeSeparatorChar)
- {
- char c2 = (i > 0) ? path[i - 1] : ' ';
- if (num2 != 0u || num3 < 1u || c2 == ' ')
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- flag2 = true;
- if (num3 > 1u)
- {
- int num9 = 0;
- while (num9 < pathHelper.Length && pathHelper[num9] == ' ')
- {
- num9++;
- }
- if ((ulong)num3 - (ulong)((long)num9) == 1uL)
- {
- pathHelper.Length = 0;
- pathHelper.Append(c2);
- }
- }
- num3 = 0u;
- }
- else
- {
- num3 += 1u + num2 + num;
- }
- if (num2 > 0u || num > 0u)
- {
- int num10 = (num4 >= 0) ? (i - num4 - 1) : i;
- if (num10 > 0)
- {
- for (int j = 0; j < num10; j++)
- {
- pathHelper.Append(path[num4 + 1 + j]);
- }
- }
- num2 = 0u;
- num = 0u;
- }
- pathHelper.Append(c);
- num4 = i;
- }
- }
- }
- i++;
- }
- if (pathHelper.Length - 1 - num5 > Path.MaxDirectoryLength)
- {
- throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
- }
- if (num3 == 0u && num2 > 0u)
- {
- int num11 = num4 + 1;
- if (path[num11] != '.')
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- if (num2 >= 2u)
- {
- if (flag2 && num2 > 2u)
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- if (path[num11 + 1] == '.')
- {
- int num12 = num11 + 2;
- while ((long)num12 < (long)num11 + (long)((ulong)num2))
- {
- if (path[num12] != '.')
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- num12++;
- }
- num2 = 2u;
- }
- else
- {
- if (num2 > 1u)
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- num2 = 1u;
- }
- }
- if (num2 == 2u)
- {
- pathHelper.Append('.');
- }
- pathHelper.Append('.');
- }
- if (pathHelper.Length == 0)
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
- }
- if (fullCheck && (pathHelper.OrdinalStartsWith("http:", false) || pathHelper.OrdinalStartsWith("file:", false)))
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_PathUriFormatNotSupported"));
- }
- if (flag4)
- {
- pathHelper.TryExpandShortFileName();
- }
- int num13 = 1;
- if (fullCheck)
- {
- num13 = pathHelper.GetFullPathName();
- flag4 = false;
- int num14 = 0;
- while (num14 < pathHelper.Length && !flag4)
- {
- if (pathHelper[num14] == '~')
- {
- flag4 = true;
- }
- num14++;
- }
- if (flag4 && !pathHelper.TryExpandShortFileName())
- {
- int num15 = -1;
- for (int k = pathHelper.Length - 1; k >= 0; k--)
- {
- if (pathHelper[k] == Path.DirectorySeparatorChar)
- {
- num15 = k;
- break;
- }
- }
- if (num15 >= 0)
- {
- if (pathHelper.Length >= maxPathLength)
- {
- throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
- }
- int lenSavedName = pathHelper.Length - num15 - 1;
- pathHelper.Fixup(lenSavedName, num15);
- }
- }
- }
- if (num13 != 0 && pathHelper.Length > 1 && pathHelper[0] == '\\' && pathHelper[1] == '\\')
- {
- int l;
- for (l = 2; l < num13; l++)
- {
- if (pathHelper[l] == '\\')
- {
- l++;
- break;
- }
- }
- if (l == num13)
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegalUNC"));
- }
- if (pathHelper.OrdinalStartsWith("\\\\?\\globalroot", true))
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_PathGlobalRoot"));
- }
- }
- if (pathHelper.Length >= maxPathLength)
- {
- throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
- }
- if (num13 == 0)
- {
- int num16 = Marshal.GetLastWin32Error();
- if (num16 == 0)
- {
- num16 = 161;
- }
- __Error.WinIOError(num16, path);
- return null;
- }
- string text = pathHelper.ToString();
- if (string.Equals(text, path, StringComparison.Ordinal))
- {
- text = path;
- }
- return text;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement