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); }