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!

jan.nijtmans 2013-12-12 15:01 win32-longpath
Commit c952c773ac6b0192dae76ff091c7a424e98b1d45
1 file changed +10 -8
+10 -8
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -35142,22 +35142,24 @@
3514235142
}
3514335143
zWideFilename = sqlite3MallocZero( (nChar*sizeof(zWideFilename[0]))+12 );
3514435144
if( zWideFilename==0 ){
3514535145
return 0;
3514635146
}
35147
- if( winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) ){
35147
+ if( winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1])
35148
+ && zFilename[2]!='?' ){
3514835149
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]) ){
3515235154
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);
3515535157
zWideFilename[6] = '\\';
3515635158
}else{
35157
- nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename,
35158
- nChar);
35159
+ nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1,
35160
+ zWideFilename, nChar);
3515935161
}
3516035162
if( nChar==0 ){
3516135163
sqlite3_free(zWideFilename);
3516235164
zWideFilename = 0;
3516335165
}
3516435166
--- 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

Keyboard Shortcuts

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