Fossil

Check-in [da8d516fe1]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Bug-fix: didn't compile on win32, and handle extended UNC paths correctly.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | win32-longpath
Files: files | file ages | folders
SHA1: da8d516fe1a4c04a43c6adcdf6af3bab9deedbcb
User & Date: jan.nijtmans 2013-12-12 11:16:27.000
Context
2013-12-12
13:54
Fix fossil_stat() and fossil_chdir() such that they accept paths>MAX_PATH. For file_access(), implement a workaround that the '\\?\' prefix can be handled. check-in: 29f023fe53 user: jan.nijtmans tags: win32-longpath
11:16
Bug-fix: didn't compile on win32, and handle extended UNC paths correctly. check-in: da8d516fe1 user: jan.nijtmans tags: win32-longpath
09:37
Make "win32-longpath" the default VFS on win32, eliminating all path limitations (up to ~32767 chars). TODO: eliminate use of the the function _wstati64(), that appears to be the only Win32 function left which cannot handle such long paths. Everything else needed is done. check-in: 1b9893bdc8 user: jan.nijtmans tags: win32-longpath
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/sqlite3.c.
35142
35143
35144
35145
35146
35147
35148
35149
35150
35151
35152
35153
35154
35155
35156
    }
    zWideFilename = sqlite3MallocZero( (nChar*sizeof(zWideFilename[0]))+12 );
    if( zWideFilename==0 ){
      return 0;
    }
    if( winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) ){
      memcpy(zWideFilename, L"\\\\?\\UNC\\", 16);
      nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename+6,
                                    nChar);
    }else if( winIsDriveLetterAndColon(zFilename) && winIsDirSep(zFilename[2])) {
      memcpy(zWideFilename, L"\\\\?\\", 8);
      nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename+4,
                                    nChar);
      zWideFilename[6] = '\\';
    }else{







|







35142
35143
35144
35145
35146
35147
35148
35149
35150
35151
35152
35153
35154
35155
35156
    }
    zWideFilename = sqlite3MallocZero( (nChar*sizeof(zWideFilename[0]))+12 );
    if( zWideFilename==0 ){
      return 0;
    }
    if( winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) ){
      memcpy(zWideFilename, L"\\\\?\\UNC\\", 16);
      nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename+2, -1, zWideFilename+8,
                                    nChar);
    }else if( winIsDriveLetterAndColon(zFilename) && winIsDirSep(zFilename[2])) {
      memcpy(zWideFilename, L"\\\\?\\", 8);
      nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename+4,
                                    nChar);
      zWideFilename[6] = '\\';
    }else{
36091
36092
36093
36094
36095
36096
36097
36098
36099
36100
36101
36102
36103
36104
36105
    sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s",
                     sqlite3_data_directory, winGetDirSep(), zRelative);
    return SQLITE_OK;
  }
  if( osIsNT() ){
    zConverted = winUtf8ToUnicode(zRelative);
  }else{
    zConverted = sqlite3_win32_utf8_to_mbcs(zFilename);;
  }
  if( zConverted==0 ){
    return SQLITE_IOERR_NOMEM;
  }
  if( osIsNT() ){
    LPWSTR zTemp;
    nByte = osGetFullPathNameW((LPCWSTR)zConverted, 0, 0, 0);







|







36091
36092
36093
36094
36095
36096
36097
36098
36099
36100
36101
36102
36103
36104
36105
    sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s",
                     sqlite3_data_directory, winGetDirSep(), zRelative);
    return SQLITE_OK;
  }
  if( osIsNT() ){
    zConverted = winUtf8ToUnicode(zRelative);
  }else{
    zConverted = sqlite3_win32_utf8_to_mbcs(zRelative);
  }
  if( zConverted==0 ){
    return SQLITE_IOERR_NOMEM;
  }
  if( osIsNT() ){
    LPWSTR zTemp;
    nByte = osGetFullPathNameW((LPCWSTR)zConverted, 0, 0, 0);