Advertisement
Guest User

Untitled

a guest
Nov 14th, 2013
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.86 KB | None | 0 0
  1.     if (fullCheck)
  2.     {
  3.         path = path.TrimEnd(Path.TrimEndChars);
  4.         Path.CheckInvalidPathChars(path);
  5.     }
  6.     int i = 0;
  7.     PathHelper pathHelper = null;
  8.     if (path.Length <= Path.MaxPath)
  9.     {
  10.         char* charArrayPtr = stackalloc char[(UIntPtr)Path.MaxPath];
  11.         pathHelper = new PathHelper(charArrayPtr, Path.MaxPath);
  12.     }
  13.     else
  14.     {
  15.         pathHelper = new PathHelper(path.Length + Path.MaxPath, maxPathLength);
  16.     }
  17.     uint num = 0u;
  18.     uint num2 = 0u;
  19.     bool flag = false;
  20.     uint num3 = 0u;
  21.     int num4 = -1;
  22.     bool flag2 = false;
  23.     bool flag3 = true;
  24.     bool flag4 = false;
  25.     int num5 = 0;
  26.     if (path.Length > 0 && (path[0] == Path.DirectorySeparatorChar || path[0] == Path.AltDirectorySeparatorChar))
  27.     {
  28.         pathHelper.Append('\\');
  29.         i++;
  30.         num4 = 0;
  31.     }
  32.     while (i < path.Length)
  33.     {
  34.         char c = path[i];
  35.         if (c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar)
  36.         {
  37.             if (num3 == 0u)
  38.             {
  39.                 if (num2 > 0u)
  40.                 {
  41.                     int num6 = num4 + 1;
  42.                     if (path[num6] != '.')
  43.                     {
  44.                         throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  45.                     }
  46.                     if (num2 >= 2u)
  47.                     {
  48.                         if (flag2 && num2 > 2u)
  49.                         {
  50.                             throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  51.                         }
  52.                         if (path[num6 + 1] == '.')
  53.                         {
  54.                             int num7 = num6 + 2;
  55.                             while ((long)num7 < (long)num6 + (long)((ulong)num2))
  56.                             {
  57.                                 if (path[num7] != '.')
  58.                                 {
  59.                                     throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  60.                                 }
  61.                                 num7++;
  62.                             }
  63.                             num2 = 2u;
  64.                         }
  65.                         else
  66.                         {
  67.                             if (num2 > 1u)
  68.                             {
  69.                                 throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  70.                             }
  71.                             num2 = 1u;
  72.                         }
  73.                     }
  74.                     if (num2 == 2u)
  75.                     {
  76.                         pathHelper.Append('.');
  77.                     }
  78.                     pathHelper.Append('.');
  79.                     flag = false;
  80.                 }
  81.                 if (num > 0u && flag3 && i + 1 < path.Length && (path[i + 1] == Path.DirectorySeparatorChar || path[i + 1] == Path.AltDirectorySeparatorChar))
  82.                 {
  83.                     pathHelper.Append(Path.DirectorySeparatorChar);
  84.                 }
  85.             }
  86.             num2 = 0u;
  87.             num = 0u;
  88.             if (!flag)
  89.             {
  90.                 flag = true;
  91.                 pathHelper.Append(Path.DirectorySeparatorChar);
  92.             }
  93.             num3 = 0u;
  94.             num4 = i;
  95.             flag2 = false;
  96.             flag3 = false;
  97.             if (flag4)
  98.             {
  99.                 pathHelper.TryExpandShortFileName();
  100.                 flag4 = false;
  101.             }
  102.             int num8 = pathHelper.Length - 1;
  103.             if (num8 - num5 > Path.MaxDirectoryLength)
  104.             {
  105.                 throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
  106.             }
  107.             num5 = num8;
  108.         }
  109.         else
  110.         {
  111.             if (c == '.')
  112.             {
  113.                 num2 += 1u;
  114.             }
  115.             else
  116.             {
  117.                 if (c == ' ')
  118.                 {
  119.                     num += 1u;
  120.                 }
  121.                 else
  122.                 {
  123.                     if (c == '~')
  124.                     {
  125.                         flag4 = true;
  126.                     }
  127.                     flag = false;
  128.                     if (flag3 && c == Path.VolumeSeparatorChar)
  129.                     {
  130.                         char c2 = (i > 0) ? path[i - 1] : ' ';
  131.                         if (num2 != 0u || num3 < 1u || c2 == ' ')
  132.                         {
  133.                             throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  134.                         }
  135.                         flag2 = true;
  136.                         if (num3 > 1u)
  137.                         {
  138.                             int num9 = 0;
  139.                             while (num9 < pathHelper.Length && pathHelper[num9] == ' ')
  140.                             {
  141.                                 num9++;
  142.                             }
  143.                             if ((ulong)num3 - (ulong)((long)num9) == 1uL)
  144.                             {
  145.                                 pathHelper.Length = 0;
  146.                                 pathHelper.Append(c2);
  147.                             }
  148.                         }
  149.                         num3 = 0u;
  150.                     }
  151.                     else
  152.                     {
  153.                         num3 += 1u + num2 + num;
  154.                     }
  155.                     if (num2 > 0u || num > 0u)
  156.                     {
  157.                         int num10 = (num4 >= 0) ? (i - num4 - 1) : i;
  158.                         if (num10 > 0)
  159.                         {
  160.                             for (int j = 0; j < num10; j++)
  161.                             {
  162.                                 pathHelper.Append(path[num4 + 1 + j]);
  163.                             }
  164.                         }
  165.                         num2 = 0u;
  166.                         num = 0u;
  167.                     }
  168.                     pathHelper.Append(c);
  169.                     num4 = i;
  170.                 }
  171.             }
  172.         }
  173.         i++;
  174.     }
  175.     if (pathHelper.Length - 1 - num5 > Path.MaxDirectoryLength)
  176.     {
  177.         throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
  178.     }
  179.     if (num3 == 0u && num2 > 0u)
  180.     {
  181.         int num11 = num4 + 1;
  182.         if (path[num11] != '.')
  183.         {
  184.             throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  185.         }
  186.         if (num2 >= 2u)
  187.         {
  188.             if (flag2 && num2 > 2u)
  189.             {
  190.                 throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  191.             }
  192.             if (path[num11 + 1] == '.')
  193.             {
  194.                 int num12 = num11 + 2;
  195.                 while ((long)num12 < (long)num11 + (long)((ulong)num2))
  196.                 {
  197.                     if (path[num12] != '.')
  198.                     {
  199.                         throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  200.                     }
  201.                     num12++;
  202.                 }
  203.                 num2 = 2u;
  204.             }
  205.             else
  206.             {
  207.                 if (num2 > 1u)
  208.                 {
  209.                     throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  210.                 }
  211.                 num2 = 1u;
  212.             }
  213.         }
  214.         if (num2 == 2u)
  215.         {
  216.             pathHelper.Append('.');
  217.         }
  218.         pathHelper.Append('.');
  219.     }
  220.     if (pathHelper.Length == 0)
  221.     {
  222.         throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegal"));
  223.     }
  224.     if (fullCheck && (pathHelper.OrdinalStartsWith("http:", false) || pathHelper.OrdinalStartsWith("file:", false)))
  225.     {
  226.         throw new ArgumentException(Environment.GetResourceString("Argument_PathUriFormatNotSupported"));
  227.     }
  228.     if (flag4)
  229.     {
  230.         pathHelper.TryExpandShortFileName();
  231.     }
  232.     int num13 = 1;
  233.     if (fullCheck)
  234.     {
  235.         num13 = pathHelper.GetFullPathName();
  236.         flag4 = false;
  237.         int num14 = 0;
  238.         while (num14 < pathHelper.Length && !flag4)
  239.         {
  240.             if (pathHelper[num14] == '~')
  241.             {
  242.                 flag4 = true;
  243.             }
  244.             num14++;
  245.         }
  246.         if (flag4 && !pathHelper.TryExpandShortFileName())
  247.         {
  248.             int num15 = -1;
  249.             for (int k = pathHelper.Length - 1; k >= 0; k--)
  250.             {
  251.                 if (pathHelper[k] == Path.DirectorySeparatorChar)
  252.                 {
  253.                     num15 = k;
  254.                     break;
  255.                 }
  256.             }
  257.             if (num15 >= 0)
  258.             {
  259.                 if (pathHelper.Length >= maxPathLength)
  260.                 {
  261.                     throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
  262.                 }
  263.                 int lenSavedName = pathHelper.Length - num15 - 1;
  264.                 pathHelper.Fixup(lenSavedName, num15);
  265.             }
  266.         }
  267.     }
  268.     if (num13 != 0 && pathHelper.Length > 1 && pathHelper[0] == '\\' && pathHelper[1] == '\\')
  269.     {
  270.         int l;
  271.         for (l = 2; l < num13; l++)
  272.         {
  273.             if (pathHelper[l] == '\\')
  274.             {
  275.                 l++;
  276.                 break;
  277.             }
  278.         }
  279.         if (l == num13)
  280.         {
  281.             throw new ArgumentException(Environment.GetResourceString("Arg_PathIllegalUNC"));
  282.         }
  283.         if (pathHelper.OrdinalStartsWith("\\\\?\\globalroot", true))
  284.         {
  285.             throw new ArgumentException(Environment.GetResourceString("Arg_PathGlobalRoot"));
  286.         }
  287.     }
  288.     if (pathHelper.Length >= maxPathLength)
  289.     {
  290.         throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
  291.     }
  292.     if (num13 == 0)
  293.     {
  294.         int num16 = Marshal.GetLastWin32Error();
  295.         if (num16 == 0)
  296.         {
  297.             num16 = 161;
  298.         }
  299.         __Error.WinIOError(num16, path);
  300.         return null;
  301.     }
  302.     string text = pathHelper.ToString();
  303.     if (string.Equals(text, path, StringComparison.Ordinal))
  304.     {
  305.         text = path;
  306.     }
  307.     return text;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement