Fossil SCM
Eliminate use of "goto". Fix UNC -> Extended UNC translation when path>260 chars.
Commit
83087c8df3a26006b7743b5faada96a391391240
Parent
c6f255607bf96c6…
1 file changed
+4
-8
+4
-8
| --- src/utf8.c | ||
| +++ src/utf8.c | ||
| @@ -206,37 +206,33 @@ | ||
| 206 | 206 | memcpy(zUnicode, L"\\\\?\\", 8); |
| 207 | 207 | wUnicode += 4; |
| 208 | 208 | MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, wUnicode, nChar); |
| 209 | 209 | wUnicode[2] = '\\'; |
| 210 | 210 | wUnicode += 3; |
| 211 | - goto finish; | |
| 212 | 211 | }else{ |
| 213 | 212 | zUnicode[0] = zUtf8[0]; |
| 214 | 213 | memcpy(&zUnicode[1], L":\\", 2 * sizeof(wchar_t)); |
| 215 | 214 | wUnicode += 3; |
| 216 | 215 | MultiByteToWideChar(CP_UTF8, 0, zUtf8+3, -1, wUnicode, nChar-3); |
| 217 | 216 | } |
| 218 | - goto finish; | |
| 219 | 217 | }else if( (zUtf8[0]=='\\' || zUtf8[0]=='/') && |
| 220 | 218 | (zUtf8[1]=='\\' || zUtf8[1]=='/') ) { |
| 221 | - if (zUtf8[2]=='?' && nChar>5 ){ | |
| 219 | + if( zUtf8[2]=='?' && nChar>5 ){ | |
| 222 | 220 | /* Don't postprocess [?:] in extended path, but do '/' -> '\' */ |
| 223 | 221 | memcpy(zUnicode, L"\\\\", 2 * sizeof(wchar_t)); |
| 224 | 222 | MultiByteToWideChar(CP_UTF8, 0, zUtf8+2, -1, zUnicode+2, nChar-2); |
| 225 | 223 | if( zUtf8[3]=='/' ) zUnicode[3]='\\'; |
| 226 | 224 | wUnicode += 6; |
| 227 | - goto finish; | |
| 228 | 225 | }else if( nChar>MAX_PATH ){ |
| 229 | 226 | /* Convert to extended UNC path. */ |
| 230 | 227 | memcpy(zUnicode, L"\\\\?\\UNC\\", 16); |
| 231 | 228 | 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); | |
| 234 | 232 | } |
| 235 | 233 | } |
| 236 | - MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nChar); | |
| 237 | -finish: | |
| 238 | 234 | while( *wUnicode != '\0' ){ |
| 239 | 235 | if ( (*wUnicode < ' ') || wcschr(L"\"*:<>?|", *wUnicode) ){ |
| 240 | 236 | *wUnicode |= 0xF000; |
| 241 | 237 | }else if( *wUnicode == '/' ){ |
| 242 | 238 | *wUnicode = '\\'; |
| 243 | 239 |
| --- 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 |