Fossil SCM

Eliminate use of "goto". Fix UNC -> Extended UNC translation when path>260 chars.

jan.nijtmans 2013-12-17 14:49 win32-longpath
Commit 83087c8df3a26006b7743b5faada96a391391240
1 file changed +4 -8
+4 -8
--- src/utf8.c
+++ src/utf8.c
@@ -206,37 +206,33 @@
206206
memcpy(zUnicode, L"\\\\?\\", 8);
207207
wUnicode += 4;
208208
MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, wUnicode, nChar);
209209
wUnicode[2] = '\\';
210210
wUnicode += 3;
211
- goto finish;
212211
}else{
213212
zUnicode[0] = zUtf8[0];
214213
memcpy(&zUnicode[1], L":\\", 2 * sizeof(wchar_t));
215214
wUnicode += 3;
216215
MultiByteToWideChar(CP_UTF8, 0, zUtf8+3, -1, wUnicode, nChar-3);
217216
}
218
- goto finish;
219217
}else if( (zUtf8[0]=='\\' || zUtf8[0]=='/') &&
220218
(zUtf8[1]=='\\' || zUtf8[1]=='/') ) {
221
- if (zUtf8[2]=='?' && nChar>5 ){
219
+ if( zUtf8[2]=='?' && nChar>5 ){
222220
/* Don't postprocess [?:] in extended path, but do '/' -> '\' */
223221
memcpy(zUnicode, L"\\\\", 2 * sizeof(wchar_t));
224222
MultiByteToWideChar(CP_UTF8, 0, zUtf8+2, -1, zUnicode+2, nChar-2);
225223
if( zUtf8[3]=='/' ) zUnicode[3]='\\';
226224
wUnicode += 6;
227
- goto finish;
228225
}else if( nChar>MAX_PATH ){
229226
/* Convert to extended UNC path. */
230227
memcpy(zUnicode, L"\\\\?\\UNC\\", 16);
231228
wUnicode += 8;
232
- MultiByteToWideChar(CP_UTF8, 0, zUtf8+2, -1, wUnicode, nChar-8);
233
- goto finish;
229
+ MultiByteToWideChar(CP_UTF8, 0, zUtf8+2, -1, wUnicode, nChar-2);
230
+ }else{
231
+ MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nChar);
234232
}
235233
}
236
- MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nChar);
237
-finish:
238234
while( *wUnicode != '\0' ){
239235
if ( (*wUnicode < ' ') || wcschr(L"\"*:<>?|", *wUnicode) ){
240236
*wUnicode |= 0xF000;
241237
}else if( *wUnicode == '/' ){
242238
*wUnicode = '\\';
243239
--- src/utf8.c
+++ src/utf8.c
@@ -206,37 +206,33 @@
206 memcpy(zUnicode, L"\\\\?\\", 8);
207 wUnicode += 4;
208 MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, wUnicode, nChar);
209 wUnicode[2] = '\\';
210 wUnicode += 3;
211 goto finish;
212 }else{
213 zUnicode[0] = zUtf8[0];
214 memcpy(&zUnicode[1], L":\\", 2 * sizeof(wchar_t));
215 wUnicode += 3;
216 MultiByteToWideChar(CP_UTF8, 0, zUtf8+3, -1, wUnicode, nChar-3);
217 }
218 goto finish;
219 }else if( (zUtf8[0]=='\\' || zUtf8[0]=='/') &&
220 (zUtf8[1]=='\\' || zUtf8[1]=='/') ) {
221 if (zUtf8[2]=='?' && nChar>5 ){
222 /* Don't postprocess [?:] in extended path, but do '/' -> '\' */
223 memcpy(zUnicode, L"\\\\", 2 * sizeof(wchar_t));
224 MultiByteToWideChar(CP_UTF8, 0, zUtf8+2, -1, zUnicode+2, nChar-2);
225 if( zUtf8[3]=='/' ) zUnicode[3]='\\';
226 wUnicode += 6;
227 goto finish;
228 }else if( nChar>MAX_PATH ){
229 /* Convert to extended UNC path. */
230 memcpy(zUnicode, L"\\\\?\\UNC\\", 16);
231 wUnicode += 8;
232 MultiByteToWideChar(CP_UTF8, 0, zUtf8+2, -1, wUnicode, nChar-8);
233 goto finish;
 
234 }
235 }
236 MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nChar);
237 finish:
238 while( *wUnicode != '\0' ){
239 if ( (*wUnicode < ' ') || wcschr(L"\"*:<>?|", *wUnicode) ){
240 *wUnicode |= 0xF000;
241 }else if( *wUnicode == '/' ){
242 *wUnicode = '\\';
243
--- src/utf8.c
+++ src/utf8.c
@@ -206,37 +206,33 @@
206 memcpy(zUnicode, L"\\\\?\\", 8);
207 wUnicode += 4;
208 MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, wUnicode, nChar);
209 wUnicode[2] = '\\';
210 wUnicode += 3;
 
211 }else{
212 zUnicode[0] = zUtf8[0];
213 memcpy(&zUnicode[1], L":\\", 2 * sizeof(wchar_t));
214 wUnicode += 3;
215 MultiByteToWideChar(CP_UTF8, 0, zUtf8+3, -1, wUnicode, nChar-3);
216 }
 
217 }else if( (zUtf8[0]=='\\' || zUtf8[0]=='/') &&
218 (zUtf8[1]=='\\' || zUtf8[1]=='/') ) {
219 if( zUtf8[2]=='?' && nChar>5 ){
220 /* Don't postprocess [?:] in extended path, but do '/' -> '\' */
221 memcpy(zUnicode, L"\\\\", 2 * sizeof(wchar_t));
222 MultiByteToWideChar(CP_UTF8, 0, zUtf8+2, -1, zUnicode+2, nChar-2);
223 if( zUtf8[3]=='/' ) zUnicode[3]='\\';
224 wUnicode += 6;
 
225 }else if( nChar>MAX_PATH ){
226 /* Convert to extended UNC path. */
227 memcpy(zUnicode, L"\\\\?\\UNC\\", 16);
228 wUnicode += 8;
229 MultiByteToWideChar(CP_UTF8, 0, zUtf8+2, -1, wUnicode, nChar-2);
230 }else{
231 MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nChar);
232 }
233 }
 
 
234 while( *wUnicode != '\0' ){
235 if ( (*wUnicode < ' ') || wcschr(L"\"*:<>?|", *wUnicode) ){
236 *wUnicode |= 0xF000;
237 }else if( *wUnicode == '/' ){
238 *wUnicode = '\\';
239

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button