Exemple #1
0
        private unsafe static uint GetRootLength(char *path, ulong pathLength)
        {
            uint num   = 0U;
            uint num2  = 2U;
            uint num3  = 2U;
            bool flag  = PathInternal.StartsWithOrdinal(path, pathLength, "\\\\?\\");
            bool flag2 = PathInternal.StartsWithOrdinal(path, pathLength, "\\\\?\\UNC\\");

            if (flag)
            {
                if (flag2)
                {
                    num3 = (uint)"\\\\?\\UNC\\".Length;
                }
                else
                {
                    num2 += (uint)"\\\\?\\".Length;
                }
            }
            if ((!flag || flag2) && pathLength > 0UL && PathInternal.IsDirectorySeparator(*path))
            {
                num = 1U;
                if (flag2 || (pathLength > 1UL && PathInternal.IsDirectorySeparator(path[1])))
                {
                    num = num3;
                    int num4 = 2;
                    while ((ulong)num < pathLength)
                    {
                        if (PathInternal.IsDirectorySeparator(path[(ulong)num * 2UL / 2UL]) && --num4 <= 0)
                        {
                            break;
                        }
                        num += 1U;
                    }
                }
            }
            else if (pathLength >= (ulong)num2 && path[(ulong)(num2 - 1U) * 2UL / 2UL] == Path.VolumeSeparatorChar)
            {
                num = num2;
                if (pathLength >= (ulong)(num2 + 1U) && PathInternal.IsDirectorySeparator(path[(ulong)num2 * 2UL / 2UL]))
                {
                    num += 1U;
                }
            }
            return(num);
        }