Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch ticket-e399bc Excluding Merge-Ins
This is equivalent to a diff from 22b570f4f3 to 1002e7238c
2012-11-29
| ||
13:15 | Translate decomposed-UTF8 filenames on MacOS into precomposed-UTF8. Fix for ticket [e399bc1edfe45b] check-in: ca728447a6 user: drh tags: trunk | |
13:12 | Translate decomposed-UTF8 filenames on MacOS into precomposed-UTF8. Fix for ticket [e399bc1edfe45b] Closed-Leaf check-in: 1002e7238c user: drh tags: ticket-e399bc | |
09:59 | One more thing I spotted (but cannot test!): UTF8-mac encoded values could enter fossil through environment variables as well... check-in: 42951c59ae user: jan.nijtmans tags: ticket-e399bc | |
07:56 | Fix a couple line length issues and modify an error message. check-in: 3527aa4474 user: mistachkin tags: trunk | |
03:14 | Untested changes designed to fix broken filename encodings on MacOS. Move all character-set converting routines into a new file called utf8.c. Add the fossil_filename_to_utf8() routine, which converts Unicode to utf8 on windows and decomposed utf8 into precomposed utf8 on Mac. Ticket [e399bc1edfe45b] check-in: c24e568fb0 user: drh tags: ticket-e399bc | |
01:45 | Give the user the option to convert file into UTF8 if they are in some other encoding when committed. The commit aborts regardless, to give the operator an opportunity to retest the changes before committing again. check-in: 22b570f4f3 user: drh tags: trunk | |
2012-11-28
| ||
23:05 | Serious bug fix: Avoid deleting the respository if the repository is in the checkout and you do a "fossil close". check-in: fcdeaa2909 user: drh tags: trunk | |
08:44 | merge trunk Closed-Leaf check-in: 9d67e2e2d3 user: jan.nijtmans tags: convert_before_commit_v2 | |
Changes to auto.def.
77 77 } 78 78 79 79 if {[opt-bool static]} { 80 80 # XXX: This will not work on all systems. 81 81 define-append EXTRA_LDFLAGS -static 82 82 } 83 83 84 - 85 84 # Check for zlib, using the given location if specified 86 85 set zlibpath [opt-val with-zlib] 87 86 if {$zlibpath ne ""} { 88 87 cc-with [list -cflags "-I$zlibpath -L$zlibpath"] 89 88 define-append EXTRA_CFLAGS -I$zlibpath 90 89 define-append EXTRA_LDFLAGS -L$zlibpath 91 90 } ................................................................................ 219 218 cc-check-function-in-lib gethostbyname nsl 220 219 if {![cc-check-function-in-lib socket {socket network}]} { 221 220 # Last resort, may be Windows 222 221 if {[string match *mingw* [get-define host]]} { 223 222 define-append LIBS -lwsock32 224 223 } 225 224 } 225 +cc-check-function-in-lib iconv iconv 226 226 227 227 # Check for getpassphrase() for Solaris 10 where getpass() truncates to 10 chars 228 228 if {![cc-check-functions getpassphrase]} { 229 229 # Haiku needs this 230 230 cc-check-function-in-lib getpass bsd 231 231 } 232 232 233 233 make-template Makefile.in 234 234 make-config-header autoconfig.h -auto {USE_* FOSSIL_*}
Changes to src/blob.c.
1109 1109 }else if( starts_with_utf16le_bom(pBlob, &bomSize) ){ 1110 1110 /* Make sure the blob contains two terminating 0-bytes */ 1111 1111 blob_append(pBlob, "", 1); 1112 1112 zUtf8 = blob_str(pBlob) + bomSize; 1113 1113 zUtf8 = fossil_unicode_to_utf8(zUtf8); 1114 1114 blob_zero(pBlob); 1115 1115 blob_append(pBlob, zUtf8, -1); 1116 - fossil_mbcs_free(zUtf8); 1116 + fossil_unicode_free(zUtf8); 1117 1117 }else if( starts_with_utf16be_bom(pBlob, &bomSize) ){ 1118 1118 unsigned int i = blob_size(pBlob); 1119 1119 zUtf8 = blob_buffer(pBlob); 1120 1120 while( i > 0 ){ 1121 1121 /* swap bytes of unicode representation */ 1122 1122 char zTemp = zUtf8[--i]; 1123 1123 zUtf8[i] = zUtf8[i-1]; ................................................................................ 1125 1125 } 1126 1126 /* Make sure the blob contains two terminating 0-bytes */ 1127 1127 blob_append(pBlob, "", 1); 1128 1128 zUtf8 = blob_str(pBlob) + bomSize; 1129 1129 zUtf8 = fossil_unicode_to_utf8(zUtf8); 1130 1130 blob_zero(pBlob); 1131 1131 blob_append(pBlob, zUtf8, -1); 1132 - fossil_mbcs_free(zUtf8); 1132 + fossil_unicode_free(zUtf8); 1133 1133 }else if( useMbcs ){ 1134 1134 zUtf8 = fossil_mbcs_to_utf8(blob_str(pBlob)); 1135 1135 blob_reset(pBlob); 1136 1136 blob_append(pBlob, zUtf8, -1); 1137 1137 fossil_mbcs_free(zUtf8); 1138 1138 #endif /* _WIN32 */ 1139 1139 } 1140 1140 }
Changes to src/file.c.
73 73 }else{ 74 74 return stat(zFilename, buf); 75 75 } 76 76 #else 77 77 int rc = 0; 78 78 wchar_t *zMbcs = fossil_utf8_to_unicode(zFilename); 79 79 rc = _wstati64(zMbcs, buf); 80 - fossil_mbcs_free(zMbcs); 80 + fossil_unicode_free(zMbcs); 81 81 return rc; 82 82 #endif 83 83 } 84 84 85 85 /* 86 86 ** Fill in the fileStat variable for the file named zFilename. 87 87 ** If zFilename==0, then use the previous value of fileStat if ................................................................................ 304 304 /* 305 305 ** Wrapper around the access() system call. 306 306 */ 307 307 int file_access(const char *zFilename, int flags){ 308 308 #ifdef _WIN32 309 309 wchar_t *zMbcs = fossil_utf8_to_unicode(zFilename); 310 310 int rc = _waccess(zMbcs, flags); 311 - fossil_mbcs_free(zMbcs); 311 + fossil_unicode_free(zMbcs); 312 312 #else 313 313 int rc = access(zFilename, flags); 314 314 #endif 315 315 return rc; 316 316 } 317 317 318 318 /* ................................................................................ 408 408 utimes(zFilename, tv); 409 409 #else 410 410 struct _utimbuf tb; 411 411 wchar_t *zMbcs = fossil_utf8_to_unicode(zFilename); 412 412 tb.actime = newMTime; 413 413 tb.modtime = newMTime; 414 414 _wutime(zMbcs, &tb); 415 - fossil_mbcs_free(zMbcs); 415 + fossil_unicode_free(zMbcs); 416 416 #endif 417 417 } 418 418 419 419 /* 420 420 ** COMMAND: test-set-mtime 421 421 ** 422 422 ** Usage: %fossil test-set-mtime FILENAME DATE/TIME ................................................................................ 442 442 /* 443 443 ** Delete a file. 444 444 */ 445 445 void file_delete(const char *zFilename){ 446 446 #ifdef _WIN32 447 447 wchar_t *z = fossil_utf8_to_unicode(zFilename); 448 448 _wunlink(z); 449 - fossil_mbcs_free(z); 449 + fossil_unicode_free(z); 450 450 #else 451 451 unlink(zFilename); 452 452 #endif 453 453 } 454 454 455 455 /* 456 456 ** Create the directory named in the argument, if it does not already ................................................................................ 466 466 file_delete(zName); 467 467 } 468 468 if( rc!=1 ){ 469 469 #if defined(_WIN32) 470 470 int rc; 471 471 wchar_t *zMbcs = fossil_utf8_to_unicode(zName); 472 472 rc = _wmkdir(zMbcs); 473 - fossil_mbcs_free(zMbcs); 473 + fossil_unicode_free(zMbcs); 474 474 return rc; 475 475 #else 476 476 return mkdir(zName, 0755); 477 477 #endif 478 478 } 479 479 return 0; 480 480 } ................................................................................ 653 653 char *zPwdUtf8; 654 654 int nPwd; 655 655 int i; 656 656 wchar_t zPwd[2000]; 657 657 if( _wgetcwd(zPwd, sizeof(zPwd)/sizeof(zPwd[0])-1)==0 ){ 658 658 fossil_fatal("cannot find the current working directory."); 659 659 } 660 - zPwdUtf8 = fossil_unicode_to_utf8(zPwd); 660 + zPwdUtf8 = fossil_filename_to_utf8(zPwd); 661 661 nPwd = strlen(zPwdUtf8); 662 662 if( nPwd > nBuf-1 ){ 663 663 fossil_fatal("pwd too big: max %d\n", nBuf-1); 664 664 } 665 665 for(i=0; zPwdUtf8[i]; i++) if( zPwdUtf8[i]=='\\' ) zPwdUtf8[i] = '/'; 666 666 memcpy(zBuf, zPwdUtf8, nPwd+1); 667 - fossil_mbcs_free(zPwdUtf8); 667 + fossil_filename_free(zPwdUtf8); 668 668 #else 669 669 if( getcwd(zBuf, nBuf-1)==0 ){ 670 670 if( errno==ERANGE ){ 671 671 fossil_fatal("pwd too big: max %d\n", nBuf-1); 672 672 }else{ 673 673 fossil_fatal("cannot find current working directory; %s", 674 674 strerror(errno)); ................................................................................ 1010 1010 const char *zDir = "."; 1011 1011 int cnt = 0; 1012 1012 1013 1013 #if defined(_WIN32) 1014 1014 wchar_t zTmpPath[MAX_PATH]; 1015 1015 1016 1016 if( GetTempPathW(MAX_PATH, zTmpPath) ){ 1017 - azDirs[0] = fossil_unicode_to_utf8(zTmpPath); 1017 + azDirs[0] = fossil_filename_to_utf8(zTmpPath); 1018 1018 } 1019 1019 1020 1020 azDirs[1] = fossil_getenv("TEMP"); 1021 1021 azDirs[2] = fossil_getenv("TMP"); 1022 1022 #endif 1023 1023 1024 1024 ................................................................................ 1044 1044 for(i=0; i<15; i++, j++){ 1045 1045 zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; 1046 1046 } 1047 1047 zBuf[j] = 0; 1048 1048 }while( file_size(zBuf)>=0 ); 1049 1049 1050 1050 #if defined(_WIN32) 1051 - fossil_mbcs_free((char *)azDirs[1]); 1052 - fossil_mbcs_free((char *)azDirs[2]); 1051 + fossil_unicode_free((char *)azDirs[1]); 1052 + fossil_unicode_free((char *)azDirs[2]); 1053 1053 #endif 1054 1054 } 1055 1055 1056 1056 1057 1057 /* 1058 1058 ** Return true if a file named zName exists and has identical content 1059 1059 ** to the blob pContent. If zName does not exist or if the content is ................................................................................ 1089 1089 # define opendir _wopendir 1090 1090 # define readdir _wreaddir 1091 1091 # define closedir _wclosedir 1092 1092 #endif /* _WIN32 */ 1093 1093 1094 1094 #endif /* INTERFACE */ 1095 1095 1096 - 1097 - 1098 -/************************************************************************** 1099 -** The following routines translate between MBCS and UTF8 on windows. 1100 -** Since everything is always UTF8 on unix, these routines are no-ops 1101 -** there. 1102 -*/ 1103 - 1104 -/* 1105 -** Translate MBCS to UTF8. Return a pointer to the translated text. 1106 -** Call fossil_mbcs_free() to deallocate any memory used to store the 1107 -** returned pointer when done. 1108 -*/ 1109 -char *fossil_mbcs_to_utf8(const char *zMbcs){ 1110 -#ifdef _WIN32 1111 - extern char *sqlite3_win32_mbcs_to_utf8(const char*); 1112 - return sqlite3_win32_mbcs_to_utf8(zMbcs); 1113 -#else 1114 - return (char*)zMbcs; /* No-op on unix */ 1115 -#endif 1116 -} 1117 - 1118 -/* 1119 -** Translate Unicode to UTF8. Return a pointer to the translated text. 1120 -** Call fossil_mbcs_free() to deallocate any memory used to store the 1121 -** returned pointer when done. 1122 -*/ 1123 -char *fossil_unicode_to_utf8(const void *zUnicode){ 1124 -#ifdef _WIN32 1125 - int nByte = WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, 0, 0, 0, 0); 1126 - char *zUtf = sqlite3_malloc( nByte ); 1127 - if( zUtf==0 ){ 1128 - return 0; 1129 - } 1130 - WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, zUtf, nByte, 0, 0); 1131 - return zUtf; 1132 -#else 1133 - return (char *)zUnicode; /* No-op on unix */ 1134 -#endif 1135 -} 1136 - 1137 -/* 1138 -** Translate UTF8 to MBCS for use in system calls. Return a pointer to the 1139 -** translated text.. Call fossil_mbcs_free() to deallocate any memory 1140 -** used to store the returned pointer when done. 1141 -*/ 1142 -char *fossil_utf8_to_mbcs(const char *zUtf8){ 1143 -#ifdef _WIN32 1144 - extern char *sqlite3_win32_utf8_to_mbcs(const char*); 1145 - return sqlite3_win32_utf8_to_mbcs(zUtf8); 1146 -#else 1147 - return (char*)zUtf8; /* No-op on unix */ 1148 -#endif 1149 -} 1150 - 1151 -/* 1152 -** Translate UTF8 to unicode for use in system calls. Return a pointer to the 1153 -** translated text.. Call fossil_mbcs_free() to deallocate any memory 1154 -** used to store the returned pointer when done. 1155 -*/ 1156 -void *fossil_utf8_to_unicode(const char *zUtf8){ 1157 -#ifdef _WIN32 1158 - int nByte = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0); 1159 - wchar_t *zUnicode = sqlite3_malloc( nByte * 2 ); 1160 - if( zUnicode==0 ){ 1161 - return 0; 1162 - } 1163 - MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nByte); 1164 - return zUnicode; 1165 -#else 1166 - return (void *)zUtf8; /* No-op on unix */ 1167 -#endif 1168 -} 1169 - 1170 1096 /* 1171 1097 ** Return the value of an environment variable as UTF8. 1098 +** Use fossil_filename_free() to release resources. 1172 1099 */ 1173 1100 char *fossil_getenv(const char *zName){ 1174 1101 #ifdef _WIN32 1175 1102 wchar_t *uName = fossil_utf8_to_unicode(zName); 1176 1103 void *zValue = _wgetenv(uName); 1177 - fossil_mbcs_free(uName); 1178 - if( zValue ) zValue = fossil_unicode_to_utf8(zValue); 1104 + fossil_unicode_free(uName); 1179 1105 #else 1180 1106 char *zValue = getenv(zName); 1181 1107 #endif 1108 + if( zValue ) zValue = fossil_filename_to_utf8(zValue); 1182 1109 return zValue; 1183 1110 } 1184 1111 1185 -/* 1186 -** Display UTF8 on the console. Return the number of 1187 -** Characters written. If stdout or stderr is redirected 1188 -** to a file, -1 is returned and nothing is written 1189 -** to the console. 1190 -*/ 1191 -int fossil_utf8_to_console(const char *zUtf8, int nByte, int toStdErr){ 1192 -#ifdef _WIN32 1193 - int nChar; 1194 - wchar_t *zUnicode; /* Unicode version of zUtf8 */ 1195 - DWORD dummy; 1196 - 1197 - static int istty[2] = { -1, -1 }; 1198 - if( istty[toStdErr] == -1 ){ 1199 - istty[toStdErr] = _isatty(toStdErr + 1) != 0; 1200 - } 1201 - if( !istty[toStdErr] ){ 1202 - /* stdout/stderr is not a console. */ 1203 - return -1; 1204 - } 1205 - 1206 - nChar = MultiByteToWideChar(CP_UTF8, 0, zUtf8, nByte, NULL, 0); 1207 - zUnicode = malloc( (nChar + 1) *sizeof(zUnicode[0]) ); 1208 - if( zUnicode==0 ){ 1209 - return 0; 1210 - } 1211 - nChar = MultiByteToWideChar(CP_UTF8, 0, zUtf8, nByte, zUnicode, nChar); 1212 - if( nChar==0 ){ 1213 - free(zUnicode); 1214 - return 0; 1215 - } 1216 - zUnicode[nChar] = '\0'; 1217 - WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE - toStdErr), zUnicode, nChar, &dummy, 0); 1218 - return nChar; 1219 -#else 1220 - return -1; /* No-op on unix */ 1221 -#endif 1222 -} 1223 - 1224 -/* 1225 -** Translate MBCS to UTF8. Return a pointer. Call fossil_mbcs_free() 1226 -** to deallocate any memory used to store the returned pointer when done. 1227 -*/ 1228 -void fossil_mbcs_free(void *zOld){ 1229 -#ifdef _WIN32 1230 - extern void sqlite3_free(void*); 1231 - sqlite3_free(zOld); 1232 -#else 1233 - /* No-op on unix */ 1234 -#endif 1235 -} 1236 - 1237 1112 /* 1238 1113 ** Like fopen() but always takes a UTF8 argument. 1239 1114 */ 1240 1115 FILE *fossil_fopen(const char *zName, const char *zMode){ 1241 1116 #ifdef _WIN32 1242 1117 wchar_t *uMode = fossil_utf8_to_unicode(zMode); 1243 1118 wchar_t *uName = fossil_utf8_to_unicode(zName); 1244 1119 FILE *f = _wfopen(uName, uMode); 1245 - fossil_mbcs_free(uName); 1246 - fossil_mbcs_free(uMode); 1120 + fossil_unicode_free(uName); 1121 + fossil_unicode_free(uMode); 1247 1122 #else 1248 1123 FILE *f = fopen(zName, zMode); 1249 1124 #endif 1250 1125 return f; 1251 1126 }
Changes to src/main.c.
489 489 #endif 490 490 491 491 g.argc = argc; 492 492 g.argv = argv; 493 493 #if defined(_WIN32) && !defined(__MINGW32__) 494 494 parse_windows_command_line(&g.argc, &g.argv); 495 495 GetModuleFileNameW(NULL, buf, MAX_PATH); 496 - g.nameOfExe = fossil_unicode_to_utf8(buf); 497 - for(i=0; i<g.argc; i++) g.argv[i] = fossil_unicode_to_utf8(g.argv[i]); 496 + g.nameOfExe = fossil_filename_to_utf8(buf); 498 497 #else 499 498 g.nameOfExe = g.argv[0]; 500 499 #endif 500 + for(i=0; i<g.argc; i++) g.argv[i] = fossil_filename_to_utf8(g.argv[i]); 501 501 for(i=1; i<g.argc-1; i++){ 502 502 z = g.argv[i]; 503 503 if( z[0]!='-' ) continue; 504 504 z++; 505 505 if( z[0]=='-' ) z++; 506 506 if( z[0]==0 ) return; /* Stop searching at "--" */ 507 507 if( fossil_strcmp(z, "args")==0 ) break; ................................................................................ 856 856 WCHAR *zUnicode = fossil_utf8_to_unicode(zNewCmd); 857 857 if( g.fSystemTrace ) { 858 858 char *zOut = mprintf("SYSTEM: %s\n", zNewCmd); 859 859 fossil_puts(zOut, 1); 860 860 fossil_free(zOut); 861 861 } 862 862 rc = _wsystem(zUnicode); 863 - fossil_mbcs_free(zUnicode); 863 + fossil_unicode_free(zUnicode); 864 864 free(zNewCmd); 865 865 #else 866 866 /* On unix, evaluate the command directly. 867 867 */ 868 868 if( g.fSystemTrace ) fprintf(stderr, "SYSTEM: %s\n", zOrigCmd); 869 869 rc = system(zOrigCmd); 870 870 #endif ................................................................................ 2020 2020 zStopperFile, zNotFound, flags); 2021 2021 } 2022 2022 #endif 2023 2023 } 2024 2024 2025 2025 /* 2026 2026 ** COMMAND: test-echo 2027 +** 2028 +** Usage: %fossil test-echo [--hex] ARGS... 2027 2029 ** 2028 2030 ** Echo all command-line arguments (enclosed in [...]) to the screen so that 2029 2031 ** wildcard expansion behavior of the host shell can be investigated. 2032 +** 2033 +** With the --hex option, show the output as hexadecimal. This can be used 2034 +** to verify the fossil_filename_to_utf8() routine on Windows and Mac. 2030 2035 */ 2031 2036 void test_echo_cmd(void){ 2032 - int i; 2033 - for(i=0; i<g.argc; i++){ 2034 - fossil_print("argv[%d] = [%s]\n", i, g.argv[i]); 2037 + int i, j; 2038 + if( find_option("hex",0,0)==0 ){ 2039 + for(i=0; i<g.argc; i++){ 2040 + fossil_print("argv[%d] = [%s]\n", i, g.argv[i]); 2041 + } 2042 + }else{ 2043 + unsigned char *z, c; 2044 + for(i=0; i<g.argc; i++){ 2045 + fossil_print("argv[%d] = [", i); 2046 + z = (unsigned char*)g.argv[i]; 2047 + for(j=0; (c = z[j])!=0; j++){ 2048 + fossil_print("%02x", c); 2049 + } 2050 + fossil_print("]\n"); 2051 + } 2035 2052 } 2036 2053 }
Changes to src/main.mk.
100 100 $(SRCDIR)/timeline.c \ 101 101 $(SRCDIR)/tkt.c \ 102 102 $(SRCDIR)/tktsetup.c \ 103 103 $(SRCDIR)/undo.c \ 104 104 $(SRCDIR)/update.c \ 105 105 $(SRCDIR)/url.c \ 106 106 $(SRCDIR)/user.c \ 107 + $(SRCDIR)/utf8.c \ 107 108 $(SRCDIR)/verify.c \ 108 109 $(SRCDIR)/vfile.c \ 109 110 $(SRCDIR)/wiki.c \ 110 111 $(SRCDIR)/wikiformat.c \ 111 112 $(SRCDIR)/winhttp.c \ 112 113 $(SRCDIR)/wysiwyg.c \ 113 114 $(SRCDIR)/xfer.c \ ................................................................................ 201 202 $(OBJDIR)/timeline_.c \ 202 203 $(OBJDIR)/tkt_.c \ 203 204 $(OBJDIR)/tktsetup_.c \ 204 205 $(OBJDIR)/undo_.c \ 205 206 $(OBJDIR)/update_.c \ 206 207 $(OBJDIR)/url_.c \ 207 208 $(OBJDIR)/user_.c \ 209 + $(OBJDIR)/utf8_.c \ 208 210 $(OBJDIR)/verify_.c \ 209 211 $(OBJDIR)/vfile_.c \ 210 212 $(OBJDIR)/wiki_.c \ 211 213 $(OBJDIR)/wikiformat_.c \ 212 214 $(OBJDIR)/winhttp_.c \ 213 215 $(OBJDIR)/wysiwyg_.c \ 214 216 $(OBJDIR)/xfer_.c \ ................................................................................ 302 304 $(OBJDIR)/timeline.o \ 303 305 $(OBJDIR)/tkt.o \ 304 306 $(OBJDIR)/tktsetup.o \ 305 307 $(OBJDIR)/undo.o \ 306 308 $(OBJDIR)/update.o \ 307 309 $(OBJDIR)/url.o \ 308 310 $(OBJDIR)/user.o \ 311 + $(OBJDIR)/utf8.o \ 309 312 $(OBJDIR)/verify.o \ 310 313 $(OBJDIR)/vfile.o \ 311 314 $(OBJDIR)/wiki.o \ 312 315 $(OBJDIR)/wikiformat.o \ 313 316 $(OBJDIR)/winhttp.o \ 314 317 $(OBJDIR)/wysiwyg.o \ 315 318 $(OBJDIR)/xfer.o \ ................................................................................ 379 382 clean: 380 383 rm -rf $(OBJDIR)/* $(APPNAME) 381 384 382 385 383 386 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex 384 387 $(OBJDIR)/mkindex $(TRANS_SRC) >$@ 385 388 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h 386 - $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h 389 + $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h 387 390 touch $(OBJDIR)/headers 388 391 $(OBJDIR)/headers: Makefile 389 392 $(OBJDIR)/json.o $(OBJDIR)/json_artifact.o $(OBJDIR)/json_branch.o $(OBJDIR)/json_config.o $(OBJDIR)/json_diff.o $(OBJDIR)/json_dir.o $(OBJDIR)/json_finfo.o $(OBJDIR)/json_login.o $(OBJDIR)/json_query.o $(OBJDIR)/json_report.o $(OBJDIR)/json_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h 390 393 Makefile: 391 394 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate 392 395 $(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c 393 396 ................................................................................ 1014 1017 $(OBJDIR)/user_.c: $(SRCDIR)/user.c $(OBJDIR)/translate 1015 1018 $(OBJDIR)/translate $(SRCDIR)/user.c >$(OBJDIR)/user_.c 1016 1019 1017 1020 $(OBJDIR)/user.o: $(OBJDIR)/user_.c $(OBJDIR)/user.h $(SRCDIR)/config.h 1018 1021 $(XTCC) -o $(OBJDIR)/user.o -c $(OBJDIR)/user_.c 1019 1022 1020 1023 $(OBJDIR)/user.h: $(OBJDIR)/headers 1024 +$(OBJDIR)/utf8_.c: $(SRCDIR)/utf8.c $(OBJDIR)/translate 1025 + $(OBJDIR)/translate $(SRCDIR)/utf8.c >$(OBJDIR)/utf8_.c 1026 + 1027 +$(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h 1028 + $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c 1029 + 1030 +$(OBJDIR)/utf8.h: $(OBJDIR)/headers 1021 1031 $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate 1022 1032 $(OBJDIR)/translate $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c 1023 1033 1024 1034 $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h 1025 1035 $(XTCC) -o $(OBJDIR)/verify.o -c $(OBJDIR)/verify_.c 1026 1036 1027 1037 $(OBJDIR)/verify.h: $(OBJDIR)/headers
Changes to src/makemake.tcl.
105 105 tktsetup 106 106 undo 107 107 update 108 108 url 109 109 user 110 110 verify 111 111 vfile 112 + utf8 112 113 wiki 113 114 wikiformat 114 115 winhttp 115 116 wysiwyg 116 117 xfer 117 118 xfersetup 118 119 zip
Changes to src/rebuild.c.
841 841 while( (pEntry=readdir(d))!=0 ){ 842 842 Blob path; 843 843 char *zSubpath; 844 844 845 845 if( pEntry->d_name[0]=='.' ){ 846 846 continue; 847 847 } 848 - zUtf8Name = fossil_unicode_to_utf8(pEntry->d_name); 848 + zUtf8Name = fossil_filename_to_utf8(pEntry->d_name); 849 849 zSubpath = mprintf("%s/%s", zPath, zUtf8Name); 850 - fossil_mbcs_free(zUtf8Name); 850 + fossil_filename_free(zUtf8Name); 851 851 if( file_isdir(zSubpath)==1 ){ 852 852 recon_read_dir(zSubpath); 853 853 } 854 854 blob_init(&path, 0, 0); 855 855 blob_appendf(&path, "%s", zSubpath); 856 856 if( blob_read_from_file(&aContent, blob_str(&path))==-1 ){ 857 857 fossil_panic("some unknown error occurred while reading \"%s\"", ................................................................................ 865 865 fflush(stdout); 866 866 } 867 867 closedir(d); 868 868 }else { 869 869 fossil_panic("encountered error %d while trying to open \"%s\".", 870 870 errno, g.argv[3]); 871 871 } 872 - fossil_mbcs_free(zUnicodePath); 872 + fossil_unicode_free(zUnicodePath); 873 873 } 874 874 875 875 /* 876 876 ** COMMAND: reconstruct* 877 877 ** 878 878 ** Usage: %fossil reconstruct FILENAME DIRECTORY 879 879 **
Added src/utf8.c.
1 +/* 2 +** Copyright (c) 2012 D. Richard Hipp 3 +** 4 +** This program is free software; you can redistribute it and/or 5 +** modify it under the terms of the Simplified BSD License (also 6 +** known as the "2-Clause License" or "FreeBSD License".) 7 + 8 +** This program is distributed in the hope that it will be useful, 9 +** but without any warranty; without even the implied warranty of 10 +** merchantability or fitness for a particular purpose. 11 +** 12 +** Author contact information: 13 +** drh@hwaci.com 14 +** http://www.hwaci.com/drh/ 15 +** 16 +******************************************************************************* 17 +** 18 +** This file contains utilities for converting text between UTF-8 (which 19 +** is always used internally) and whatever encodings are used by the underlying 20 +** filesystem and operating system. 21 +*/ 22 +#include "config.h" 23 +#include "utf8.h" 24 +#include <sqlite3.h> 25 +#ifdef _WIN32 26 +# include <windows.h> 27 +#endif 28 + 29 +/* 30 +** Translate MBCS to UTF8. Return a pointer to the translated text. 31 +** Call fossil_mbcs_free() to deallocate any memory used to store the 32 +** returned pointer when done. 33 +*/ 34 +char *fossil_mbcs_to_utf8(const char *zMbcs){ 35 +#ifdef _WIN32 36 + extern char *sqlite3_win32_mbcs_to_utf8(const char*); 37 + return sqlite3_win32_mbcs_to_utf8(zMbcs); 38 +#else 39 + return (char*)zMbcs; /* No-op on unix */ 40 +#endif 41 +} 42 + 43 +/* 44 +** After translating from UTF8 to MBCS, invoke this routine to deallocate 45 +** any memory used to hold the translation 46 +*/ 47 +void fossil_mbcs_free(char *zOld){ 48 +#ifdef _WIN32 49 + sqlite3_free(zOld); 50 +#else 51 + /* No-op on unix */ 52 +#endif 53 +} 54 + 55 +/* 56 +** Translate Unicode text into UTF8. 57 +** Return a pointer to the translated text. 58 +** Call fossil_unicode_free() to deallocate any memory used to store the 59 +** returned pointer when done. 60 +*/ 61 +char *fossil_unicode_to_utf8(const char *zUnicode){ 62 +#ifdef _WIN32 63 + int nByte = WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, 0, 0, 0, 0); 64 + char *zUtf = sqlite3_malloc( nByte ); 65 + if( zUtf==0 ){ 66 + return 0; 67 + } 68 + WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, zUtf, nByte, 0, 0); 69 + return zUtf; 70 +#else 71 + return (char *)zUnicode; /* No-op on unix */ 72 +#endif 73 +} 74 + 75 +/* 76 +** Translate UTF8 to unicode for use in system calls. Return a pointer to the 77 +** translated text.. Call fossil_unicode_free() to deallocate any memory 78 +** used to store the returned pointer when done. 79 +*/ 80 +void *fossil_utf8_to_unicode(const char *zUtf8){ 81 +#ifdef _WIN32 82 + int nByte = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0); 83 + wchar_t *zUnicode = sqlite3_malloc( nByte * 2 ); 84 + if( zUnicode==0 ){ 85 + return 0; 86 + } 87 + MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nByte); 88 + return zUnicode; 89 +#else 90 + return (void *)zUtf8; /* No-op on unix */ 91 +#endif 92 +} 93 + 94 +/* 95 +** Deallocate any memory that was previously allocated by 96 +** fossil_unicode_to_utf8(). 97 +*/ 98 +void fossil_unicode_free(void *pOld){ 99 +#ifdef _WIN32 100 + sqlite3_free(pOld); 101 +#else 102 + /* No-op on unix */ 103 +#endif 104 +} 105 + 106 +#if defined(__APPLE__) 107 +# include <iconv.h> 108 +#endif 109 + 110 +/* 111 +** Translate text from the filename character set into 112 +** to precomposed UTF8. Return a pointer to the translated text. 113 +** Call fossil_filename_free() to deallocate any memory used to store the 114 +** returned pointer when done. 115 +*/ 116 +char *fossil_filename_to_utf8(const char *zFilename){ 117 +#if defined(_WIN32) 118 + int nByte = WideCharToMultiByte(CP_UTF8, 0, zFilename, -1, 0, 0, 0, 0); 119 + char *zUtf = sqlite3_malloc( nByte ); 120 + if( zUtf==0 ){ 121 + return 0; 122 + } 123 + WideCharToMultiByte(CP_UTF8, 0, zFilename, -1, zUtf, nByte, 0, 0); 124 + return zUtf; 125 +#elif defined(__APPLE__) 126 + char *zOut; 127 + iconv_t cd; 128 + size_t n, x; 129 + for(n=0; zFilename[n]>0 && zFilename[n]<=0x7f; n++){} 130 + if( zFilename[n]!=0 && (cd = iconv_open("UTF-8", "UTF-8-MAC"))!=(iconv_t)-1 ){ 131 + char *zIn = (char*)zFilename; 132 + char *zOutx; 133 + size_t nIn, nOutx; 134 + nIn = n = strlen(zFilename); 135 + nOutx = nIn+100; 136 + zOutx = zOut = fossil_malloc( nOutx+1 ); 137 + x = iconv(cd, &zIn, &nIn, &zOutx, &nOutx); 138 + if( x==(size_t)-1 ){ 139 + fossil_free(zOut); 140 + zOut = fossil_strdup(zFilename); 141 + }else{ 142 + zOut[n+100-nOutx] = 0; 143 + } 144 + iconv_close(cd); 145 + }else{ 146 + zOut = fossil_strdup(zFilename); 147 + } 148 + return zOut; 149 +#else 150 + return (char *)zFilename; /* No-op on non-mac unix */ 151 +#endif 152 +} 153 + 154 +/* 155 +** Deallocate any memory that was previously allocated by 156 +** fossil_filename_to_utf8(). 157 +*/ 158 +void fossil_filename_free(char *pOld){ 159 +#if defined(_WIN32) 160 + sqlite3_free(pOld); 161 +#elif defined(__APPLE__) 162 + fossil_free(pOld); 163 +#else 164 + /* No-op on all other unix */ 165 +#endif 166 +} 167 + 168 +/* 169 +** Display UTF8 on the console. Return the number of 170 +** Characters written. If stdout or stderr is redirected 171 +** to a file, -1 is returned and nothing is written 172 +** to the console. 173 +*/ 174 +int fossil_utf8_to_console(const char *zUtf8, int nByte, int toStdErr){ 175 +#ifdef _WIN32 176 + int nChar; 177 + wchar_t *zUnicode; /* Unicode version of zUtf8 */ 178 + DWORD dummy; 179 + 180 + static int istty[2] = { -1, -1 }; 181 + if( istty[toStdErr] == -1 ){ 182 + istty[toStdErr] = _isatty(toStdErr + 1) != 0; 183 + } 184 + if( !istty[toStdErr] ){ 185 + /* stdout/stderr is not a console. */ 186 + return -1; 187 + } 188 + 189 + nChar = MultiByteToWideChar(CP_UTF8, 0, zUtf8, nByte, NULL, 0); 190 + zUnicode = malloc( (nChar + 1) *sizeof(zUnicode[0]) ); 191 + if( zUnicode==0 ){ 192 + return 0; 193 + } 194 + nChar = MultiByteToWideChar(CP_UTF8, 0, zUtf8, nByte, zUnicode, nChar); 195 + if( nChar==0 ){ 196 + free(zUnicode); 197 + return 0; 198 + } 199 + zUnicode[nChar] = '\0'; 200 + WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE - toStdErr), zUnicode, nChar, 201 + &dummy, 0); 202 + return nChar; 203 +#else 204 + return -1; /* No-op on unix */ 205 +#endif 206 +}
Changes to src/vfile.c.
438 438 DIR *d; 439 439 int origSize; 440 440 const char *zDir; 441 441 struct dirent *pEntry; 442 442 int skipAll = 0; 443 443 static Stmt ins; 444 444 static int depth = 0; 445 - void *zMbcs; 445 + void *zNative; 446 446 447 447 origSize = blob_size(pPath); 448 448 if( pIgnore ){ 449 449 blob_appendf(pPath, "/"); 450 450 if( glob_match(pIgnore, &blob_str(pPath)[nPrefix+1]) ) skipAll = 1; 451 451 blob_resize(pPath, origSize); 452 452 } ................................................................................ 457 457 "INSERT OR IGNORE INTO sfile(x) SELECT :file" 458 458 " WHERE NOT EXISTS(SELECT 1 FROM vfile WHERE pathname=:file)" 459 459 ); 460 460 } 461 461 depth++; 462 462 463 463 zDir = blob_str(pPath); 464 - zMbcs = fossil_utf8_to_unicode(zDir); 465 - d = opendir(zMbcs); 464 + zNative = fossil_utf8_to_unicode(zDir); 465 + d = opendir(zNative); 466 466 if( d ){ 467 467 while( (pEntry=readdir(d))!=0 ){ 468 468 char *zPath; 469 469 char *zUtf8; 470 470 if( pEntry->d_name[0]=='.' ){ 471 471 if( (scanFlags & SCAN_ALL)==0 ) continue; 472 472 if( pEntry->d_name[1]==0 ) continue; 473 473 if( pEntry->d_name[1]=='.' && pEntry->d_name[2]==0 ) continue; 474 474 } 475 - zUtf8 = fossil_unicode_to_utf8(pEntry->d_name); 475 + zUtf8 = fossil_filename_to_utf8(pEntry->d_name); 476 476 blob_appendf(pPath, "/%s", zUtf8); 477 477 zPath = blob_str(pPath); 478 478 if( glob_match(pIgnore, &zPath[nPrefix+1]) ){ 479 479 /* do nothing */ 480 480 }else if( file_wd_isdir(zPath)==1 ){ 481 481 if( !vfile_top_of_checkout(zPath) ){ 482 482 vfile_scan(pPath, nPrefix, scanFlags, pIgnore); ................................................................................ 484 484 }else if( file_wd_isfile_or_link(zPath) ){ 485 485 if( (scanFlags & SCAN_TEMP)==0 || is_temporary_file(zUtf8) ){ 486 486 db_bind_text(&ins, ":file", &zPath[nPrefix+1]); 487 487 db_step(&ins); 488 488 db_reset(&ins); 489 489 } 490 490 } 491 - fossil_mbcs_free(zUtf8); 491 + fossil_filename_free(zUtf8); 492 492 blob_resize(pPath, origSize); 493 493 } 494 494 closedir(d); 495 495 } 496 - fossil_mbcs_free(zMbcs); 496 + fossil_unicode_free(zNative); 497 497 498 498 depth--; 499 499 if( depth==0 ){ 500 500 db_finalize(&ins); 501 501 } 502 502 } 503 503
Changes to src/winhttp.c.
260 260 */ 261 261 static HttpService hsData = {8080, NULL, 0, 0, NULL, INVALID_SOCKET}; 262 262 static SERVICE_STATUS ssStatus; 263 263 static SERVICE_STATUS_HANDLE sshStatusHandle; 264 264 265 265 /* 266 266 ** Get message string of the last system error. Return a pointer to the 267 -** message string. Call fossil_mbcs_free() to deallocate any memory used 267 +** message string. Call fossil_unicode_free() to deallocate any memory used 268 268 ** to store the message string when done. 269 269 */ 270 270 static char *win32_get_last_errmsg(void){ 271 271 DWORD nMsg; 272 272 DWORD nErr = GetLastError(); 273 273 LPWSTR tmp = NULL; 274 274 char *zMsg = NULL;
Changes to win/Makefile.dmc.
24 24 CFLAGS = -o 25 25 BCC = $(DMDIR)\bin\dmc $(CFLAGS) 26 26 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL) 27 27 LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32 28 28 29 29 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 30 30 31 -SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c 31 +SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c utf8_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c 32 32 33 -OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O 33 +OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O 34 34 35 35 36 36 RC=$(DMDIR)\bin\rcc 37 37 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ 38 38 39 39 APPNAME = $(OBJDIR)\fossil$(E) 40 40 ................................................................................ 44 44 cd $(OBJDIR) 45 45 $(DMDIR)\bin\link @link 46 46 47 47 $(OBJDIR)\fossil.res: $B\win\fossil.rc 48 48 $(RC) $(RCFLAGS) -o$@ $** 49 49 50 50 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res 51 - +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_tag json_timeline json_user json_wiki leaf login main manifest md5 merge merge3 moderate name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ 51 + +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_tag json_timeline json_user json_wiki leaf login main manifest md5 merge merge3 moderate name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user utf8 verify vfile wiki wikiformat winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ 52 52 +echo fossil >> $@ 53 53 +echo fossil >> $@ 54 54 +echo $(LIBS) >> $@ 55 55 +echo. >> $@ 56 56 +echo fossil >> $@ 57 57 58 58 translate$E: $(SRCDIR)\translate.c ................................................................................ 647 647 +translate$E $** > $@ 648 648 649 649 $(OBJDIR)\user$O : user_.c user.h 650 650 $(TCC) -o$@ -c user_.c 651 651 652 652 user_.c : $(SRCDIR)\user.c 653 653 +translate$E $** > $@ 654 + 655 +$(OBJDIR)\utf8$O : utf8_.c utf8.h 656 + $(TCC) -o$@ -c utf8_.c 657 + 658 +utf8_.c : $(SRCDIR)\utf8.c 659 + +translate$E $** > $@ 654 660 655 661 $(OBJDIR)\verify$O : verify_.c verify.h 656 662 $(TCC) -o$@ -c verify_.c 657 663 658 664 verify_.c : $(SRCDIR)\verify.c 659 665 +translate$E $** > $@ 660 666 ................................................................................ 703 709 $(OBJDIR)\zip$O : zip_.c zip.h 704 710 $(TCC) -o$@ -c zip_.c 705 711 706 712 zip_.c : $(SRCDIR)\zip.c 707 713 +translate$E $** > $@ 708 714 709 715 headers: makeheaders$E page_index.h VERSION.h 710 - +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h 716 + +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h 711 717 @copy /Y nul: headers
Changes to win/Makefile.mingw.
311 311 $(SRCDIR)/timeline.c \ 312 312 $(SRCDIR)/tkt.c \ 313 313 $(SRCDIR)/tktsetup.c \ 314 314 $(SRCDIR)/undo.c \ 315 315 $(SRCDIR)/update.c \ 316 316 $(SRCDIR)/url.c \ 317 317 $(SRCDIR)/user.c \ 318 + $(SRCDIR)/utf8.c \ 318 319 $(SRCDIR)/verify.c \ 319 320 $(SRCDIR)/vfile.c \ 320 321 $(SRCDIR)/wiki.c \ 321 322 $(SRCDIR)/wikiformat.c \ 322 323 $(SRCDIR)/winhttp.c \ 323 324 $(SRCDIR)/wysiwyg.c \ 324 325 $(SRCDIR)/xfer.c \ ................................................................................ 412 413 $(OBJDIR)/timeline_.c \ 413 414 $(OBJDIR)/tkt_.c \ 414 415 $(OBJDIR)/tktsetup_.c \ 415 416 $(OBJDIR)/undo_.c \ 416 417 $(OBJDIR)/update_.c \ 417 418 $(OBJDIR)/url_.c \ 418 419 $(OBJDIR)/user_.c \ 420 + $(OBJDIR)/utf8_.c \ 419 421 $(OBJDIR)/verify_.c \ 420 422 $(OBJDIR)/vfile_.c \ 421 423 $(OBJDIR)/wiki_.c \ 422 424 $(OBJDIR)/wikiformat_.c \ 423 425 $(OBJDIR)/winhttp_.c \ 424 426 $(OBJDIR)/wysiwyg_.c \ 425 427 $(OBJDIR)/xfer_.c \ ................................................................................ 513 515 $(OBJDIR)/timeline.o \ 514 516 $(OBJDIR)/tkt.o \ 515 517 $(OBJDIR)/tktsetup.o \ 516 518 $(OBJDIR)/undo.o \ 517 519 $(OBJDIR)/update.o \ 518 520 $(OBJDIR)/url.o \ 519 521 $(OBJDIR)/user.o \ 522 + $(OBJDIR)/utf8.o \ 520 523 $(OBJDIR)/verify.o \ 521 524 $(OBJDIR)/vfile.o \ 522 525 $(OBJDIR)/wiki.o \ 523 526 $(OBJDIR)/wikiformat.o \ 524 527 $(OBJDIR)/winhttp.o \ 525 528 $(OBJDIR)/wysiwyg.o \ 526 529 $(OBJDIR)/xfer.o \ ................................................................................ 637 640 setup: $(OBJDIR) $(APPNAME) 638 641 $(MAKENSIS) ./fossil.nsi 639 642 640 643 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex 641 644 $(MKINDEX) $(TRANS_SRC) >$@ 642 645 643 646 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h 644 - $(MAKEHEADERS) $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h 647 + $(MAKEHEADERS) $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h 645 648 echo Done >$(OBJDIR)/headers 646 649 647 650 $(OBJDIR)/headers: Makefile 648 651 649 652 Makefile: 650 653 651 654 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate ................................................................................ 1363 1366 $(OBJDIR)/user_.c: $(SRCDIR)/user.c $(OBJDIR)/translate 1364 1367 $(TRANSLATE) $(SRCDIR)/user.c >$(OBJDIR)/user_.c 1365 1368 1366 1369 $(OBJDIR)/user.o: $(OBJDIR)/user_.c $(OBJDIR)/user.h $(SRCDIR)/config.h 1367 1370 $(XTCC) -o $(OBJDIR)/user.o -c $(OBJDIR)/user_.c 1368 1371 1369 1372 $(OBJDIR)/user.h: $(OBJDIR)/headers 1373 + 1374 +$(OBJDIR)/utf8_.c: $(SRCDIR)/utf8.c $(OBJDIR)/translate 1375 + $(TRANSLATE) $(SRCDIR)/utf8.c >$(OBJDIR)/utf8_.c 1376 + 1377 +$(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h 1378 + $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c 1379 + 1380 +$(OBJDIR)/utf8.h: $(OBJDIR)/headers 1370 1381 1371 1382 $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate 1372 1383 $(TRANSLATE) $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c 1373 1384 1374 1385 $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h 1375 1386 $(XTCC) -o $(OBJDIR)/verify.o -c $(OBJDIR)/verify_.c 1376 1387
Changes to win/Makefile.msc.
126 126 timeline_.c \ 127 127 tkt_.c \ 128 128 tktsetup_.c \ 129 129 undo_.c \ 130 130 update_.c \ 131 131 url_.c \ 132 132 user_.c \ 133 + utf8_.c \ 133 134 verify_.c \ 134 135 vfile_.c \ 135 136 wiki_.c \ 136 137 wikiformat_.c \ 137 138 winhttp_.c \ 138 139 wysiwyg_.c \ 139 140 xfer_.c \ ................................................................................ 226 227 $(OX)\timeline$O \ 227 228 $(OX)\tkt$O \ 228 229 $(OX)\tktsetup$O \ 229 230 $(OX)\undo$O \ 230 231 $(OX)\update$O \ 231 232 $(OX)\url$O \ 232 233 $(OX)\user$O \ 234 + $(OX)\utf8$O \ 233 235 $(OX)\verify$O \ 234 236 $(OX)\vfile$O \ 235 237 $(OX)\wiki$O \ 236 238 $(OX)\wikiformat$O \ 237 239 $(OX)\winhttp$O \ 238 240 $(OX)\wysiwyg$O \ 239 241 $(OX)\xfer$O \ ................................................................................ 347 349 echo $(OX)\timeline.obj >> $@ 348 350 echo $(OX)\tkt.obj >> $@ 349 351 echo $(OX)\tktsetup.obj >> $@ 350 352 echo $(OX)\undo.obj >> $@ 351 353 echo $(OX)\update.obj >> $@ 352 354 echo $(OX)\url.obj >> $@ 353 355 echo $(OX)\user.obj >> $@ 356 + echo $(OX)\utf8.obj >> $@ 354 357 echo $(OX)\verify.obj >> $@ 355 358 echo $(OX)\vfile.obj >> $@ 356 359 echo $(OX)\wiki.obj >> $@ 357 360 echo $(OX)\wikiformat.obj >> $@ 358 361 echo $(OX)\winhttp.obj >> $@ 359 362 echo $(OX)\wysiwyg.obj >> $@ 360 363 echo $(OX)\xfer.obj >> $@ ................................................................................ 968 971 translate$E $** > $@ 969 972 970 973 $(OX)\user$O : user_.c user.h 971 974 $(TCC) /Fo$@ -c user_.c 972 975 973 976 user_.c : $(SRCDIR)\user.c 974 977 translate$E $** > $@ 978 + 979 +$(OX)\utf8$O : utf8_.c utf8.h 980 + $(TCC) /Fo$@ -c utf8_.c 981 + 982 +utf8_.c : $(SRCDIR)\utf8.c 983 + translate$E $** > $@ 975 984 976 985 $(OX)\verify$O : verify_.c verify.h 977 986 $(TCC) /Fo$@ -c verify_.c 978 987 979 988 verify_.c : $(SRCDIR)\verify.c 980 989 translate$E $** > $@ 981 990 ................................................................................ 1114 1123 timeline_.c:timeline.h \ 1115 1124 tkt_.c:tkt.h \ 1116 1125 tktsetup_.c:tktsetup.h \ 1117 1126 undo_.c:undo.h \ 1118 1127 update_.c:update.h \ 1119 1128 url_.c:url.h \ 1120 1129 user_.c:user.h \ 1130 + utf8_.c:utf8.h \ 1121 1131 verify_.c:verify.h \ 1122 1132 vfile_.c:vfile.h \ 1123 1133 wiki_.c:wiki.h \ 1124 1134 wikiformat_.c:wikiformat.h \ 1125 1135 winhttp_.c:winhttp.h \ 1126 1136 wysiwyg_.c:wysiwyg.h \ 1127 1137 xfer_.c:xfer.h \