899 {
900 if (path == null)
901 {
902 throw new ArgumentNullException("path");
903 }
904 if (basePath == null)
905 {
906 throw new ArgumentNullException("basePath");
907 }
909 {
911 }
912 if (basePath.Contains('\0') || path.Contains('\0'))
913 {
915 }
917 {
919 }
920 if (PathInternal.IsEffectivelyEmpty(path.AsSpan()))
921 {
922 return basePath;
923 }
925 string text = ((
length >= 1 && PathInternal.IsDirectorySeparator(path[0])) ?
Join(
GetPathRoot(basePath.AsSpan()), path.AsSpan(1)) : ((
length < 2 || !PathInternal.IsValidDriveChar(path[0]) || path[1] !=
':') ?
JoinInternal(basePath.AsSpan(), path.AsSpan()) : ((!
GetVolumeName(path.AsSpan()).EqualsOrdinal(
GetVolumeName(basePath.AsSpan()))) ? ((!PathInternal.IsDevice(basePath.AsSpan())) ? path.
Insert(2,
"\\") : ((
length == 2) ?
JoinInternal(basePath.AsSpan(0, 4), path.AsSpan(),
"\\".AsSpan()) :
JoinInternal(basePath.AsSpan(0, 4), path.AsSpan(0, 2),
"\\".AsSpan(), path.AsSpan(2)))) :
Join(basePath.AsSpan(), path.AsSpan(2)))));
926 if (!PathInternal.IsDevice(
text.AsSpan()))
927 {
929 }
930 return PathInternal.RemoveRelativeSegments(
text, PathInternal.GetRootLength(
text.AsSpan()));
931 }
static string Join(ReadOnlySpan< char > path1, ReadOnlySpan< char > path2)
static ? string GetPathRoot(string? path)
static bool IsPathFullyQualified(string path)
static string GetFullPathInternal(string path)
static ReadOnlySpan< char > GetVolumeName(ReadOnlySpan< char > path)
static string JoinInternal(ReadOnlySpan< char > first, ReadOnlySpan< char > second)