Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch ticket-01a2f3a346 Excluding Merge-Ins
This is equivalent to a diff from ed6adcaf3b to 3e3f34ebcf
2012-08-29
| ||
11:27 | fix for [01a2f3a346] check-in: 0357ed556e user: jan.nijtmans tags: msvc-broken | |
10:44 | Fix a typo on the Ticket Change Details page. check-in: eb82a23827 user: drh tags: trunk | |
08:02 | merge trunk Closed-Leaf check-in: 3e3f34ebcf user: jan.nijtmans tags: ticket-01a2f3a346 | |
2012-08-28
| ||
17:39 | Fixes to hyperlink generation for embedded documentation. check-in: ed6adcaf3b user: drh tags: trunk | |
09:05 | merge trunk into ticket-01a2f3a346 branch check-in: f89bd067c2 user: jan.nijtmans tags: ticket-01a2f3a346 | |
2012-08-27
| ||
22:56 | Make merges a no-op if the pivot is the same as the version being merged. check-in: bf079432fb user: drh tags: trunk | |
Changes to src/file.c.
︙ | ︙ | |||
25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include "config.h" #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <string.h> #include <errno.h> #include "file.h" /* ** On Windows, include the Platform SDK header file. */ #ifdef _WIN32 # include <windows.h> #endif | > > > > | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include "config.h" #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <string.h> #include <errno.h> #include "file.h" #if defined(_WIN32) #include <direct.h> #endif /* ** On Windows, include the Platform SDK header file. */ #ifdef _WIN32 # include <windows.h> #endif |
︙ | ︙ | |||
66 67 68 69 70 71 72 | if( isWd && g.allowSymlinks ){ return lstat(zFilename, buf); }else{ return stat(zFilename, buf); } #else int rc = 0; | | | | 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | if( isWd && g.allowSymlinks ){ return lstat(zFilename, buf); }else{ return stat(zFilename, buf); } #else int rc = 0; wchar_t *zMbcs = fossil_utf8_to_unicode(zFilename); rc = _wstati64(zMbcs, buf); fossil_mbcs_free(zMbcs); return rc; #endif } /* ** Fill in the fileStat variable for the file named zFilename. |
︙ | ︙ | |||
296 297 298 299 300 301 302 | } /* ** Wrapper around the access() system call. */ int file_access(const char *zFilename, int flags){ | > | | > > > | 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 | } /* ** Wrapper around the access() system call. */ int file_access(const char *zFilename, int flags){ #ifdef _WIN32 wchar_t *zMbcs = fossil_utf8_to_unicode(zFilename); int rc = _waccess(zMbcs, flags); fossil_mbcs_free(zMbcs); #else int rc = access(zFilename, flags); #endif return rc; } /* ** Find an unused filename similar to zBase with zSuffix appended. ** ** Make the name relative to the working directory if relFlag is true. |
︙ | ︙ | |||
387 388 389 390 391 392 393 | return rc; } /* ** Delete a file. */ void file_delete(const char *zFilename){ | > | | > > > | | | 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 | return rc; } /* ** Delete a file. */ void file_delete(const char *zFilename){ #ifdef _WIN32 wchar_t *z = fossil_utf8_to_unicode(zFilename); _wunlink(z); fossil_mbcs_free(z); #else unlink(zFilename); #endif } /* ** Create the directory named in the argument, if it does not already ** exist. If forceFlag is 1, delete any prior non-directory object ** with the same name. ** ** Return the number of errors. */ int file_mkdir(const char *zName, int forceFlag){ int rc = file_wd_isdir(zName); if( rc==2 ){ if( !forceFlag ) return 1; file_delete(zName); } if( rc!=1 ){ #if defined(_WIN32) int rc; wchar_t *zMbcs = fossil_utf8_to_unicode(zName); rc = _wmkdir(zMbcs); fossil_mbcs_free(zMbcs); return rc; #else return mkdir(zName, 0755); #endif } return 0; |
︙ | ︙ | |||
559 560 561 562 563 564 565 | fossil_free(z); } } /* ** Get the current working directory. ** | | | | | | 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 | fossil_free(z); } } /* ** Get the current working directory. ** ** On windows, the name is converted from unicode to UTF8 and all '\\' ** characters are converted to '/'. No conversions are needed on ** unix. */ void file_getcwd(char *zBuf, int nBuf){ #ifdef _WIN32 char *zPwdUtf8; int nPwd; int i; wchar_t zPwd[2000]; if( _wgetcwd(zPwd, sizeof(zPwd)-1)==0 ){ fossil_fatal("cannot find the current working directory."); } zPwdUtf8 = fossil_unicode_to_utf8(zPwd); nPwd = strlen(zPwdUtf8); if( nPwd > nBuf-1 ){ fossil_fatal("pwd too big: max %d\n", nBuf-1); } for(i=0; zPwdUtf8[i]; i++) if( zPwdUtf8[i]=='\\' ) zPwdUtf8[i] = '/'; memcpy(zBuf, zPwdUtf8, nPwd+1); fossil_mbcs_free(zPwdUtf8); |
︙ | ︙ | |||
926 927 928 929 930 931 932 | "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; unsigned int i, j; const char *zDir = "."; int cnt = 0; #if defined(_WIN32) | | | | | 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 | "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; unsigned int i, j; const char *zDir = "."; int cnt = 0; #if defined(_WIN32) wchar_t zTmpPath[MAX_PATH]; if( GetTempPathW(MAX_PATH, zTmpPath) ){ azDirs[0] = fossil_unicode_to_utf8(zTmpPath); } azDirs[1] = fossil_getenv("TEMP"); azDirs[2] = fossil_getenv("TMP"); #endif |
︙ | ︙ | |||
1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 | #ifdef _WIN32 extern char *sqlite3_win32_mbcs_to_utf8(const char*); return sqlite3_win32_mbcs_to_utf8(zMbcs); #else return (char*)zMbcs; /* No-op on unix */ #endif } /* ** Translate UTF8 to MBCS for use in system calls. Return a pointer to the ** translated text.. Call fossil_mbcs_free() to deallocate any memory ** used to store the returned pointer when done. */ char *fossil_utf8_to_mbcs(const char *zUtf8){ #ifdef _WIN32 extern char *sqlite3_win32_utf8_to_mbcs(const char*); return sqlite3_win32_utf8_to_mbcs(zUtf8); #else return (char*)zUtf8; /* No-op on unix */ #endif } /* ** Return the value of an environment variable as UTF8. */ char *fossil_getenv(const char *zName){ | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > | > > | 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 | #ifdef _WIN32 extern char *sqlite3_win32_mbcs_to_utf8(const char*); return sqlite3_win32_mbcs_to_utf8(zMbcs); #else return (char*)zMbcs; /* No-op on unix */ #endif } /* ** Translate Unicode to UTF8. Return a pointer to the translated text. ** Call fossil_mbcs_free() to deallocate any memory used to store the ** returned pointer when done. */ char *fossil_unicode_to_utf8(const void *zUnicode){ #ifdef _WIN32 int nByte = WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, 0, 0, 0, 0); char *zUtf = sqlite3_malloc( nByte ); if( zUtf==0 ){ return 0; } WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, zUtf, nByte, 0, 0); return zUtf; #else return (char *)zUnicode; /* No-op on unix */ #endif } /* ** Translate UTF8 to MBCS for use in system calls. Return a pointer to the ** translated text.. Call fossil_mbcs_free() to deallocate any memory ** used to store the returned pointer when done. */ char *fossil_utf8_to_mbcs(const char *zUtf8){ #ifdef _WIN32 extern char *sqlite3_win32_utf8_to_mbcs(const char*); return sqlite3_win32_utf8_to_mbcs(zUtf8); #else return (char*)zUtf8; /* No-op on unix */ #endif } /* ** Translate UTF8 to unicode for use in system calls. Return a pointer to the ** translated text.. Call fossil_mbcs_free() to deallocate any memory ** used to store the returned pointer when done. */ void *fossil_utf8_to_unicode(const char *zUtf8){ #ifdef _WIN32 int nByte = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0); wchar_t *zUnicode = sqlite3_malloc( nByte * 2 ); if( zUnicode==0 ){ return 0; } MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nByte); return zUnicode; #else return (void *)zUtf8; /* No-op on unix */ #endif } /* ** Return the value of an environment variable as UTF8. */ char *fossil_getenv(const char *zName){ #ifdef _WIN32 wchar_t *uName = fossil_utf8_to_unicode(zName); void *zValue = _wgetenv(uName); fossil_mbcs_free(uName); if( zValue ) zValue = fossil_unicode_to_utf8(zValue); #else char *zValue = getenv(zName); #endif return zValue; } /* ** Translate UTF8 to MBCS for display on the console. Return a pointer to the ** translated text.. Call fossil_mbcs_free() to deallocate any memory |
︙ | ︙ | |||
1083 1084 1085 1086 1087 1088 1089 | #endif } /* ** Translate MBCS to UTF8. Return a pointer. Call fossil_mbcs_free() ** to deallocate any memory used to store the returned pointer when done. */ | | > | > | | > > > > | 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 | #endif } /* ** Translate MBCS to UTF8. Return a pointer. Call fossil_mbcs_free() ** to deallocate any memory used to store the returned pointer when done. */ void fossil_mbcs_free(void *zOld){ #ifdef _WIN32 extern void sqlite3_free(void*); sqlite3_free(zOld); #else /* No-op on unix */ #endif } /* ** Like fopen() but always takes a UTF8 argument. */ FILE *fossil_fopen(const char *zName, const char *zMode){ #ifdef _WIN32 wchar_t *uMode = fossil_utf8_to_unicode(zMode); wchar_t *uName = fossil_utf8_to_unicode(zName); FILE *f = _wfopen(uName, uMode); fossil_mbcs_free(uName); fossil_mbcs_free(uMode); #else FILE *f = fopen(zName, zMode); #endif return f; } |
Changes to src/rebuild.c.
︙ | ︙ | |||
19 20 21 22 23 24 25 26 27 28 29 30 31 32 | */ #include "config.h" #include "rebuild.h" #include <assert.h> #include <dirent.h> #include <errno.h> /* ** Make changes to the stable part of the schema (the part that is not ** simply deleted and reconstructed on a rebuild) to bring the schema ** up to the latest. */ static const char zSchemaUpdates1[] = @ -- Index on the delta table | > > > > > > > > > | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | */ #include "config.h" #include "rebuild.h" #include <assert.h> #include <dirent.h> #include <errno.h> #ifndef _WIN32 #define _WDIR DIR #define _wdirent dirent #define _wopendir opendir #define _wreaddir readdir #define _wclosedir closedir #define wchar_t char #endif /* ** Make changes to the stable part of the schema (the part that is not ** simply deleted and reconstructed on a rebuild) to bring the schema ** up to the latest. */ static const char zSchemaUpdates1[] = @ -- Index on the delta table |
︙ | ︙ | |||
816 817 818 819 820 821 822 | } /* ** Recursively read all files from the directory zPath and install ** every file read as a new artifact in the repository. */ void recon_read_dir(char *zPath){ | | | | | | | | | | 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 | } /* ** Recursively read all files from the directory zPath and install ** every file read as a new artifact in the repository. */ void recon_read_dir(char *zPath){ _WDIR *d; struct _wdirent *pEntry; Blob aContent; /* content of the just read artifact */ static int nFileRead = 0; wchar_t *zMbcsPath; char *zUtf8Name; zMbcsPath = fossil_utf8_to_unicode(zPath); d = _wopendir(zMbcsPath); if( d ){ while( (pEntry=_wreaddir(d))!=0 ){ Blob path; char *zSubpath; if( pEntry->d_name[0]=='.' ){ continue; } zUtf8Name = fossil_unicode_to_utf8(pEntry->d_name); zSubpath = mprintf("%s/%s", zPath, zUtf8Name); fossil_mbcs_free(zUtf8Name); if( file_isdir(zSubpath)==1 ){ recon_read_dir(zSubpath); } blob_init(&path, 0, 0); blob_appendf(&path, "%s", zSubpath); if( blob_read_from_file(&aContent, blob_str(&path))==-1 ){ fossil_panic("some unknown error occurred while reading \"%s\"", blob_str(&path)); } content_put(&aContent); blob_reset(&path); blob_reset(&aContent); free(zSubpath); fossil_print("\r%d", ++nFileRead); fflush(stdout); } _wclosedir(d); }else { fossil_panic("encountered error %d while trying to open \"%s\".", errno, g.argv[3]); } fossil_mbcs_free(zMbcsPath); } |
︙ | ︙ |
Changes to src/vfile.c.
︙ | ︙ | |||
23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <sys/types.h> #if defined(__DMC__) #include "dirent.h" #else #include <dirent.h> #endif /* ** The input is guaranteed to be a 40-character well-formed UUID. ** Find its rid. */ int fast_uuid_to_rid(const char *zUuid){ static Stmt q; int rid; | > > > > > > > > > | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <sys/types.h> #if defined(__DMC__) #include "dirent.h" #else #include <dirent.h> #endif #ifndef _WIN32 #define _WDIR DIR #define _wdirent dirent #define _wopendir opendir #define _wreaddir readdir #define _wclosedir closedir #define wchar_t char #endif /* ** The input is guaranteed to be a 40-character well-formed UUID. ** Find its rid. */ int fast_uuid_to_rid(const char *zUuid){ static Stmt q; int rid; |
︙ | ︙ | |||
379 380 381 382 383 384 385 | ** Files whose names begin with "." are omitted unless allFlag is true. ** ** Any files or directories that match the glob pattern pIgnore are ** excluded from the scan. Name matching occurs after the first ** nPrefix characters are elided from the filename. */ void vfile_scan(Blob *pPath, int nPrefix, int allFlag, Glob *pIgnore){ | | | | | | | | | | 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 | ** Files whose names begin with "." are omitted unless allFlag is true. ** ** Any files or directories that match the glob pattern pIgnore are ** excluded from the scan. Name matching occurs after the first ** nPrefix characters are elided from the filename. */ void vfile_scan(Blob *pPath, int nPrefix, int allFlag, Glob *pIgnore){ _WDIR *d; int origSize; const char *zDir; struct _wdirent *pEntry; int skipAll = 0; static Stmt ins; static int depth = 0; wchar_t *zMbcs; origSize = blob_size(pPath); if( pIgnore ){ blob_appendf(pPath, "/"); if( glob_match(pIgnore, &blob_str(pPath)[nPrefix+1]) ) skipAll = 1; blob_resize(pPath, origSize); } if( skipAll ) return; if( depth==0 ){ db_prepare(&ins, "INSERT OR IGNORE INTO sfile(x) SELECT :file" " WHERE NOT EXISTS(SELECT 1 FROM vfile WHERE pathname=:file)" ); } depth++; zDir = blob_str(pPath); zMbcs = fossil_utf8_to_unicode(zDir); d = _wopendir(zMbcs); if( d ){ while( (pEntry=_wreaddir(d))!=0 ){ char *zPath; char *zUtf8; if( pEntry->d_name[0]=='.' ){ if( !allFlag ) continue; if( pEntry->d_name[1]==0 ) continue; if( pEntry->d_name[1]=='.' && pEntry->d_name[2]==0 ) continue; } zUtf8 = fossil_unicode_to_utf8(pEntry->d_name); blob_appendf(pPath, "/%s", zUtf8); fossil_mbcs_free(zUtf8); zPath = blob_str(pPath); if( glob_match(pIgnore, &zPath[nPrefix+1]) ){ /* do nothing */ }else if( file_wd_isdir(zPath)==1 ){ if( !vfile_top_of_checkout(zPath) ){ vfile_scan(pPath, nPrefix, allFlag, pIgnore); } }else if( file_wd_isfile_or_link(zPath) ){ db_bind_text(&ins, ":file", &zPath[nPrefix+1]); db_step(&ins); db_reset(&ins); } blob_resize(pPath, origSize); } _wclosedir(d); } fossil_mbcs_free(zMbcs); depth--; if( depth==0 ){ db_finalize(&ins); } |
︙ | ︙ |