Fossil SCM
Final bug-fix: Before prefixing a path with "\\?\", check if it is prefixed already. If so, don't do it again. Everything seems to work fine now!
Commit
c952c773ac6b0192dae76ff091c7a424e98b1d45
Parent
ba4b3ac1d29720a…
1 file changed
+10
-8
+10
-8
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -35142,22 +35142,24 @@ | ||
| 35142 | 35142 | } |
| 35143 | 35143 | zWideFilename = sqlite3MallocZero( (nChar*sizeof(zWideFilename[0]))+12 ); |
| 35144 | 35144 | if( zWideFilename==0 ){ |
| 35145 | 35145 | return 0; |
| 35146 | 35146 | } |
| 35147 | - if( winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) ){ | |
| 35147 | + if( winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) | |
| 35148 | + && zFilename[2]!='?' ){ | |
| 35148 | 35149 | memcpy(zWideFilename, L"\\\\?\\UNC\\", 16); |
| 35149 | - nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename+2, -1, zWideFilename+8, | |
| 35150 | - nChar); | |
| 35151 | - }else if( winIsDriveLetterAndColon(zFilename) && winIsDirSep(zFilename[2])) { | |
| 35150 | + nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename+2, -1, | |
| 35151 | + zWideFilename+8, nChar); | |
| 35152 | + }else if( winIsDriveLetterAndColon(zFilename) | |
| 35153 | + && winIsDirSep(zFilename[2]) ){ | |
| 35152 | 35154 | memcpy(zWideFilename, L"\\\\?\\", 8); |
| 35153 | - nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename+4, | |
| 35154 | - nChar); | |
| 35155 | + nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, | |
| 35156 | + zWideFilename+4, nChar); | |
| 35155 | 35157 | zWideFilename[6] = '\\'; |
| 35156 | 35158 | }else{ |
| 35157 | - nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename, | |
| 35158 | - nChar); | |
| 35159 | + nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, | |
| 35160 | + zWideFilename, nChar); | |
| 35159 | 35161 | } |
| 35160 | 35162 | if( nChar==0 ){ |
| 35161 | 35163 | sqlite3_free(zWideFilename); |
| 35162 | 35164 | zWideFilename = 0; |
| 35163 | 35165 | } |
| 35164 | 35166 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -35142,22 +35142,24 @@ | |
| 35142 | } |
| 35143 | zWideFilename = sqlite3MallocZero( (nChar*sizeof(zWideFilename[0]))+12 ); |
| 35144 | if( zWideFilename==0 ){ |
| 35145 | return 0; |
| 35146 | } |
| 35147 | if( winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) ){ |
| 35148 | memcpy(zWideFilename, L"\\\\?\\UNC\\", 16); |
| 35149 | nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename+2, -1, zWideFilename+8, |
| 35150 | nChar); |
| 35151 | }else if( winIsDriveLetterAndColon(zFilename) && winIsDirSep(zFilename[2])) { |
| 35152 | memcpy(zWideFilename, L"\\\\?\\", 8); |
| 35153 | nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename+4, |
| 35154 | nChar); |
| 35155 | zWideFilename[6] = '\\'; |
| 35156 | }else{ |
| 35157 | nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename, |
| 35158 | nChar); |
| 35159 | } |
| 35160 | if( nChar==0 ){ |
| 35161 | sqlite3_free(zWideFilename); |
| 35162 | zWideFilename = 0; |
| 35163 | } |
| 35164 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -35142,22 +35142,24 @@ | |
| 35142 | } |
| 35143 | zWideFilename = sqlite3MallocZero( (nChar*sizeof(zWideFilename[0]))+12 ); |
| 35144 | if( zWideFilename==0 ){ |
| 35145 | return 0; |
| 35146 | } |
| 35147 | if( winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) |
| 35148 | && zFilename[2]!='?' ){ |
| 35149 | memcpy(zWideFilename, L"\\\\?\\UNC\\", 16); |
| 35150 | nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename+2, -1, |
| 35151 | zWideFilename+8, nChar); |
| 35152 | }else if( winIsDriveLetterAndColon(zFilename) |
| 35153 | && winIsDirSep(zFilename[2]) ){ |
| 35154 | memcpy(zWideFilename, L"\\\\?\\", 8); |
| 35155 | nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, |
| 35156 | zWideFilename+4, nChar); |
| 35157 | zWideFilename[6] = '\\'; |
| 35158 | }else{ |
| 35159 | nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, |
| 35160 | zWideFilename, nChar); |
| 35161 | } |
| 35162 | if( nChar==0 ){ |
| 35163 | sqlite3_free(zWideFilename); |
| 35164 | zWideFilename = 0; |
| 35165 | } |
| 35166 |