Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ TryExpandShortFileName()

static string System.IO.PathHelper.TryExpandShortFileName ( ref ValueStringBuilder outputBuilder,
string originalPath )
inlinestaticpackage

Definition at line 64 of file PathHelper.cs.

65 {
66 int rootLength = PathInternal.GetRootLength(outputBuilder.AsSpan());
67 bool flag = PathInternal.IsDevice(outputBuilder.AsSpan());
69 bool flag2 = false;
70 int num = 0;
71 bool flag3 = false;
72 if (flag)
73 {
74 buffer.Append(outputBuilder.AsSpan());
75 if (outputBuilder[2] == '.')
76 {
77 flag3 = true;
78 buffer[2] = '?';
79 }
80 }
81 else
82 {
83 flag2 = !PathInternal.IsDevice(outputBuilder.AsSpan()) && outputBuilder.Length > 1 && outputBuilder[0] == '\\' && outputBuilder[1] == '\\';
84 num = PrependDevicePathChars(ref outputBuilder, flag2, ref buffer);
85 }
86 rootLength += num;
87 int length = buffer.Length;
88 bool flag4 = false;
89 int num2 = buffer.Length - 1;
90 while (!flag4)
91 {
92 uint longPathNameW = Interop.Kernel32.GetLongPathNameW(ref buffer.GetPinnableReference(terminate: true), ref outputBuilder.GetPinnableReference(), (uint)outputBuilder.Capacity);
93 if (buffer[num2] == '\0')
94 {
95 buffer[num2] = '\\';
96 }
97 if (longPathNameW == 0)
98 {
99 int lastWin32Error = Marshal.GetLastWin32Error();
100 if (lastWin32Error != 2 && lastWin32Error != 3)
101 {
102 break;
103 }
104 num2--;
105 while (num2 > rootLength && buffer[num2] != '\\')
106 {
107 num2--;
108 }
109 if (num2 == rootLength)
110 {
111 break;
112 }
113 buffer[num2] = '\0';
114 }
115 else if (longPathNameW > outputBuilder.Capacity)
116 {
117 outputBuilder.EnsureCapacity(checked((int)longPathNameW));
118 }
119 else
120 {
121 flag4 = true;
122 outputBuilder.Length = checked((int)longPathNameW);
123 if (num2 < length - 1)
124 {
125 outputBuilder.Append(buffer.AsSpan(num2, buffer.Length - num2));
126 }
127 }
128 }
129 ref ValueStringBuilder reference = ref flag4 ? ref outputBuilder : ref buffer;
130 if (flag3)
131 {
132 reference[2] = '.';
133 }
134 if (flag2)
135 {
136 reference[6] = '\\';
137 }
138 ReadOnlySpan<char> span = reference.AsSpan(num);
139 string result = ((originalPath != null && MemoryExtensions.Equals(span, originalPath.AsSpan(), StringComparison.Ordinal)) ? originalPath : span.ToString());
140 buffer.Dispose();
141 return result;
142 }
static uint GetLongPathNameW(ref char lpszShortPath, ref char lpszLongPath, uint cchBuffer)
static int PrependDevicePathChars(ref ValueStringBuilder content, bool isDosUnc, ref ValueStringBuilder buffer)
Definition PathHelper.cs:47

References System.Text.ValueStringBuilder.Append(), System.buffer, System.MemoryExtensions.Equals(), System.Runtime.InteropServices.Marshal.GetLastWin32Error(), Interop.Kernel32.GetLongPathNameW(), System.IO.PathInternal.GetRootLength(), System.IO.PathInternal.IsDevice(), System.length, System.IO.PathHelper.PrependDevicePathChars(), and System.ReadOnlySpan< T >.ToString().

Referenced by System.IO.PathHelper.Normalize(), and System.IO.PathHelper.Normalize().