Fossil SCM
Code refactoring: Move utility routines (ex: fossil_malloc()) out of main.c and into a new file util.c. Try to gather I/O routines into the printf.c source file.
Commit
bb0cedb15ad9958c5da21741fee7239f73356797
Parent
1a2e1ea0fea58a7…
10 files changed
+92
-295
+11
-1
+1
+150
-65
+5
-1
+2
-2
+1
+10
-4
+12
+10
+92
-295
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -334,11 +334,11 @@ | ||
| 334 | 334 | |
| 335 | 335 | /* |
| 336 | 336 | ** atexit() handler which frees up "some" of the resources |
| 337 | 337 | ** used by fossil. |
| 338 | 338 | */ |
| 339 | -void fossil_atexit(void) { | |
| 339 | +static void fossil_atexit(void) { | |
| 340 | 340 | #ifdef FOSSIL_ENABLE_JSON |
| 341 | 341 | cson_value_free(g.json.gc.v); |
| 342 | 342 | memset(&g.json, 0, sizeof(g.json)); |
| 343 | 343 | #endif |
| 344 | 344 | free(g.zErrMsg); |
| @@ -455,10 +455,49 @@ | ||
| 455 | 455 | } |
| 456 | 456 | return zNewArgv; |
| 457 | 457 | } |
| 458 | 458 | #endif |
| 459 | 459 | |
| 460 | +/* | |
| 461 | +** Return a name for an SQLite error code | |
| 462 | +*/ | |
| 463 | +static const char *sqlite_error_code_name(int iCode){ | |
| 464 | + static char zCode[30]; | |
| 465 | + switch( iCode & 0xff ){ | |
| 466 | + case SQLITE_OK: return "SQLITE_OK"; | |
| 467 | + case SQLITE_ERROR: return "SQLITE_ERROR"; | |
| 468 | + case SQLITE_PERM: return "SQLITE_PERM"; | |
| 469 | + case SQLITE_ABORT: return "SQLITE_ABORT"; | |
| 470 | + case SQLITE_BUSY: return "SQLITE_BUSY"; | |
| 471 | + case SQLITE_NOMEM: return "SQLITE_NOMEM"; | |
| 472 | + case SQLITE_READONLY: return "SQLITE_READONLY"; | |
| 473 | + case SQLITE_INTERRUPT: return "SQLITE_INTERRUPT"; | |
| 474 | + case SQLITE_IOERR: return "SQLITE_IOERR"; | |
| 475 | + case SQLITE_CORRUPT: return "SQLITE_CORRUPT"; | |
| 476 | + case SQLITE_FULL: return "SQLITE_FULL"; | |
| 477 | + case SQLITE_CANTOPEN: return "SQLITE_CANTOPEN"; | |
| 478 | + case SQLITE_PROTOCOL: return "SQLITE_PROTOCOL"; | |
| 479 | + case SQLITE_EMPTY: return "SQLITE_EMPTY"; | |
| 480 | + case SQLITE_SCHEMA: return "SQLITE_SCHEMA"; | |
| 481 | + case SQLITE_CONSTRAINT: return "SQLITE_CONSTRAINT"; | |
| 482 | + case SQLITE_MISMATCH: return "SQLITE_MISMATCH"; | |
| 483 | + case SQLITE_MISUSE: return "SQLITE_MISUSE"; | |
| 484 | + case SQLITE_NOLFS: return "SQLITE_NOLFS"; | |
| 485 | + case SQLITE_FORMAT: return "SQLITE_FORMAT"; | |
| 486 | + case SQLITE_RANGE: return "SQLITE_RANGE"; | |
| 487 | + case SQLITE_NOTADB: return "SQLITE_NOTADB"; | |
| 488 | + default: { | |
| 489 | + sqlite3_snprintf(sizeof(zCode),zCode,"error code %d",iCode); | |
| 490 | + } | |
| 491 | + } | |
| 492 | + return zCode; | |
| 493 | +} | |
| 494 | + | |
| 495 | +/* Error logs from SQLite */ | |
| 496 | +static void fossil_sqlite_log(void *notUsed, int iCode, const char *zErrmsg){ | |
| 497 | + fossil_warning("%s: %s", sqlite_error_code_name(iCode), zErrmsg); | |
| 498 | +} | |
| 460 | 499 | |
| 461 | 500 | /* |
| 462 | 501 | ** This procedure runs first. |
| 463 | 502 | */ |
| 464 | 503 | #if defined(_WIN32) && !defined(BROKEN_MINGW_CMDLINE) |
| @@ -562,252 +601,10 @@ | ||
| 562 | 601 | fossil_exit(0); |
| 563 | 602 | /*NOT_REACHED*/ |
| 564 | 603 | return 0; |
| 565 | 604 | } |
| 566 | 605 | |
| 567 | -/* | |
| 568 | -** The following variable becomes true while processing a fatal error | |
| 569 | -** or a panic. If additional "recursive-fatal" errors occur while | |
| 570 | -** shutting down, the recursive errors are silently ignored. | |
| 571 | -*/ | |
| 572 | -static int mainInFatalError = 0; | |
| 573 | - | |
| 574 | -/* | |
| 575 | -** Exit. Take care to close the database first. | |
| 576 | -*/ | |
| 577 | -NORETURN void fossil_exit(int rc){ | |
| 578 | - db_close(1); | |
| 579 | - exit(rc); | |
| 580 | -} | |
| 581 | - | |
| 582 | -/* | |
| 583 | -** Print an error message, rollback all databases, and quit. These | |
| 584 | -** routines never return. | |
| 585 | -*/ | |
| 586 | -NORETURN void fossil_panic(const char *zFormat, ...){ | |
| 587 | - char *z; | |
| 588 | - va_list ap; | |
| 589 | - int rc = 1; | |
| 590 | - static int once = 1; | |
| 591 | - mainInFatalError = 1; | |
| 592 | - va_start(ap, zFormat); | |
| 593 | - z = vmprintf(zFormat, ap); | |
| 594 | - va_end(ap); | |
| 595 | -#ifdef FOSSIL_ENABLE_JSON | |
| 596 | - if( g.json.isJsonMode ){ | |
| 597 | - json_err( 0, z, 1 ); | |
| 598 | - if( g.isHTTP ){ | |
| 599 | - rc = 0 /* avoid HTTP 500 */; | |
| 600 | - } | |
| 601 | - } | |
| 602 | - else | |
| 603 | -#endif | |
| 604 | - { | |
| 605 | - if( g.cgiOutput && once ){ | |
| 606 | - once = 0; | |
| 607 | - cgi_printf("<p class=\"generalError\">%h</p>", z); | |
| 608 | - cgi_reply(); | |
| 609 | - }else if( !g.fQuiet ){ | |
| 610 | - fossil_trace("%s: %s\n", g.argv[0], z); | |
| 611 | - } | |
| 612 | - } | |
| 613 | - free(z); | |
| 614 | - db_force_rollback(); | |
| 615 | - fossil_exit(rc); | |
| 616 | -} | |
| 617 | - | |
| 618 | -NORETURN void fossil_fatal(const char *zFormat, ...){ | |
| 619 | - char *z; | |
| 620 | - int rc = 1; | |
| 621 | - va_list ap; | |
| 622 | - mainInFatalError = 1; | |
| 623 | - va_start(ap, zFormat); | |
| 624 | - z = vmprintf(zFormat, ap); | |
| 625 | - va_end(ap); | |
| 626 | -#ifdef FOSSIL_ENABLE_JSON | |
| 627 | - if( g.json.isJsonMode ){ | |
| 628 | - json_err( g.json.resultCode, z, 1 ); | |
| 629 | - if( g.isHTTP ){ | |
| 630 | - rc = 0 /* avoid HTTP 500 */; | |
| 631 | - } | |
| 632 | - } | |
| 633 | - else | |
| 634 | -#endif | |
| 635 | - { | |
| 636 | - if( g.cgiOutput ){ | |
| 637 | - g.cgiOutput = 0; | |
| 638 | - cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); | |
| 639 | - cgi_reply(); | |
| 640 | - }else if( !g.fQuiet ){ | |
| 641 | - fossil_trace("%s: %s\n", g.argv[0], z); | |
| 642 | - } | |
| 643 | - } | |
| 644 | - free(z); | |
| 645 | - db_force_rollback(); | |
| 646 | - fossil_exit(rc); | |
| 647 | -} | |
| 648 | - | |
| 649 | -/* This routine works like fossil_fatal() except that if called | |
| 650 | -** recursively, the recursive call is a no-op. | |
| 651 | -** | |
| 652 | -** Use this in places where an error might occur while doing | |
| 653 | -** fatal error shutdown processing. Unlike fossil_panic() and | |
| 654 | -** fossil_fatal() which never return, this routine might return if | |
| 655 | -** the fatal error handing is already in process. The caller must | |
| 656 | -** be prepared for this routine to return. | |
| 657 | -*/ | |
| 658 | -void fossil_fatal_recursive(const char *zFormat, ...){ | |
| 659 | - char *z; | |
| 660 | - va_list ap; | |
| 661 | - int rc = 1; | |
| 662 | - if( mainInFatalError ) return; | |
| 663 | - mainInFatalError = 1; | |
| 664 | - va_start(ap, zFormat); | |
| 665 | - z = vmprintf(zFormat, ap); | |
| 666 | - va_end(ap); | |
| 667 | -#ifdef FOSSIL_ENABLE_JSON | |
| 668 | - if( g.json.isJsonMode ){ | |
| 669 | - json_err( g.json.resultCode, z, 1 ); | |
| 670 | - if( g.isHTTP ){ | |
| 671 | - rc = 0 /* avoid HTTP 500 */; | |
| 672 | - } | |
| 673 | - } else | |
| 674 | -#endif | |
| 675 | - { | |
| 676 | - if( g.cgiOutput ){ | |
| 677 | - g.cgiOutput = 0; | |
| 678 | - cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); | |
| 679 | - cgi_reply(); | |
| 680 | - }else{ | |
| 681 | - fossil_trace("%s: %s\n", g.argv[0], z); | |
| 682 | - } | |
| 683 | - } | |
| 684 | - db_force_rollback(); | |
| 685 | - fossil_exit(rc); | |
| 686 | -} | |
| 687 | - | |
| 688 | - | |
| 689 | -/* Print a warning message */ | |
| 690 | -void fossil_warning(const char *zFormat, ...){ | |
| 691 | - char *z; | |
| 692 | - va_list ap; | |
| 693 | - va_start(ap, zFormat); | |
| 694 | - z = vmprintf(zFormat, ap); | |
| 695 | - va_end(ap); | |
| 696 | -#ifdef FOSSIL_ENABLE_JSON | |
| 697 | - if(g.json.isJsonMode){ | |
| 698 | - json_warn( FSL_JSON_W_UNKNOWN, z ); | |
| 699 | - }else | |
| 700 | -#endif | |
| 701 | - { | |
| 702 | - if( g.cgiOutput ){ | |
| 703 | - cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); | |
| 704 | - }else{ | |
| 705 | - fossil_trace("%s: %s\n", g.argv[0], z); | |
| 706 | - } | |
| 707 | - } | |
| 708 | - free(z); | |
| 709 | -} | |
| 710 | - | |
| 711 | -/* | |
| 712 | -** Malloc and free routines that cannot fail | |
| 713 | -*/ | |
| 714 | -void *fossil_malloc(size_t n){ | |
| 715 | - void *p = malloc(n==0 ? 1 : n); | |
| 716 | - if( p==0 ) fossil_panic("out of memory"); | |
| 717 | - return p; | |
| 718 | -} | |
| 719 | -void fossil_free(void *p){ | |
| 720 | - free(p); | |
| 721 | -} | |
| 722 | -void *fossil_realloc(void *p, size_t n){ | |
| 723 | - p = realloc(p, n); | |
| 724 | - if( p==0 ) fossil_panic("out of memory"); | |
| 725 | - return p; | |
| 726 | -} | |
| 727 | - | |
| 728 | -/* | |
| 729 | -** This function implements a cross-platform "system()" interface. | |
| 730 | -*/ | |
| 731 | -int fossil_system(const char *zOrigCmd){ | |
| 732 | - int rc; | |
| 733 | -#if defined(_WIN32) | |
| 734 | - /* On windows, we have to put double-quotes around the entire command. | |
| 735 | - ** Who knows why - this is just the way windows works. | |
| 736 | - */ | |
| 737 | - char *zNewCmd = mprintf("\"%s\"", zOrigCmd); | |
| 738 | - WCHAR *zUnicode = fossil_utf8_to_unicode(zNewCmd); | |
| 739 | - if( g.fSystemTrace ) { | |
| 740 | - fossil_trace("SYSTEM: %s\n", zNewCmd); | |
| 741 | - } | |
| 742 | - rc = _wsystem(zUnicode); | |
| 743 | - fossil_unicode_free(zUnicode); | |
| 744 | - free(zNewCmd); | |
| 745 | -#else | |
| 746 | - /* On unix, evaluate the command directly. | |
| 747 | - */ | |
| 748 | - if( g.fSystemTrace ) fprintf(stderr, "SYSTEM: %s\n", zOrigCmd); | |
| 749 | - rc = system(zOrigCmd); | |
| 750 | -#endif | |
| 751 | - return rc; | |
| 752 | -} | |
| 753 | - | |
| 754 | -/* | |
| 755 | -** Turn off any NL to CRNL translation on the stream given as an | |
| 756 | -** argument. This is a no-op on unix but is necessary on windows. | |
| 757 | -*/ | |
| 758 | -void fossil_binary_mode(FILE *p){ | |
| 759 | -#if defined(_WIN32) | |
| 760 | - _setmode(_fileno(p), _O_BINARY); | |
| 761 | -#endif | |
| 762 | -#ifdef __EMX__ /* OS/2 */ | |
| 763 | - setmode(fileno(p), O_BINARY); | |
| 764 | -#endif | |
| 765 | -} | |
| 766 | - | |
| 767 | - | |
| 768 | - | |
| 769 | -/* | |
| 770 | -** Return a name for an SQLite error code | |
| 771 | -*/ | |
| 772 | -static const char *sqlite_error_code_name(int iCode){ | |
| 773 | - static char zCode[30]; | |
| 774 | - switch( iCode & 0xff ){ | |
| 775 | - case SQLITE_OK: return "SQLITE_OK"; | |
| 776 | - case SQLITE_ERROR: return "SQLITE_ERROR"; | |
| 777 | - case SQLITE_PERM: return "SQLITE_PERM"; | |
| 778 | - case SQLITE_ABORT: return "SQLITE_ABORT"; | |
| 779 | - case SQLITE_BUSY: return "SQLITE_BUSY"; | |
| 780 | - case SQLITE_NOMEM: return "SQLITE_NOMEM"; | |
| 781 | - case SQLITE_READONLY: return "SQLITE_READONLY"; | |
| 782 | - case SQLITE_INTERRUPT: return "SQLITE_INTERRUPT"; | |
| 783 | - case SQLITE_IOERR: return "SQLITE_IOERR"; | |
| 784 | - case SQLITE_CORRUPT: return "SQLITE_CORRUPT"; | |
| 785 | - case SQLITE_FULL: return "SQLITE_FULL"; | |
| 786 | - case SQLITE_CANTOPEN: return "SQLITE_CANTOPEN"; | |
| 787 | - case SQLITE_PROTOCOL: return "SQLITE_PROTOCOL"; | |
| 788 | - case SQLITE_EMPTY: return "SQLITE_EMPTY"; | |
| 789 | - case SQLITE_SCHEMA: return "SQLITE_SCHEMA"; | |
| 790 | - case SQLITE_CONSTRAINT: return "SQLITE_CONSTRAINT"; | |
| 791 | - case SQLITE_MISMATCH: return "SQLITE_MISMATCH"; | |
| 792 | - case SQLITE_MISUSE: return "SQLITE_MISUSE"; | |
| 793 | - case SQLITE_NOLFS: return "SQLITE_NOLFS"; | |
| 794 | - case SQLITE_FORMAT: return "SQLITE_FORMAT"; | |
| 795 | - case SQLITE_RANGE: return "SQLITE_RANGE"; | |
| 796 | - case SQLITE_NOTADB: return "SQLITE_NOTADB"; | |
| 797 | - default: { | |
| 798 | - sqlite3_snprintf(sizeof(zCode),zCode,"error code %d",iCode); | |
| 799 | - } | |
| 800 | - } | |
| 801 | - return zCode; | |
| 802 | -} | |
| 803 | - | |
| 804 | -/* Error logs from SQLite */ | |
| 805 | -void fossil_sqlite_log(void *notUsed, int iCode, const char *zErrmsg){ | |
| 806 | - fossil_warning("%s: %s", sqlite_error_code_name(iCode), zErrmsg); | |
| 807 | -} | |
| 808 | - | |
| 809 | 606 | /* |
| 810 | 607 | ** Print a usage comment and quit |
| 811 | 608 | */ |
| 812 | 609 | void usage(const char *zFormat){ |
| 813 | 610 | fossil_fatal("Usage: %s %s %s\n", g.argv[0], g.argv[1], zFormat); |
| @@ -814,11 +611,11 @@ | ||
| 814 | 611 | } |
| 815 | 612 | |
| 816 | 613 | /* |
| 817 | 614 | ** Remove n elements from g.argv beginning with the i-th element. |
| 818 | 615 | */ |
| 819 | -void remove_from_argv(int i, int n){ | |
| 616 | +static void remove_from_argv(int i, int n){ | |
| 820 | 617 | int j; |
| 821 | 618 | for(j=i+n; j<g.argc; i++, j++){ |
| 822 | 619 | g.argv[i] = g.argv[j]; |
| 823 | 620 | } |
| 824 | 621 | g.argc = i; |
| @@ -1503,10 +1300,61 @@ | ||
| 1503 | 1300 | |
| 1504 | 1301 | /* Return the result. |
| 1505 | 1302 | */ |
| 1506 | 1303 | cgi_reply(); |
| 1507 | 1304 | } |
| 1305 | + | |
| 1306 | +/* If the CGI program contains one or more lines of the form | |
| 1307 | +** | |
| 1308 | +** redirect: repository-filename http://hostname/path/%s | |
| 1309 | +** | |
| 1310 | +** then control jumps here. Search each repository for an artifact ID | |
| 1311 | +** that matches the "name" CGI parameter and for the first match, | |
| 1312 | +** redirect to the corresponding URL with the "name" CGI parameter | |
| 1313 | +** inserted. Paint an error page if no match is found. | |
| 1314 | +** | |
| 1315 | +** If there is a line of the form: | |
| 1316 | +** | |
| 1317 | +** redirect: * URL | |
| 1318 | +** | |
| 1319 | +** Then a redirect is made to URL if no match is found. Otherwise a | |
| 1320 | +** very primitive error message is returned. | |
| 1321 | +*/ | |
| 1322 | +static void redirect_web_page(int nRedirect, char **azRedirect){ | |
| 1323 | + int i; /* Loop counter */ | |
| 1324 | + const char *zNotFound = 0; /* Not found URL */ | |
| 1325 | + const char *zName = P("name"); | |
| 1326 | + set_base_url(0); | |
| 1327 | + if( zName==0 ){ | |
| 1328 | + zName = P("SCRIPT_NAME"); | |
| 1329 | + if( zName && zName[0]=='/' ) zName++; | |
| 1330 | + } | |
| 1331 | + if( zName && validate16(zName, strlen(zName)) ){ | |
| 1332 | + for(i=0; i<nRedirect; i++){ | |
| 1333 | + if( fossil_strcmp(azRedirect[i*2],"*")==0 ){ | |
| 1334 | + zNotFound = azRedirect[i*2+1]; | |
| 1335 | + continue; | |
| 1336 | + } | |
| 1337 | + db_open_repository(azRedirect[i*2]); | |
| 1338 | + if( db_exists("SELECT 1 FROM blob WHERE uuid GLOB '%s*'", zName) ){ | |
| 1339 | + cgi_redirectf(azRedirect[i*2+1], zName); | |
| 1340 | + return; | |
| 1341 | + } | |
| 1342 | + db_close(1); | |
| 1343 | + } | |
| 1344 | + } | |
| 1345 | + if( zNotFound ){ | |
| 1346 | + cgi_redirectf(zNotFound, zName); | |
| 1347 | + }else{ | |
| 1348 | + @ <html> | |
| 1349 | + @ <head><title>No Such Object</title></head> | |
| 1350 | + @ <body> | |
| 1351 | + @ <p>No such object: <b>%h(zName)</b></p> | |
| 1352 | + @ </body> | |
| 1353 | + cgi_reply(); | |
| 1354 | + } | |
| 1355 | +} | |
| 1508 | 1356 | |
| 1509 | 1357 | /* |
| 1510 | 1358 | ** COMMAND: cgi* |
| 1511 | 1359 | ** |
| 1512 | 1360 | ** Usage: %fossil ?cgi? SCRIPT |
| @@ -1603,61 +1451,10 @@ | ||
| 1603 | 1451 | }else{ |
| 1604 | 1452 | process_one_web_page(zNotFound, pFileGlob); |
| 1605 | 1453 | } |
| 1606 | 1454 | } |
| 1607 | 1455 | |
| 1608 | -/* If the CGI program contains one or more lines of the form | |
| 1609 | -** | |
| 1610 | -** redirect: repository-filename http://hostname/path/%s | |
| 1611 | -** | |
| 1612 | -** then control jumps here. Search each repository for an artifact ID | |
| 1613 | -** that matches the "name" CGI parameter and for the first match, | |
| 1614 | -** redirect to the corresponding URL with the "name" CGI parameter | |
| 1615 | -** inserted. Paint an error page if no match is found. | |
| 1616 | -** | |
| 1617 | -** If there is a line of the form: | |
| 1618 | -** | |
| 1619 | -** redirect: * URL | |
| 1620 | -** | |
| 1621 | -** Then a redirect is made to URL if no match is found. Otherwise a | |
| 1622 | -** very primitive error message is returned. | |
| 1623 | -*/ | |
| 1624 | -void redirect_web_page(int nRedirect, char **azRedirect){ | |
| 1625 | - int i; /* Loop counter */ | |
| 1626 | - const char *zNotFound = 0; /* Not found URL */ | |
| 1627 | - const char *zName = P("name"); | |
| 1628 | - set_base_url(0); | |
| 1629 | - if( zName==0 ){ | |
| 1630 | - zName = P("SCRIPT_NAME"); | |
| 1631 | - if( zName && zName[0]=='/' ) zName++; | |
| 1632 | - } | |
| 1633 | - if( zName && validate16(zName, strlen(zName)) ){ | |
| 1634 | - for(i=0; i<nRedirect; i++){ | |
| 1635 | - if( fossil_strcmp(azRedirect[i*2],"*")==0 ){ | |
| 1636 | - zNotFound = azRedirect[i*2+1]; | |
| 1637 | - continue; | |
| 1638 | - } | |
| 1639 | - db_open_repository(azRedirect[i*2]); | |
| 1640 | - if( db_exists("SELECT 1 FROM blob WHERE uuid GLOB '%s*'", zName) ){ | |
| 1641 | - cgi_redirectf(azRedirect[i*2+1], zName); | |
| 1642 | - return; | |
| 1643 | - } | |
| 1644 | - db_close(1); | |
| 1645 | - } | |
| 1646 | - } | |
| 1647 | - if( zNotFound ){ | |
| 1648 | - cgi_redirectf(zNotFound, zName); | |
| 1649 | - }else{ | |
| 1650 | - @ <html> | |
| 1651 | - @ <head><title>No Such Object</title></head> | |
| 1652 | - @ <body> | |
| 1653 | - @ <p>No such object: <b>%h(zName)</b></p> | |
| 1654 | - @ </body> | |
| 1655 | - cgi_reply(); | |
| 1656 | - } | |
| 1657 | -} | |
| 1658 | - | |
| 1659 | 1456 | /* |
| 1660 | 1457 | ** If g.argv[2] exists then it is either the name of a repository |
| 1661 | 1458 | ** that will be used by a server, or else it is a directory that |
| 1662 | 1459 | ** contains multiple repositories that can be served. If g.argv[2] |
| 1663 | 1460 | ** is a directory, the repositories it contains must be named |
| 1664 | 1461 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -334,11 +334,11 @@ | |
| 334 | |
| 335 | /* |
| 336 | ** atexit() handler which frees up "some" of the resources |
| 337 | ** used by fossil. |
| 338 | */ |
| 339 | void fossil_atexit(void) { |
| 340 | #ifdef FOSSIL_ENABLE_JSON |
| 341 | cson_value_free(g.json.gc.v); |
| 342 | memset(&g.json, 0, sizeof(g.json)); |
| 343 | #endif |
| 344 | free(g.zErrMsg); |
| @@ -455,10 +455,49 @@ | |
| 455 | } |
| 456 | return zNewArgv; |
| 457 | } |
| 458 | #endif |
| 459 | |
| 460 | |
| 461 | /* |
| 462 | ** This procedure runs first. |
| 463 | */ |
| 464 | #if defined(_WIN32) && !defined(BROKEN_MINGW_CMDLINE) |
| @@ -562,252 +601,10 @@ | |
| 562 | fossil_exit(0); |
| 563 | /*NOT_REACHED*/ |
| 564 | return 0; |
| 565 | } |
| 566 | |
| 567 | /* |
| 568 | ** The following variable becomes true while processing a fatal error |
| 569 | ** or a panic. If additional "recursive-fatal" errors occur while |
| 570 | ** shutting down, the recursive errors are silently ignored. |
| 571 | */ |
| 572 | static int mainInFatalError = 0; |
| 573 | |
| 574 | /* |
| 575 | ** Exit. Take care to close the database first. |
| 576 | */ |
| 577 | NORETURN void fossil_exit(int rc){ |
| 578 | db_close(1); |
| 579 | exit(rc); |
| 580 | } |
| 581 | |
| 582 | /* |
| 583 | ** Print an error message, rollback all databases, and quit. These |
| 584 | ** routines never return. |
| 585 | */ |
| 586 | NORETURN void fossil_panic(const char *zFormat, ...){ |
| 587 | char *z; |
| 588 | va_list ap; |
| 589 | int rc = 1; |
| 590 | static int once = 1; |
| 591 | mainInFatalError = 1; |
| 592 | va_start(ap, zFormat); |
| 593 | z = vmprintf(zFormat, ap); |
| 594 | va_end(ap); |
| 595 | #ifdef FOSSIL_ENABLE_JSON |
| 596 | if( g.json.isJsonMode ){ |
| 597 | json_err( 0, z, 1 ); |
| 598 | if( g.isHTTP ){ |
| 599 | rc = 0 /* avoid HTTP 500 */; |
| 600 | } |
| 601 | } |
| 602 | else |
| 603 | #endif |
| 604 | { |
| 605 | if( g.cgiOutput && once ){ |
| 606 | once = 0; |
| 607 | cgi_printf("<p class=\"generalError\">%h</p>", z); |
| 608 | cgi_reply(); |
| 609 | }else if( !g.fQuiet ){ |
| 610 | fossil_trace("%s: %s\n", g.argv[0], z); |
| 611 | } |
| 612 | } |
| 613 | free(z); |
| 614 | db_force_rollback(); |
| 615 | fossil_exit(rc); |
| 616 | } |
| 617 | |
| 618 | NORETURN void fossil_fatal(const char *zFormat, ...){ |
| 619 | char *z; |
| 620 | int rc = 1; |
| 621 | va_list ap; |
| 622 | mainInFatalError = 1; |
| 623 | va_start(ap, zFormat); |
| 624 | z = vmprintf(zFormat, ap); |
| 625 | va_end(ap); |
| 626 | #ifdef FOSSIL_ENABLE_JSON |
| 627 | if( g.json.isJsonMode ){ |
| 628 | json_err( g.json.resultCode, z, 1 ); |
| 629 | if( g.isHTTP ){ |
| 630 | rc = 0 /* avoid HTTP 500 */; |
| 631 | } |
| 632 | } |
| 633 | else |
| 634 | #endif |
| 635 | { |
| 636 | if( g.cgiOutput ){ |
| 637 | g.cgiOutput = 0; |
| 638 | cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); |
| 639 | cgi_reply(); |
| 640 | }else if( !g.fQuiet ){ |
| 641 | fossil_trace("%s: %s\n", g.argv[0], z); |
| 642 | } |
| 643 | } |
| 644 | free(z); |
| 645 | db_force_rollback(); |
| 646 | fossil_exit(rc); |
| 647 | } |
| 648 | |
| 649 | /* This routine works like fossil_fatal() except that if called |
| 650 | ** recursively, the recursive call is a no-op. |
| 651 | ** |
| 652 | ** Use this in places where an error might occur while doing |
| 653 | ** fatal error shutdown processing. Unlike fossil_panic() and |
| 654 | ** fossil_fatal() which never return, this routine might return if |
| 655 | ** the fatal error handing is already in process. The caller must |
| 656 | ** be prepared for this routine to return. |
| 657 | */ |
| 658 | void fossil_fatal_recursive(const char *zFormat, ...){ |
| 659 | char *z; |
| 660 | va_list ap; |
| 661 | int rc = 1; |
| 662 | if( mainInFatalError ) return; |
| 663 | mainInFatalError = 1; |
| 664 | va_start(ap, zFormat); |
| 665 | z = vmprintf(zFormat, ap); |
| 666 | va_end(ap); |
| 667 | #ifdef FOSSIL_ENABLE_JSON |
| 668 | if( g.json.isJsonMode ){ |
| 669 | json_err( g.json.resultCode, z, 1 ); |
| 670 | if( g.isHTTP ){ |
| 671 | rc = 0 /* avoid HTTP 500 */; |
| 672 | } |
| 673 | } else |
| 674 | #endif |
| 675 | { |
| 676 | if( g.cgiOutput ){ |
| 677 | g.cgiOutput = 0; |
| 678 | cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); |
| 679 | cgi_reply(); |
| 680 | }else{ |
| 681 | fossil_trace("%s: %s\n", g.argv[0], z); |
| 682 | } |
| 683 | } |
| 684 | db_force_rollback(); |
| 685 | fossil_exit(rc); |
| 686 | } |
| 687 | |
| 688 | |
| 689 | /* Print a warning message */ |
| 690 | void fossil_warning(const char *zFormat, ...){ |
| 691 | char *z; |
| 692 | va_list ap; |
| 693 | va_start(ap, zFormat); |
| 694 | z = vmprintf(zFormat, ap); |
| 695 | va_end(ap); |
| 696 | #ifdef FOSSIL_ENABLE_JSON |
| 697 | if(g.json.isJsonMode){ |
| 698 | json_warn( FSL_JSON_W_UNKNOWN, z ); |
| 699 | }else |
| 700 | #endif |
| 701 | { |
| 702 | if( g.cgiOutput ){ |
| 703 | cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); |
| 704 | }else{ |
| 705 | fossil_trace("%s: %s\n", g.argv[0], z); |
| 706 | } |
| 707 | } |
| 708 | free(z); |
| 709 | } |
| 710 | |
| 711 | /* |
| 712 | ** Malloc and free routines that cannot fail |
| 713 | */ |
| 714 | void *fossil_malloc(size_t n){ |
| 715 | void *p = malloc(n==0 ? 1 : n); |
| 716 | if( p==0 ) fossil_panic("out of memory"); |
| 717 | return p; |
| 718 | } |
| 719 | void fossil_free(void *p){ |
| 720 | free(p); |
| 721 | } |
| 722 | void *fossil_realloc(void *p, size_t n){ |
| 723 | p = realloc(p, n); |
| 724 | if( p==0 ) fossil_panic("out of memory"); |
| 725 | return p; |
| 726 | } |
| 727 | |
| 728 | /* |
| 729 | ** This function implements a cross-platform "system()" interface. |
| 730 | */ |
| 731 | int fossil_system(const char *zOrigCmd){ |
| 732 | int rc; |
| 733 | #if defined(_WIN32) |
| 734 | /* On windows, we have to put double-quotes around the entire command. |
| 735 | ** Who knows why - this is just the way windows works. |
| 736 | */ |
| 737 | char *zNewCmd = mprintf("\"%s\"", zOrigCmd); |
| 738 | WCHAR *zUnicode = fossil_utf8_to_unicode(zNewCmd); |
| 739 | if( g.fSystemTrace ) { |
| 740 | fossil_trace("SYSTEM: %s\n", zNewCmd); |
| 741 | } |
| 742 | rc = _wsystem(zUnicode); |
| 743 | fossil_unicode_free(zUnicode); |
| 744 | free(zNewCmd); |
| 745 | #else |
| 746 | /* On unix, evaluate the command directly. |
| 747 | */ |
| 748 | if( g.fSystemTrace ) fprintf(stderr, "SYSTEM: %s\n", zOrigCmd); |
| 749 | rc = system(zOrigCmd); |
| 750 | #endif |
| 751 | return rc; |
| 752 | } |
| 753 | |
| 754 | /* |
| 755 | ** Turn off any NL to CRNL translation on the stream given as an |
| 756 | ** argument. This is a no-op on unix but is necessary on windows. |
| 757 | */ |
| 758 | void fossil_binary_mode(FILE *p){ |
| 759 | #if defined(_WIN32) |
| 760 | _setmode(_fileno(p), _O_BINARY); |
| 761 | #endif |
| 762 | #ifdef __EMX__ /* OS/2 */ |
| 763 | setmode(fileno(p), O_BINARY); |
| 764 | #endif |
| 765 | } |
| 766 | |
| 767 | |
| 768 | |
| 769 | /* |
| 770 | ** Return a name for an SQLite error code |
| 771 | */ |
| 772 | static const char *sqlite_error_code_name(int iCode){ |
| 773 | static char zCode[30]; |
| 774 | switch( iCode & 0xff ){ |
| 775 | case SQLITE_OK: return "SQLITE_OK"; |
| 776 | case SQLITE_ERROR: return "SQLITE_ERROR"; |
| 777 | case SQLITE_PERM: return "SQLITE_PERM"; |
| 778 | case SQLITE_ABORT: return "SQLITE_ABORT"; |
| 779 | case SQLITE_BUSY: return "SQLITE_BUSY"; |
| 780 | case SQLITE_NOMEM: return "SQLITE_NOMEM"; |
| 781 | case SQLITE_READONLY: return "SQLITE_READONLY"; |
| 782 | case SQLITE_INTERRUPT: return "SQLITE_INTERRUPT"; |
| 783 | case SQLITE_IOERR: return "SQLITE_IOERR"; |
| 784 | case SQLITE_CORRUPT: return "SQLITE_CORRUPT"; |
| 785 | case SQLITE_FULL: return "SQLITE_FULL"; |
| 786 | case SQLITE_CANTOPEN: return "SQLITE_CANTOPEN"; |
| 787 | case SQLITE_PROTOCOL: return "SQLITE_PROTOCOL"; |
| 788 | case SQLITE_EMPTY: return "SQLITE_EMPTY"; |
| 789 | case SQLITE_SCHEMA: return "SQLITE_SCHEMA"; |
| 790 | case SQLITE_CONSTRAINT: return "SQLITE_CONSTRAINT"; |
| 791 | case SQLITE_MISMATCH: return "SQLITE_MISMATCH"; |
| 792 | case SQLITE_MISUSE: return "SQLITE_MISUSE"; |
| 793 | case SQLITE_NOLFS: return "SQLITE_NOLFS"; |
| 794 | case SQLITE_FORMAT: return "SQLITE_FORMAT"; |
| 795 | case SQLITE_RANGE: return "SQLITE_RANGE"; |
| 796 | case SQLITE_NOTADB: return "SQLITE_NOTADB"; |
| 797 | default: { |
| 798 | sqlite3_snprintf(sizeof(zCode),zCode,"error code %d",iCode); |
| 799 | } |
| 800 | } |
| 801 | return zCode; |
| 802 | } |
| 803 | |
| 804 | /* Error logs from SQLite */ |
| 805 | void fossil_sqlite_log(void *notUsed, int iCode, const char *zErrmsg){ |
| 806 | fossil_warning("%s: %s", sqlite_error_code_name(iCode), zErrmsg); |
| 807 | } |
| 808 | |
| 809 | /* |
| 810 | ** Print a usage comment and quit |
| 811 | */ |
| 812 | void usage(const char *zFormat){ |
| 813 | fossil_fatal("Usage: %s %s %s\n", g.argv[0], g.argv[1], zFormat); |
| @@ -814,11 +611,11 @@ | |
| 814 | } |
| 815 | |
| 816 | /* |
| 817 | ** Remove n elements from g.argv beginning with the i-th element. |
| 818 | */ |
| 819 | void remove_from_argv(int i, int n){ |
| 820 | int j; |
| 821 | for(j=i+n; j<g.argc; i++, j++){ |
| 822 | g.argv[i] = g.argv[j]; |
| 823 | } |
| 824 | g.argc = i; |
| @@ -1503,10 +1300,61 @@ | |
| 1503 | |
| 1504 | /* Return the result. |
| 1505 | */ |
| 1506 | cgi_reply(); |
| 1507 | } |
| 1508 | |
| 1509 | /* |
| 1510 | ** COMMAND: cgi* |
| 1511 | ** |
| 1512 | ** Usage: %fossil ?cgi? SCRIPT |
| @@ -1603,61 +1451,10 @@ | |
| 1603 | }else{ |
| 1604 | process_one_web_page(zNotFound, pFileGlob); |
| 1605 | } |
| 1606 | } |
| 1607 | |
| 1608 | /* If the CGI program contains one or more lines of the form |
| 1609 | ** |
| 1610 | ** redirect: repository-filename http://hostname/path/%s |
| 1611 | ** |
| 1612 | ** then control jumps here. Search each repository for an artifact ID |
| 1613 | ** that matches the "name" CGI parameter and for the first match, |
| 1614 | ** redirect to the corresponding URL with the "name" CGI parameter |
| 1615 | ** inserted. Paint an error page if no match is found. |
| 1616 | ** |
| 1617 | ** If there is a line of the form: |
| 1618 | ** |
| 1619 | ** redirect: * URL |
| 1620 | ** |
| 1621 | ** Then a redirect is made to URL if no match is found. Otherwise a |
| 1622 | ** very primitive error message is returned. |
| 1623 | */ |
| 1624 | void redirect_web_page(int nRedirect, char **azRedirect){ |
| 1625 | int i; /* Loop counter */ |
| 1626 | const char *zNotFound = 0; /* Not found URL */ |
| 1627 | const char *zName = P("name"); |
| 1628 | set_base_url(0); |
| 1629 | if( zName==0 ){ |
| 1630 | zName = P("SCRIPT_NAME"); |
| 1631 | if( zName && zName[0]=='/' ) zName++; |
| 1632 | } |
| 1633 | if( zName && validate16(zName, strlen(zName)) ){ |
| 1634 | for(i=0; i<nRedirect; i++){ |
| 1635 | if( fossil_strcmp(azRedirect[i*2],"*")==0 ){ |
| 1636 | zNotFound = azRedirect[i*2+1]; |
| 1637 | continue; |
| 1638 | } |
| 1639 | db_open_repository(azRedirect[i*2]); |
| 1640 | if( db_exists("SELECT 1 FROM blob WHERE uuid GLOB '%s*'", zName) ){ |
| 1641 | cgi_redirectf(azRedirect[i*2+1], zName); |
| 1642 | return; |
| 1643 | } |
| 1644 | db_close(1); |
| 1645 | } |
| 1646 | } |
| 1647 | if( zNotFound ){ |
| 1648 | cgi_redirectf(zNotFound, zName); |
| 1649 | }else{ |
| 1650 | @ <html> |
| 1651 | @ <head><title>No Such Object</title></head> |
| 1652 | @ <body> |
| 1653 | @ <p>No such object: <b>%h(zName)</b></p> |
| 1654 | @ </body> |
| 1655 | cgi_reply(); |
| 1656 | } |
| 1657 | } |
| 1658 | |
| 1659 | /* |
| 1660 | ** If g.argv[2] exists then it is either the name of a repository |
| 1661 | ** that will be used by a server, or else it is a directory that |
| 1662 | ** contains multiple repositories that can be served. If g.argv[2] |
| 1663 | ** is a directory, the repositories it contains must be named |
| 1664 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -334,11 +334,11 @@ | |
| 334 | |
| 335 | /* |
| 336 | ** atexit() handler which frees up "some" of the resources |
| 337 | ** used by fossil. |
| 338 | */ |
| 339 | static void fossil_atexit(void) { |
| 340 | #ifdef FOSSIL_ENABLE_JSON |
| 341 | cson_value_free(g.json.gc.v); |
| 342 | memset(&g.json, 0, sizeof(g.json)); |
| 343 | #endif |
| 344 | free(g.zErrMsg); |
| @@ -455,10 +455,49 @@ | |
| 455 | } |
| 456 | return zNewArgv; |
| 457 | } |
| 458 | #endif |
| 459 | |
| 460 | /* |
| 461 | ** Return a name for an SQLite error code |
| 462 | */ |
| 463 | static const char *sqlite_error_code_name(int iCode){ |
| 464 | static char zCode[30]; |
| 465 | switch( iCode & 0xff ){ |
| 466 | case SQLITE_OK: return "SQLITE_OK"; |
| 467 | case SQLITE_ERROR: return "SQLITE_ERROR"; |
| 468 | case SQLITE_PERM: return "SQLITE_PERM"; |
| 469 | case SQLITE_ABORT: return "SQLITE_ABORT"; |
| 470 | case SQLITE_BUSY: return "SQLITE_BUSY"; |
| 471 | case SQLITE_NOMEM: return "SQLITE_NOMEM"; |
| 472 | case SQLITE_READONLY: return "SQLITE_READONLY"; |
| 473 | case SQLITE_INTERRUPT: return "SQLITE_INTERRUPT"; |
| 474 | case SQLITE_IOERR: return "SQLITE_IOERR"; |
| 475 | case SQLITE_CORRUPT: return "SQLITE_CORRUPT"; |
| 476 | case SQLITE_FULL: return "SQLITE_FULL"; |
| 477 | case SQLITE_CANTOPEN: return "SQLITE_CANTOPEN"; |
| 478 | case SQLITE_PROTOCOL: return "SQLITE_PROTOCOL"; |
| 479 | case SQLITE_EMPTY: return "SQLITE_EMPTY"; |
| 480 | case SQLITE_SCHEMA: return "SQLITE_SCHEMA"; |
| 481 | case SQLITE_CONSTRAINT: return "SQLITE_CONSTRAINT"; |
| 482 | case SQLITE_MISMATCH: return "SQLITE_MISMATCH"; |
| 483 | case SQLITE_MISUSE: return "SQLITE_MISUSE"; |
| 484 | case SQLITE_NOLFS: return "SQLITE_NOLFS"; |
| 485 | case SQLITE_FORMAT: return "SQLITE_FORMAT"; |
| 486 | case SQLITE_RANGE: return "SQLITE_RANGE"; |
| 487 | case SQLITE_NOTADB: return "SQLITE_NOTADB"; |
| 488 | default: { |
| 489 | sqlite3_snprintf(sizeof(zCode),zCode,"error code %d",iCode); |
| 490 | } |
| 491 | } |
| 492 | return zCode; |
| 493 | } |
| 494 | |
| 495 | /* Error logs from SQLite */ |
| 496 | static void fossil_sqlite_log(void *notUsed, int iCode, const char *zErrmsg){ |
| 497 | fossil_warning("%s: %s", sqlite_error_code_name(iCode), zErrmsg); |
| 498 | } |
| 499 | |
| 500 | /* |
| 501 | ** This procedure runs first. |
| 502 | */ |
| 503 | #if defined(_WIN32) && !defined(BROKEN_MINGW_CMDLINE) |
| @@ -562,252 +601,10 @@ | |
| 601 | fossil_exit(0); |
| 602 | /*NOT_REACHED*/ |
| 603 | return 0; |
| 604 | } |
| 605 | |
| 606 | /* |
| 607 | ** Print a usage comment and quit |
| 608 | */ |
| 609 | void usage(const char *zFormat){ |
| 610 | fossil_fatal("Usage: %s %s %s\n", g.argv[0], g.argv[1], zFormat); |
| @@ -814,11 +611,11 @@ | |
| 611 | } |
| 612 | |
| 613 | /* |
| 614 | ** Remove n elements from g.argv beginning with the i-th element. |
| 615 | */ |
| 616 | static void remove_from_argv(int i, int n){ |
| 617 | int j; |
| 618 | for(j=i+n; j<g.argc; i++, j++){ |
| 619 | g.argv[i] = g.argv[j]; |
| 620 | } |
| 621 | g.argc = i; |
| @@ -1503,10 +1300,61 @@ | |
| 1300 | |
| 1301 | /* Return the result. |
| 1302 | */ |
| 1303 | cgi_reply(); |
| 1304 | } |
| 1305 | |
| 1306 | /* If the CGI program contains one or more lines of the form |
| 1307 | ** |
| 1308 | ** redirect: repository-filename http://hostname/path/%s |
| 1309 | ** |
| 1310 | ** then control jumps here. Search each repository for an artifact ID |
| 1311 | ** that matches the "name" CGI parameter and for the first match, |
| 1312 | ** redirect to the corresponding URL with the "name" CGI parameter |
| 1313 | ** inserted. Paint an error page if no match is found. |
| 1314 | ** |
| 1315 | ** If there is a line of the form: |
| 1316 | ** |
| 1317 | ** redirect: * URL |
| 1318 | ** |
| 1319 | ** Then a redirect is made to URL if no match is found. Otherwise a |
| 1320 | ** very primitive error message is returned. |
| 1321 | */ |
| 1322 | static void redirect_web_page(int nRedirect, char **azRedirect){ |
| 1323 | int i; /* Loop counter */ |
| 1324 | const char *zNotFound = 0; /* Not found URL */ |
| 1325 | const char *zName = P("name"); |
| 1326 | set_base_url(0); |
| 1327 | if( zName==0 ){ |
| 1328 | zName = P("SCRIPT_NAME"); |
| 1329 | if( zName && zName[0]=='/' ) zName++; |
| 1330 | } |
| 1331 | if( zName && validate16(zName, strlen(zName)) ){ |
| 1332 | for(i=0; i<nRedirect; i++){ |
| 1333 | if( fossil_strcmp(azRedirect[i*2],"*")==0 ){ |
| 1334 | zNotFound = azRedirect[i*2+1]; |
| 1335 | continue; |
| 1336 | } |
| 1337 | db_open_repository(azRedirect[i*2]); |
| 1338 | if( db_exists("SELECT 1 FROM blob WHERE uuid GLOB '%s*'", zName) ){ |
| 1339 | cgi_redirectf(azRedirect[i*2+1], zName); |
| 1340 | return; |
| 1341 | } |
| 1342 | db_close(1); |
| 1343 | } |
| 1344 | } |
| 1345 | if( zNotFound ){ |
| 1346 | cgi_redirectf(zNotFound, zName); |
| 1347 | }else{ |
| 1348 | @ <html> |
| 1349 | @ <head><title>No Such Object</title></head> |
| 1350 | @ <body> |
| 1351 | @ <p>No such object: <b>%h(zName)</b></p> |
| 1352 | @ </body> |
| 1353 | cgi_reply(); |
| 1354 | } |
| 1355 | } |
| 1356 | |
| 1357 | /* |
| 1358 | ** COMMAND: cgi* |
| 1359 | ** |
| 1360 | ** Usage: %fossil ?cgi? SCRIPT |
| @@ -1603,61 +1451,10 @@ | |
| 1451 | }else{ |
| 1452 | process_one_web_page(zNotFound, pFileGlob); |
| 1453 | } |
| 1454 | } |
| 1455 | |
| 1456 | /* |
| 1457 | ** If g.argv[2] exists then it is either the name of a repository |
| 1458 | ** that will be used by a server, or else it is a directory that |
| 1459 | ** contains multiple repositories that can be served. If g.argv[2] |
| 1460 | ** is a directory, the repositories it contains must be named |
| 1461 |
+11
-1
| --- src/main.mk | ||
| +++ src/main.mk | ||
| @@ -107,10 +107,11 @@ | ||
| 107 | 107 | $(SRCDIR)/unicode.c \ |
| 108 | 108 | $(SRCDIR)/update.c \ |
| 109 | 109 | $(SRCDIR)/url.c \ |
| 110 | 110 | $(SRCDIR)/user.c \ |
| 111 | 111 | $(SRCDIR)/utf8.c \ |
| 112 | + $(SRCDIR)/util.c \ | |
| 112 | 113 | $(SRCDIR)/verify.c \ |
| 113 | 114 | $(SRCDIR)/vfile.c \ |
| 114 | 115 | $(SRCDIR)/wiki.c \ |
| 115 | 116 | $(SRCDIR)/wikiformat.c \ |
| 116 | 117 | $(SRCDIR)/winhttp.c \ |
| @@ -213,10 +214,11 @@ | ||
| 213 | 214 | $(OBJDIR)/unicode_.c \ |
| 214 | 215 | $(OBJDIR)/update_.c \ |
| 215 | 216 | $(OBJDIR)/url_.c \ |
| 216 | 217 | $(OBJDIR)/user_.c \ |
| 217 | 218 | $(OBJDIR)/utf8_.c \ |
| 219 | + $(OBJDIR)/util_.c \ | |
| 218 | 220 | $(OBJDIR)/verify_.c \ |
| 219 | 221 | $(OBJDIR)/vfile_.c \ |
| 220 | 222 | $(OBJDIR)/wiki_.c \ |
| 221 | 223 | $(OBJDIR)/wikiformat_.c \ |
| 222 | 224 | $(OBJDIR)/winhttp_.c \ |
| @@ -319,10 +321,11 @@ | ||
| 319 | 321 | $(OBJDIR)/unicode.o \ |
| 320 | 322 | $(OBJDIR)/update.o \ |
| 321 | 323 | $(OBJDIR)/url.o \ |
| 322 | 324 | $(OBJDIR)/user.o \ |
| 323 | 325 | $(OBJDIR)/utf8.o \ |
| 326 | + $(OBJDIR)/util.o \ | |
| 324 | 327 | $(OBJDIR)/verify.o \ |
| 325 | 328 | $(OBJDIR)/vfile.o \ |
| 326 | 329 | $(OBJDIR)/wiki.o \ |
| 327 | 330 | $(OBJDIR)/wikiformat.o \ |
| 328 | 331 | $(OBJDIR)/winhttp.o \ |
| @@ -396,11 +399,11 @@ | ||
| 396 | 399 | |
| 397 | 400 | |
| 398 | 401 | $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex |
| 399 | 402 | $(OBJDIR)/mkindex $(TRANS_SRC) >$@ |
| 400 | 403 | $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h |
| 401 | - $(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)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.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)/regexp_.c:$(OBJDIR)/regexp.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)/unicode_.c:$(OBJDIR)/unicode.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 | |
| 404 | + $(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)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.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)/regexp_.c:$(OBJDIR)/regexp.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)/unicode_.c:$(OBJDIR)/unicode.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)/util_.c:$(OBJDIR)/util.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 | |
| 402 | 405 | touch $(OBJDIR)/headers |
| 403 | 406 | $(OBJDIR)/headers: Makefile |
| 404 | 407 | $(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 |
| 405 | 408 | Makefile: |
| 406 | 409 | $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate |
| @@ -1066,10 +1069,17 @@ | ||
| 1066 | 1069 | |
| 1067 | 1070 | $(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h |
| 1068 | 1071 | $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c |
| 1069 | 1072 | |
| 1070 | 1073 | $(OBJDIR)/utf8.h: $(OBJDIR)/headers |
| 1074 | +$(OBJDIR)/util_.c: $(SRCDIR)/util.c $(OBJDIR)/translate | |
| 1075 | + $(OBJDIR)/translate $(SRCDIR)/util.c >$(OBJDIR)/util_.c | |
| 1076 | + | |
| 1077 | +$(OBJDIR)/util.o: $(OBJDIR)/util_.c $(OBJDIR)/util.h $(SRCDIR)/config.h | |
| 1078 | + $(XTCC) -o $(OBJDIR)/util.o -c $(OBJDIR)/util_.c | |
| 1079 | + | |
| 1080 | +$(OBJDIR)/util.h: $(OBJDIR)/headers | |
| 1071 | 1081 | $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate |
| 1072 | 1082 | $(OBJDIR)/translate $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c |
| 1073 | 1083 | |
| 1074 | 1084 | $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h |
| 1075 | 1085 | $(XTCC) -o $(OBJDIR)/verify.o -c $(OBJDIR)/verify_.c |
| 1076 | 1086 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -107,10 +107,11 @@ | |
| 107 | $(SRCDIR)/unicode.c \ |
| 108 | $(SRCDIR)/update.c \ |
| 109 | $(SRCDIR)/url.c \ |
| 110 | $(SRCDIR)/user.c \ |
| 111 | $(SRCDIR)/utf8.c \ |
| 112 | $(SRCDIR)/verify.c \ |
| 113 | $(SRCDIR)/vfile.c \ |
| 114 | $(SRCDIR)/wiki.c \ |
| 115 | $(SRCDIR)/wikiformat.c \ |
| 116 | $(SRCDIR)/winhttp.c \ |
| @@ -213,10 +214,11 @@ | |
| 213 | $(OBJDIR)/unicode_.c \ |
| 214 | $(OBJDIR)/update_.c \ |
| 215 | $(OBJDIR)/url_.c \ |
| 216 | $(OBJDIR)/user_.c \ |
| 217 | $(OBJDIR)/utf8_.c \ |
| 218 | $(OBJDIR)/verify_.c \ |
| 219 | $(OBJDIR)/vfile_.c \ |
| 220 | $(OBJDIR)/wiki_.c \ |
| 221 | $(OBJDIR)/wikiformat_.c \ |
| 222 | $(OBJDIR)/winhttp_.c \ |
| @@ -319,10 +321,11 @@ | |
| 319 | $(OBJDIR)/unicode.o \ |
| 320 | $(OBJDIR)/update.o \ |
| 321 | $(OBJDIR)/url.o \ |
| 322 | $(OBJDIR)/user.o \ |
| 323 | $(OBJDIR)/utf8.o \ |
| 324 | $(OBJDIR)/verify.o \ |
| 325 | $(OBJDIR)/vfile.o \ |
| 326 | $(OBJDIR)/wiki.o \ |
| 327 | $(OBJDIR)/wikiformat.o \ |
| 328 | $(OBJDIR)/winhttp.o \ |
| @@ -396,11 +399,11 @@ | |
| 396 | |
| 397 | |
| 398 | $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex |
| 399 | $(OBJDIR)/mkindex $(TRANS_SRC) >$@ |
| 400 | $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h |
| 401 | $(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)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.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)/regexp_.c:$(OBJDIR)/regexp.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)/unicode_.c:$(OBJDIR)/unicode.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 |
| 402 | touch $(OBJDIR)/headers |
| 403 | $(OBJDIR)/headers: Makefile |
| 404 | $(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 |
| 405 | Makefile: |
| 406 | $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate |
| @@ -1066,10 +1069,17 @@ | |
| 1066 | |
| 1067 | $(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h |
| 1068 | $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c |
| 1069 | |
| 1070 | $(OBJDIR)/utf8.h: $(OBJDIR)/headers |
| 1071 | $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate |
| 1072 | $(OBJDIR)/translate $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c |
| 1073 | |
| 1074 | $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h |
| 1075 | $(XTCC) -o $(OBJDIR)/verify.o -c $(OBJDIR)/verify_.c |
| 1076 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -107,10 +107,11 @@ | |
| 107 | $(SRCDIR)/unicode.c \ |
| 108 | $(SRCDIR)/update.c \ |
| 109 | $(SRCDIR)/url.c \ |
| 110 | $(SRCDIR)/user.c \ |
| 111 | $(SRCDIR)/utf8.c \ |
| 112 | $(SRCDIR)/util.c \ |
| 113 | $(SRCDIR)/verify.c \ |
| 114 | $(SRCDIR)/vfile.c \ |
| 115 | $(SRCDIR)/wiki.c \ |
| 116 | $(SRCDIR)/wikiformat.c \ |
| 117 | $(SRCDIR)/winhttp.c \ |
| @@ -213,10 +214,11 @@ | |
| 214 | $(OBJDIR)/unicode_.c \ |
| 215 | $(OBJDIR)/update_.c \ |
| 216 | $(OBJDIR)/url_.c \ |
| 217 | $(OBJDIR)/user_.c \ |
| 218 | $(OBJDIR)/utf8_.c \ |
| 219 | $(OBJDIR)/util_.c \ |
| 220 | $(OBJDIR)/verify_.c \ |
| 221 | $(OBJDIR)/vfile_.c \ |
| 222 | $(OBJDIR)/wiki_.c \ |
| 223 | $(OBJDIR)/wikiformat_.c \ |
| 224 | $(OBJDIR)/winhttp_.c \ |
| @@ -319,10 +321,11 @@ | |
| 321 | $(OBJDIR)/unicode.o \ |
| 322 | $(OBJDIR)/update.o \ |
| 323 | $(OBJDIR)/url.o \ |
| 324 | $(OBJDIR)/user.o \ |
| 325 | $(OBJDIR)/utf8.o \ |
| 326 | $(OBJDIR)/util.o \ |
| 327 | $(OBJDIR)/verify.o \ |
| 328 | $(OBJDIR)/vfile.o \ |
| 329 | $(OBJDIR)/wiki.o \ |
| 330 | $(OBJDIR)/wikiformat.o \ |
| 331 | $(OBJDIR)/winhttp.o \ |
| @@ -396,11 +399,11 @@ | |
| 399 | |
| 400 | |
| 401 | $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex |
| 402 | $(OBJDIR)/mkindex $(TRANS_SRC) >$@ |
| 403 | $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h |
| 404 | $(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)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.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)/regexp_.c:$(OBJDIR)/regexp.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)/unicode_.c:$(OBJDIR)/unicode.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)/util_.c:$(OBJDIR)/util.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 |
| 405 | touch $(OBJDIR)/headers |
| 406 | $(OBJDIR)/headers: Makefile |
| 407 | $(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 |
| 408 | Makefile: |
| 409 | $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate |
| @@ -1066,10 +1069,17 @@ | |
| 1069 | |
| 1070 | $(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h |
| 1071 | $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c |
| 1072 | |
| 1073 | $(OBJDIR)/utf8.h: $(OBJDIR)/headers |
| 1074 | $(OBJDIR)/util_.c: $(SRCDIR)/util.c $(OBJDIR)/translate |
| 1075 | $(OBJDIR)/translate $(SRCDIR)/util.c >$(OBJDIR)/util_.c |
| 1076 | |
| 1077 | $(OBJDIR)/util.o: $(OBJDIR)/util_.c $(OBJDIR)/util.h $(SRCDIR)/config.h |
| 1078 | $(XTCC) -o $(OBJDIR)/util.o -c $(OBJDIR)/util_.c |
| 1079 | |
| 1080 | $(OBJDIR)/util.h: $(OBJDIR)/headers |
| 1081 | $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate |
| 1082 | $(OBJDIR)/translate $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c |
| 1083 | |
| 1084 | $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h |
| 1085 | $(XTCC) -o $(OBJDIR)/verify.o -c $(OBJDIR)/verify_.c |
| 1086 |
+1
| --- src/makemake.tcl | ||
| +++ src/makemake.tcl | ||
| @@ -110,10 +110,11 @@ | ||
| 110 | 110 | unicode |
| 111 | 111 | update |
| 112 | 112 | url |
| 113 | 113 | user |
| 114 | 114 | utf8 |
| 115 | + util | |
| 115 | 116 | verify |
| 116 | 117 | vfile |
| 117 | 118 | wiki |
| 118 | 119 | wikiformat |
| 119 | 120 | winhttp |
| 120 | 121 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -110,10 +110,11 @@ | |
| 110 | unicode |
| 111 | update |
| 112 | url |
| 113 | user |
| 114 | utf8 |
| 115 | verify |
| 116 | vfile |
| 117 | wiki |
| 118 | wikiformat |
| 119 | winhttp |
| 120 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -110,10 +110,11 @@ | |
| 110 | unicode |
| 111 | update |
| 112 | url |
| 113 | user |
| 114 | utf8 |
| 115 | util |
| 116 | verify |
| 117 | vfile |
| 118 | wiki |
| 119 | wikiformat |
| 120 | winhttp |
| 121 |
+150
-65
| --- src/printf.c | ||
| +++ src/printf.c | ||
| @@ -13,11 +13,12 @@ | ||
| 13 | 13 | ** [email protected] |
| 14 | 14 | ** http://www.hwaci.com/drh/ |
| 15 | 15 | ** |
| 16 | 16 | ******************************************************************************* |
| 17 | 17 | ** |
| 18 | -** An implementation of printf() with extra conversion fields. | |
| 18 | +** This file contains implementions of routines for formatting output | |
| 19 | +** (ex: mprintf()) and for output to the console. | |
| 19 | 20 | */ |
| 20 | 21 | #include "config.h" |
| 21 | 22 | #include "printf.h" |
| 22 | 23 | |
| 23 | 24 | /* |
| @@ -888,70 +889,154 @@ | ||
| 888 | 889 | fossil_puts(blob_str(&b), 1); |
| 889 | 890 | blob_reset(&b); |
| 890 | 891 | va_end(ap); |
| 891 | 892 | } |
| 892 | 893 | |
| 893 | -/* | |
| 894 | -** Like strcmp() except that it accepts NULL pointers. NULL sorts before | |
| 895 | -** all non-NULL string pointers. Also, this strcmp() is a binary comparison | |
| 896 | -** that does not consider locale. | |
| 897 | -*/ | |
| 898 | -int fossil_strcmp(const char *zA, const char *zB){ | |
| 899 | - if( zA==0 ){ | |
| 900 | - if( zB==0 ) return 0; | |
| 901 | - return -1; | |
| 902 | - }else if( zB==0 ){ | |
| 903 | - return +1; | |
| 904 | - }else{ | |
| 905 | - int a, b; | |
| 906 | - do{ | |
| 907 | - a = *zA++; | |
| 908 | - b = *zB++; | |
| 909 | - }while( a==b && a!=0 ); | |
| 910 | - return ((unsigned char)a) - (unsigned char)b; | |
| 911 | - } | |
| 912 | -} | |
| 913 | -int fossil_strncmp(const char *zA, const char *zB, int nByte){ | |
| 914 | - if( zA==0 ){ | |
| 915 | - if( zB==0 ) return 0; | |
| 916 | - return -1; | |
| 917 | - }else if( zB==0 ){ | |
| 918 | - return +1; | |
| 919 | - }else if( nByte>0 ){ | |
| 920 | - int a, b; | |
| 921 | - do{ | |
| 922 | - a = *zA++; | |
| 923 | - b = *zB++; | |
| 924 | - }while( a==b && a!=0 && (--nByte)>0 ); | |
| 925 | - return ((unsigned char)a) - (unsigned char)b; | |
| 926 | - }else{ | |
| 927 | - return 0; | |
| 928 | - } | |
| 929 | -} | |
| 930 | - | |
| 931 | -/* | |
| 932 | -** Case insensitive string comparison. | |
| 933 | -*/ | |
| 934 | -int fossil_strnicmp(const char *zA, const char *zB, int nByte){ | |
| 935 | - if( zA==0 ){ | |
| 936 | - if( zB==0 ) return 0; | |
| 937 | - return -1; | |
| 938 | - }else if( zB==0 ){ | |
| 939 | - return +1; | |
| 940 | - } | |
| 941 | - if( nByte<0 ) nByte = strlen(zB); | |
| 942 | - return sqlite3_strnicmp(zA, zB, nByte); | |
| 943 | -} | |
| 944 | -int fossil_stricmp(const char *zA, const char *zB){ | |
| 945 | - int nByte; | |
| 946 | - int rc; | |
| 947 | - if( zA==0 ){ | |
| 948 | - if( zB==0 ) return 0; | |
| 949 | - return -1; | |
| 950 | - }else if( zB==0 ){ | |
| 951 | - return +1; | |
| 952 | - } | |
| 953 | - nByte = strlen(zB); | |
| 954 | - rc = sqlite3_strnicmp(zA, zB, nByte); | |
| 955 | - if( rc==0 && zA[nByte] ) rc = 1; | |
| 956 | - return rc; | |
| 894 | + | |
| 895 | +/* | |
| 896 | +** The following variable becomes true while processing a fatal error | |
| 897 | +** or a panic. If additional "recursive-fatal" errors occur while | |
| 898 | +** shutting down, the recursive errors are silently ignored. | |
| 899 | +*/ | |
| 900 | +static int mainInFatalError = 0; | |
| 901 | + | |
| 902 | +/* | |
| 903 | +** Print an error message, rollback all databases, and quit. These | |
| 904 | +** routines never return. | |
| 905 | +*/ | |
| 906 | +NORETURN void fossil_panic(const char *zFormat, ...){ | |
| 907 | + char *z; | |
| 908 | + va_list ap; | |
| 909 | + int rc = 1; | |
| 910 | + static int once = 1; | |
| 911 | + mainInFatalError = 1; | |
| 912 | + va_start(ap, zFormat); | |
| 913 | + z = vmprintf(zFormat, ap); | |
| 914 | + va_end(ap); | |
| 915 | +#ifdef FOSSIL_ENABLE_JSON | |
| 916 | + if( g.json.isJsonMode ){ | |
| 917 | + json_err( 0, z, 1 ); | |
| 918 | + if( g.isHTTP ){ | |
| 919 | + rc = 0 /* avoid HTTP 500 */; | |
| 920 | + } | |
| 921 | + } | |
| 922 | + else | |
| 923 | +#endif | |
| 924 | + { | |
| 925 | + if( g.cgiOutput && once ){ | |
| 926 | + once = 0; | |
| 927 | + cgi_printf("<p class=\"generalError\">%h</p>", z); | |
| 928 | + cgi_reply(); | |
| 929 | + }else if( !g.fQuiet ){ | |
| 930 | + fossil_trace("%s: %s\n", g.argv[0], z); | |
| 931 | + } | |
| 932 | + } | |
| 933 | + free(z); | |
| 934 | + db_force_rollback(); | |
| 935 | + fossil_exit(rc); | |
| 936 | +} | |
| 937 | + | |
| 938 | +NORETURN void fossil_fatal(const char *zFormat, ...){ | |
| 939 | + char *z; | |
| 940 | + int rc = 1; | |
| 941 | + va_list ap; | |
| 942 | + mainInFatalError = 1; | |
| 943 | + va_start(ap, zFormat); | |
| 944 | + z = vmprintf(zFormat, ap); | |
| 945 | + va_end(ap); | |
| 946 | +#ifdef FOSSIL_ENABLE_JSON | |
| 947 | + if( g.json.isJsonMode ){ | |
| 948 | + json_err( g.json.resultCode, z, 1 ); | |
| 949 | + if( g.isHTTP ){ | |
| 950 | + rc = 0 /* avoid HTTP 500 */; | |
| 951 | + } | |
| 952 | + } | |
| 953 | + else | |
| 954 | +#endif | |
| 955 | + { | |
| 956 | + if( g.cgiOutput ){ | |
| 957 | + g.cgiOutput = 0; | |
| 958 | + cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); | |
| 959 | + cgi_reply(); | |
| 960 | + }else if( !g.fQuiet ){ | |
| 961 | + fossil_trace("%s: %s\n", g.argv[0], z); | |
| 962 | + } | |
| 963 | + } | |
| 964 | + free(z); | |
| 965 | + db_force_rollback(); | |
| 966 | + fossil_exit(rc); | |
| 967 | +} | |
| 968 | + | |
| 969 | +/* This routine works like fossil_fatal() except that if called | |
| 970 | +** recursively, the recursive call is a no-op. | |
| 971 | +** | |
| 972 | +** Use this in places where an error might occur while doing | |
| 973 | +** fatal error shutdown processing. Unlike fossil_panic() and | |
| 974 | +** fossil_fatal() which never return, this routine might return if | |
| 975 | +** the fatal error handing is already in process. The caller must | |
| 976 | +** be prepared for this routine to return. | |
| 977 | +*/ | |
| 978 | +void fossil_fatal_recursive(const char *zFormat, ...){ | |
| 979 | + char *z; | |
| 980 | + va_list ap; | |
| 981 | + int rc = 1; | |
| 982 | + if( mainInFatalError ) return; | |
| 983 | + mainInFatalError = 1; | |
| 984 | + va_start(ap, zFormat); | |
| 985 | + z = vmprintf(zFormat, ap); | |
| 986 | + va_end(ap); | |
| 987 | +#ifdef FOSSIL_ENABLE_JSON | |
| 988 | + if( g.json.isJsonMode ){ | |
| 989 | + json_err( g.json.resultCode, z, 1 ); | |
| 990 | + if( g.isHTTP ){ | |
| 991 | + rc = 0 /* avoid HTTP 500 */; | |
| 992 | + } | |
| 993 | + } else | |
| 994 | +#endif | |
| 995 | + { | |
| 996 | + if( g.cgiOutput ){ | |
| 997 | + g.cgiOutput = 0; | |
| 998 | + cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); | |
| 999 | + cgi_reply(); | |
| 1000 | + }else{ | |
| 1001 | + fossil_trace("%s: %s\n", g.argv[0], z); | |
| 1002 | + } | |
| 1003 | + } | |
| 1004 | + db_force_rollback(); | |
| 1005 | + fossil_exit(rc); | |
| 1006 | +} | |
| 1007 | + | |
| 1008 | + | |
| 1009 | +/* Print a warning message */ | |
| 1010 | +void fossil_warning(const char *zFormat, ...){ | |
| 1011 | + char *z; | |
| 1012 | + va_list ap; | |
| 1013 | + va_start(ap, zFormat); | |
| 1014 | + z = vmprintf(zFormat, ap); | |
| 1015 | + va_end(ap); | |
| 1016 | +#ifdef FOSSIL_ENABLE_JSON | |
| 1017 | + if(g.json.isJsonMode){ | |
| 1018 | + json_warn( FSL_JSON_W_UNKNOWN, z ); | |
| 1019 | + }else | |
| 1020 | +#endif | |
| 1021 | + { | |
| 1022 | + if( g.cgiOutput ){ | |
| 1023 | + cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); | |
| 1024 | + }else{ | |
| 1025 | + fossil_trace("%s: %s\n", g.argv[0], z); | |
| 1026 | + } | |
| 1027 | + } | |
| 1028 | + free(z); | |
| 1029 | +} | |
| 1030 | + | |
| 1031 | +/* | |
| 1032 | +** Turn off any NL to CRNL translation on the stream given as an | |
| 1033 | +** argument. This is a no-op on unix but is necessary on windows. | |
| 1034 | +*/ | |
| 1035 | +void fossil_binary_mode(FILE *p){ | |
| 1036 | +#if defined(_WIN32) | |
| 1037 | + _setmode(_fileno(p), _O_BINARY); | |
| 1038 | +#endif | |
| 1039 | +#ifdef __EMX__ /* OS/2 */ | |
| 1040 | + setmode(fileno(p), O_BINARY); | |
| 1041 | +#endif | |
| 957 | 1042 | } |
| 958 | 1043 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -13,11 +13,12 @@ | |
| 13 | ** [email protected] |
| 14 | ** http://www.hwaci.com/drh/ |
| 15 | ** |
| 16 | ******************************************************************************* |
| 17 | ** |
| 18 | ** An implementation of printf() with extra conversion fields. |
| 19 | */ |
| 20 | #include "config.h" |
| 21 | #include "printf.h" |
| 22 | |
| 23 | /* |
| @@ -888,70 +889,154 @@ | |
| 888 | fossil_puts(blob_str(&b), 1); |
| 889 | blob_reset(&b); |
| 890 | va_end(ap); |
| 891 | } |
| 892 | |
| 893 | /* |
| 894 | ** Like strcmp() except that it accepts NULL pointers. NULL sorts before |
| 895 | ** all non-NULL string pointers. Also, this strcmp() is a binary comparison |
| 896 | ** that does not consider locale. |
| 897 | */ |
| 898 | int fossil_strcmp(const char *zA, const char *zB){ |
| 899 | if( zA==0 ){ |
| 900 | if( zB==0 ) return 0; |
| 901 | return -1; |
| 902 | }else if( zB==0 ){ |
| 903 | return +1; |
| 904 | }else{ |
| 905 | int a, b; |
| 906 | do{ |
| 907 | a = *zA++; |
| 908 | b = *zB++; |
| 909 | }while( a==b && a!=0 ); |
| 910 | return ((unsigned char)a) - (unsigned char)b; |
| 911 | } |
| 912 | } |
| 913 | int fossil_strncmp(const char *zA, const char *zB, int nByte){ |
| 914 | if( zA==0 ){ |
| 915 | if( zB==0 ) return 0; |
| 916 | return -1; |
| 917 | }else if( zB==0 ){ |
| 918 | return +1; |
| 919 | }else if( nByte>0 ){ |
| 920 | int a, b; |
| 921 | do{ |
| 922 | a = *zA++; |
| 923 | b = *zB++; |
| 924 | }while( a==b && a!=0 && (--nByte)>0 ); |
| 925 | return ((unsigned char)a) - (unsigned char)b; |
| 926 | }else{ |
| 927 | return 0; |
| 928 | } |
| 929 | } |
| 930 | |
| 931 | /* |
| 932 | ** Case insensitive string comparison. |
| 933 | */ |
| 934 | int fossil_strnicmp(const char *zA, const char *zB, int nByte){ |
| 935 | if( zA==0 ){ |
| 936 | if( zB==0 ) return 0; |
| 937 | return -1; |
| 938 | }else if( zB==0 ){ |
| 939 | return +1; |
| 940 | } |
| 941 | if( nByte<0 ) nByte = strlen(zB); |
| 942 | return sqlite3_strnicmp(zA, zB, nByte); |
| 943 | } |
| 944 | int fossil_stricmp(const char *zA, const char *zB){ |
| 945 | int nByte; |
| 946 | int rc; |
| 947 | if( zA==0 ){ |
| 948 | if( zB==0 ) return 0; |
| 949 | return -1; |
| 950 | }else if( zB==0 ){ |
| 951 | return +1; |
| 952 | } |
| 953 | nByte = strlen(zB); |
| 954 | rc = sqlite3_strnicmp(zA, zB, nByte); |
| 955 | if( rc==0 && zA[nByte] ) rc = 1; |
| 956 | return rc; |
| 957 | } |
| 958 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -13,11 +13,12 @@ | |
| 13 | ** [email protected] |
| 14 | ** http://www.hwaci.com/drh/ |
| 15 | ** |
| 16 | ******************************************************************************* |
| 17 | ** |
| 18 | ** This file contains implementions of routines for formatting output |
| 19 | ** (ex: mprintf()) and for output to the console. |
| 20 | */ |
| 21 | #include "config.h" |
| 22 | #include "printf.h" |
| 23 | |
| 24 | /* |
| @@ -888,70 +889,154 @@ | |
| 889 | fossil_puts(blob_str(&b), 1); |
| 890 | blob_reset(&b); |
| 891 | va_end(ap); |
| 892 | } |
| 893 | |
| 894 | |
| 895 | /* |
| 896 | ** The following variable becomes true while processing a fatal error |
| 897 | ** or a panic. If additional "recursive-fatal" errors occur while |
| 898 | ** shutting down, the recursive errors are silently ignored. |
| 899 | */ |
| 900 | static int mainInFatalError = 0; |
| 901 | |
| 902 | /* |
| 903 | ** Print an error message, rollback all databases, and quit. These |
| 904 | ** routines never return. |
| 905 | */ |
| 906 | NORETURN void fossil_panic(const char *zFormat, ...){ |
| 907 | char *z; |
| 908 | va_list ap; |
| 909 | int rc = 1; |
| 910 | static int once = 1; |
| 911 | mainInFatalError = 1; |
| 912 | va_start(ap, zFormat); |
| 913 | z = vmprintf(zFormat, ap); |
| 914 | va_end(ap); |
| 915 | #ifdef FOSSIL_ENABLE_JSON |
| 916 | if( g.json.isJsonMode ){ |
| 917 | json_err( 0, z, 1 ); |
| 918 | if( g.isHTTP ){ |
| 919 | rc = 0 /* avoid HTTP 500 */; |
| 920 | } |
| 921 | } |
| 922 | else |
| 923 | #endif |
| 924 | { |
| 925 | if( g.cgiOutput && once ){ |
| 926 | once = 0; |
| 927 | cgi_printf("<p class=\"generalError\">%h</p>", z); |
| 928 | cgi_reply(); |
| 929 | }else if( !g.fQuiet ){ |
| 930 | fossil_trace("%s: %s\n", g.argv[0], z); |
| 931 | } |
| 932 | } |
| 933 | free(z); |
| 934 | db_force_rollback(); |
| 935 | fossil_exit(rc); |
| 936 | } |
| 937 | |
| 938 | NORETURN void fossil_fatal(const char *zFormat, ...){ |
| 939 | char *z; |
| 940 | int rc = 1; |
| 941 | va_list ap; |
| 942 | mainInFatalError = 1; |
| 943 | va_start(ap, zFormat); |
| 944 | z = vmprintf(zFormat, ap); |
| 945 | va_end(ap); |
| 946 | #ifdef FOSSIL_ENABLE_JSON |
| 947 | if( g.json.isJsonMode ){ |
| 948 | json_err( g.json.resultCode, z, 1 ); |
| 949 | if( g.isHTTP ){ |
| 950 | rc = 0 /* avoid HTTP 500 */; |
| 951 | } |
| 952 | } |
| 953 | else |
| 954 | #endif |
| 955 | { |
| 956 | if( g.cgiOutput ){ |
| 957 | g.cgiOutput = 0; |
| 958 | cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); |
| 959 | cgi_reply(); |
| 960 | }else if( !g.fQuiet ){ |
| 961 | fossil_trace("%s: %s\n", g.argv[0], z); |
| 962 | } |
| 963 | } |
| 964 | free(z); |
| 965 | db_force_rollback(); |
| 966 | fossil_exit(rc); |
| 967 | } |
| 968 | |
| 969 | /* This routine works like fossil_fatal() except that if called |
| 970 | ** recursively, the recursive call is a no-op. |
| 971 | ** |
| 972 | ** Use this in places where an error might occur while doing |
| 973 | ** fatal error shutdown processing. Unlike fossil_panic() and |
| 974 | ** fossil_fatal() which never return, this routine might return if |
| 975 | ** the fatal error handing is already in process. The caller must |
| 976 | ** be prepared for this routine to return. |
| 977 | */ |
| 978 | void fossil_fatal_recursive(const char *zFormat, ...){ |
| 979 | char *z; |
| 980 | va_list ap; |
| 981 | int rc = 1; |
| 982 | if( mainInFatalError ) return; |
| 983 | mainInFatalError = 1; |
| 984 | va_start(ap, zFormat); |
| 985 | z = vmprintf(zFormat, ap); |
| 986 | va_end(ap); |
| 987 | #ifdef FOSSIL_ENABLE_JSON |
| 988 | if( g.json.isJsonMode ){ |
| 989 | json_err( g.json.resultCode, z, 1 ); |
| 990 | if( g.isHTTP ){ |
| 991 | rc = 0 /* avoid HTTP 500 */; |
| 992 | } |
| 993 | } else |
| 994 | #endif |
| 995 | { |
| 996 | if( g.cgiOutput ){ |
| 997 | g.cgiOutput = 0; |
| 998 | cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); |
| 999 | cgi_reply(); |
| 1000 | }else{ |
| 1001 | fossil_trace("%s: %s\n", g.argv[0], z); |
| 1002 | } |
| 1003 | } |
| 1004 | db_force_rollback(); |
| 1005 | fossil_exit(rc); |
| 1006 | } |
| 1007 | |
| 1008 | |
| 1009 | /* Print a warning message */ |
| 1010 | void fossil_warning(const char *zFormat, ...){ |
| 1011 | char *z; |
| 1012 | va_list ap; |
| 1013 | va_start(ap, zFormat); |
| 1014 | z = vmprintf(zFormat, ap); |
| 1015 | va_end(ap); |
| 1016 | #ifdef FOSSIL_ENABLE_JSON |
| 1017 | if(g.json.isJsonMode){ |
| 1018 | json_warn( FSL_JSON_W_UNKNOWN, z ); |
| 1019 | }else |
| 1020 | #endif |
| 1021 | { |
| 1022 | if( g.cgiOutput ){ |
| 1023 | cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); |
| 1024 | }else{ |
| 1025 | fossil_trace("%s: %s\n", g.argv[0], z); |
| 1026 | } |
| 1027 | } |
| 1028 | free(z); |
| 1029 | } |
| 1030 | |
| 1031 | /* |
| 1032 | ** Turn off any NL to CRNL translation on the stream given as an |
| 1033 | ** argument. This is a no-op on unix but is necessary on windows. |
| 1034 | */ |
| 1035 | void fossil_binary_mode(FILE *p){ |
| 1036 | #if defined(_WIN32) |
| 1037 | _setmode(_fileno(p), _O_BINARY); |
| 1038 | #endif |
| 1039 | #ifdef __EMX__ /* OS/2 */ |
| 1040 | setmode(fileno(p), O_BINARY); |
| 1041 | #endif |
| 1042 | } |
| 1043 |
+5
-1
| --- src/sync.c | ||
| +++ src/sync.c | ||
| @@ -82,11 +82,15 @@ | ||
| 82 | 82 | */ |
| 83 | 83 | static void process_sync_args(unsigned *pConfigFlags, unsigned *pSyncFlags){ |
| 84 | 84 | const char *zUrl = 0; |
| 85 | 85 | unsigned configSync = 0; |
| 86 | 86 | unsigned urlFlags = URL_REMEMBER | URL_PROMPT_PW; |
| 87 | - int urlOptional = find_option("autourl",0,0)!=0; | |
| 87 | + int urlOptional = 0; | |
| 88 | + if( find_option("autourl",0,0)!=0 ){ | |
| 89 | + urlOptional = 1; | |
| 90 | + urlFlags = 0; | |
| 91 | + } | |
| 88 | 92 | if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER; |
| 89 | 93 | if( find_option("private",0,0)!=0 ){ |
| 90 | 94 | *pSyncFlags |= SYNC_PRIVATE; |
| 91 | 95 | } |
| 92 | 96 | if( find_option("verbose","v",0)!=0 ){ |
| 93 | 97 |
| --- src/sync.c | |
| +++ src/sync.c | |
| @@ -82,11 +82,15 @@ | |
| 82 | */ |
| 83 | static void process_sync_args(unsigned *pConfigFlags, unsigned *pSyncFlags){ |
| 84 | const char *zUrl = 0; |
| 85 | unsigned configSync = 0; |
| 86 | unsigned urlFlags = URL_REMEMBER | URL_PROMPT_PW; |
| 87 | int urlOptional = find_option("autourl",0,0)!=0; |
| 88 | if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER; |
| 89 | if( find_option("private",0,0)!=0 ){ |
| 90 | *pSyncFlags |= SYNC_PRIVATE; |
| 91 | } |
| 92 | if( find_option("verbose","v",0)!=0 ){ |
| 93 |
| --- src/sync.c | |
| +++ src/sync.c | |
| @@ -82,11 +82,15 @@ | |
| 82 | */ |
| 83 | static void process_sync_args(unsigned *pConfigFlags, unsigned *pSyncFlags){ |
| 84 | const char *zUrl = 0; |
| 85 | unsigned configSync = 0; |
| 86 | unsigned urlFlags = URL_REMEMBER | URL_PROMPT_PW; |
| 87 | int urlOptional = 0; |
| 88 | if( find_option("autourl",0,0)!=0 ){ |
| 89 | urlOptional = 1; |
| 90 | urlFlags = 0; |
| 91 | } |
| 92 | if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER; |
| 93 | if( find_option("private",0,0)!=0 ){ |
| 94 | *pSyncFlags |= SYNC_PRIVATE; |
| 95 | } |
| 96 | if( find_option("verbose","v",0)!=0 ){ |
| 97 |
+2
-2
| --- src/url.c | ||
| +++ src/url.c | ||
| @@ -428,11 +428,11 @@ | ||
| 428 | 428 | /* |
| 429 | 429 | ** Prompt the user for the password for g.urlUser. Store the result |
| 430 | 430 | ** in g.urlPasswd. |
| 431 | 431 | */ |
| 432 | 432 | void url_prompt_for_password(void){ |
| 433 | - if( isatty(fileno(stdin)) ){ | |
| 433 | + if( isatty(fileno(stdin)) && (g.urlFlags & URL_PROMPT_PW)!=0 ){ | |
| 434 | 434 | char *zPrompt = mprintf("\rpassword for %s: ", g.urlUser); |
| 435 | 435 | Blob x; |
| 436 | 436 | fossil_force_newline(); |
| 437 | 437 | prompt_for_password(zPrompt, &x, 0); |
| 438 | 438 | free(zPrompt); |
| @@ -464,11 +464,11 @@ | ||
| 464 | 464 | void url_remember(void){ |
| 465 | 465 | db_set("last-sync-url", g.urlCanonical, 0); |
| 466 | 466 | if( g.urlFlags & URL_REMEMBER_PW ){ |
| 467 | 467 | db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 468 | 468 | } |
| 469 | - g.urlFlags = URL_REMEMBER; | |
| 469 | + g.urlFlags |= URL_REMEMBER; | |
| 470 | 470 | } |
| 471 | 471 | |
| 472 | 472 | /* Preemptively prompt for a password if a username is given in the |
| 473 | 473 | ** URL but no password. |
| 474 | 474 | */ |
| 475 | 475 | |
| 476 | 476 | ADDED src/util.c |
| --- src/url.c | |
| +++ src/url.c | |
| @@ -428,11 +428,11 @@ | |
| 428 | /* |
| 429 | ** Prompt the user for the password for g.urlUser. Store the result |
| 430 | ** in g.urlPasswd. |
| 431 | */ |
| 432 | void url_prompt_for_password(void){ |
| 433 | if( isatty(fileno(stdin)) ){ |
| 434 | char *zPrompt = mprintf("\rpassword for %s: ", g.urlUser); |
| 435 | Blob x; |
| 436 | fossil_force_newline(); |
| 437 | prompt_for_password(zPrompt, &x, 0); |
| 438 | free(zPrompt); |
| @@ -464,11 +464,11 @@ | |
| 464 | void url_remember(void){ |
| 465 | db_set("last-sync-url", g.urlCanonical, 0); |
| 466 | if( g.urlFlags & URL_REMEMBER_PW ){ |
| 467 | db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 468 | } |
| 469 | g.urlFlags = URL_REMEMBER; |
| 470 | } |
| 471 | |
| 472 | /* Preemptively prompt for a password if a username is given in the |
| 473 | ** URL but no password. |
| 474 | */ |
| 475 | |
| 476 | DDED src/util.c |
| --- src/url.c | |
| +++ src/url.c | |
| @@ -428,11 +428,11 @@ | |
| 428 | /* |
| 429 | ** Prompt the user for the password for g.urlUser. Store the result |
| 430 | ** in g.urlPasswd. |
| 431 | */ |
| 432 | void url_prompt_for_password(void){ |
| 433 | if( isatty(fileno(stdin)) && (g.urlFlags & URL_PROMPT_PW)!=0 ){ |
| 434 | char *zPrompt = mprintf("\rpassword for %s: ", g.urlUser); |
| 435 | Blob x; |
| 436 | fossil_force_newline(); |
| 437 | prompt_for_password(zPrompt, &x, 0); |
| 438 | free(zPrompt); |
| @@ -464,11 +464,11 @@ | |
| 464 | void url_remember(void){ |
| 465 | db_set("last-sync-url", g.urlCanonical, 0); |
| 466 | if( g.urlFlags & URL_REMEMBER_PW ){ |
| 467 | db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 468 | } |
| 469 | g.urlFlags |= URL_REMEMBER; |
| 470 | } |
| 471 | |
| 472 | /* Preemptively prompt for a password if a username is given in the |
| 473 | ** URL but no password. |
| 474 | */ |
| 475 | |
| 476 | DDED src/util.c |
+1
| --- a/src/util.c | ||
| +++ b/src/util.c | ||
| @@ -0,0 +1 @@ | ||
| 1 | +WCHAR |
| --- a/src/util.c | |
| +++ b/src/util.c | |
| @@ -0,0 +1 @@ | |
| --- a/src/util.c | |
| +++ b/src/util.c | |
| @@ -0,0 +1 @@ | |
| 1 | WCHAR |
+10
-4
| --- win/Makefile.dmc | ||
| +++ win/Makefile.dmc | ||
| @@ -26,13 +26,13 @@ | ||
| 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 markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.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 unicode_.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 | |
| 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 markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.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 unicode_.c update_.c url_.c user_.c utf8_.c util_.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)\markdown$O $(OBJDIR)\markdown_html$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)\regexp$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)\unicode$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 | |
| 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)\markdown$O $(OBJDIR)\markdown_html$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)\regexp$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)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$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 | |
| @@ -46,11 +46,11 @@ | ||
| 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 markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 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 markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util 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 >> $@ |
| @@ -679,10 +679,16 @@ | ||
| 679 | 679 | $(OBJDIR)\utf8$O : utf8_.c utf8.h |
| 680 | 680 | $(TCC) -o$@ -c utf8_.c |
| 681 | 681 | |
| 682 | 682 | utf8_.c : $(SRCDIR)\utf8.c |
| 683 | 683 | +translate$E $** > $@ |
| 684 | + | |
| 685 | +$(OBJDIR)\util$O : util_.c util.h | |
| 686 | + $(TCC) -o$@ -c util_.c | |
| 687 | + | |
| 688 | +util_.c : $(SRCDIR)\util.c | |
| 689 | + +translate$E $** > $@ | |
| 684 | 690 | |
| 685 | 691 | $(OBJDIR)\verify$O : verify_.c verify.h |
| 686 | 692 | $(TCC) -o$@ -c verify_.c |
| 687 | 693 | |
| 688 | 694 | verify_.c : $(SRCDIR)\verify.c |
| @@ -735,7 +741,7 @@ | ||
| 735 | 741 | |
| 736 | 742 | zip_.c : $(SRCDIR)\zip.c |
| 737 | 743 | +translate$E $** > $@ |
| 738 | 744 | |
| 739 | 745 | headers: makeheaders$E page_index.h VERSION.h |
| 740 | - +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 markdown_.c:markdown.h markdown_html_.c:markdown_html.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 regexp_.c:regexp.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 unicode_.c:unicode.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 | |
| 746 | + +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 markdown_.c:markdown.h markdown_html_.c:markdown_html.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 regexp_.c:regexp.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 unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.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 | |
| 741 | 747 | @copy /Y nul: headers |
| 742 | 748 |
| --- win/Makefile.dmc | |
| +++ win/Makefile.dmc | |
| @@ -26,13 +26,13 @@ | |
| 26 | TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL) |
| 27 | LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32 |
| 28 | |
| 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 | |
| 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 markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.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 unicode_.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 | |
| 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)\markdown$O $(OBJDIR)\markdown_html$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)\regexp$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)\unicode$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 | |
| 35 | |
| 36 | RC=$(DMDIR)\bin\rcc |
| 37 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 38 | |
| @@ -46,11 +46,11 @@ | |
| 46 | |
| 47 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 48 | $(RC) $(RCFLAGS) -o$@ $** |
| 49 | |
| 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 markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 verify vfile wiki wikiformat winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ |
| 52 | +echo fossil >> $@ |
| 53 | +echo fossil >> $@ |
| 54 | +echo $(LIBS) >> $@ |
| 55 | +echo. >> $@ |
| 56 | +echo fossil >> $@ |
| @@ -679,10 +679,16 @@ | |
| 679 | $(OBJDIR)\utf8$O : utf8_.c utf8.h |
| 680 | $(TCC) -o$@ -c utf8_.c |
| 681 | |
| 682 | utf8_.c : $(SRCDIR)\utf8.c |
| 683 | +translate$E $** > $@ |
| 684 | |
| 685 | $(OBJDIR)\verify$O : verify_.c verify.h |
| 686 | $(TCC) -o$@ -c verify_.c |
| 687 | |
| 688 | verify_.c : $(SRCDIR)\verify.c |
| @@ -735,7 +741,7 @@ | |
| 735 | |
| 736 | zip_.c : $(SRCDIR)\zip.c |
| 737 | +translate$E $** > $@ |
| 738 | |
| 739 | headers: makeheaders$E page_index.h VERSION.h |
| 740 | +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 markdown_.c:markdown.h markdown_html_.c:markdown_html.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 regexp_.c:regexp.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 unicode_.c:unicode.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 |
| 741 | @copy /Y nul: headers |
| 742 |
| --- win/Makefile.dmc | |
| +++ win/Makefile.dmc | |
| @@ -26,13 +26,13 @@ | |
| 26 | TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL) |
| 27 | LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32 |
| 28 | |
| 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 | |
| 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 markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.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 unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c |
| 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)\markdown$O $(OBJDIR)\markdown_html$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)\regexp$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)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$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 | |
| 35 | |
| 36 | RC=$(DMDIR)\bin\rcc |
| 37 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 38 | |
| @@ -46,11 +46,11 @@ | |
| 46 | |
| 47 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 48 | $(RC) $(RCFLAGS) -o$@ $** |
| 49 | |
| 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 markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ |
| 52 | +echo fossil >> $@ |
| 53 | +echo fossil >> $@ |
| 54 | +echo $(LIBS) >> $@ |
| 55 | +echo. >> $@ |
| 56 | +echo fossil >> $@ |
| @@ -679,10 +679,16 @@ | |
| 679 | $(OBJDIR)\utf8$O : utf8_.c utf8.h |
| 680 | $(TCC) -o$@ -c utf8_.c |
| 681 | |
| 682 | utf8_.c : $(SRCDIR)\utf8.c |
| 683 | +translate$E $** > $@ |
| 684 | |
| 685 | $(OBJDIR)\util$O : util_.c util.h |
| 686 | $(TCC) -o$@ -c util_.c |
| 687 | |
| 688 | util_.c : $(SRCDIR)\util.c |
| 689 | +translate$E $** > $@ |
| 690 | |
| 691 | $(OBJDIR)\verify$O : verify_.c verify.h |
| 692 | $(TCC) -o$@ -c verify_.c |
| 693 | |
| 694 | verify_.c : $(SRCDIR)\verify.c |
| @@ -735,7 +741,7 @@ | |
| 741 | |
| 742 | zip_.c : $(SRCDIR)\zip.c |
| 743 | +translate$E $** > $@ |
| 744 | |
| 745 | headers: makeheaders$E page_index.h VERSION.h |
| 746 | +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 markdown_.c:markdown.h markdown_html_.c:markdown_html.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 regexp_.c:regexp.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 unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.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 |
| 747 | @copy /Y nul: headers |
| 748 |
+12
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -348,10 +348,11 @@ | ||
| 348 | 348 | $(SRCDIR)/unicode.c \ |
| 349 | 349 | $(SRCDIR)/update.c \ |
| 350 | 350 | $(SRCDIR)/url.c \ |
| 351 | 351 | $(SRCDIR)/user.c \ |
| 352 | 352 | $(SRCDIR)/utf8.c \ |
| 353 | + $(SRCDIR)/util.c \ | |
| 353 | 354 | $(SRCDIR)/verify.c \ |
| 354 | 355 | $(SRCDIR)/vfile.c \ |
| 355 | 356 | $(SRCDIR)/wiki.c \ |
| 356 | 357 | $(SRCDIR)/wikiformat.c \ |
| 357 | 358 | $(SRCDIR)/winhttp.c \ |
| @@ -454,10 +455,11 @@ | ||
| 454 | 455 | $(OBJDIR)/unicode_.c \ |
| 455 | 456 | $(OBJDIR)/update_.c \ |
| 456 | 457 | $(OBJDIR)/url_.c \ |
| 457 | 458 | $(OBJDIR)/user_.c \ |
| 458 | 459 | $(OBJDIR)/utf8_.c \ |
| 460 | + $(OBJDIR)/util_.c \ | |
| 459 | 461 | $(OBJDIR)/verify_.c \ |
| 460 | 462 | $(OBJDIR)/vfile_.c \ |
| 461 | 463 | $(OBJDIR)/wiki_.c \ |
| 462 | 464 | $(OBJDIR)/wikiformat_.c \ |
| 463 | 465 | $(OBJDIR)/winhttp_.c \ |
| @@ -560,10 +562,11 @@ | ||
| 560 | 562 | $(OBJDIR)/unicode.o \ |
| 561 | 563 | $(OBJDIR)/update.o \ |
| 562 | 564 | $(OBJDIR)/url.o \ |
| 563 | 565 | $(OBJDIR)/user.o \ |
| 564 | 566 | $(OBJDIR)/utf8.o \ |
| 567 | + $(OBJDIR)/util.o \ | |
| 565 | 568 | $(OBJDIR)/verify.o \ |
| 566 | 569 | $(OBJDIR)/vfile.o \ |
| 567 | 570 | $(OBJDIR)/wiki.o \ |
| 568 | 571 | $(OBJDIR)/wikiformat.o \ |
| 569 | 572 | $(OBJDIR)/winhttp.o \ |
| @@ -779,10 +782,11 @@ | ||
| 779 | 782 | $(OBJDIR)/unicode_.c:$(OBJDIR)/unicode.h \ |
| 780 | 783 | $(OBJDIR)/update_.c:$(OBJDIR)/update.h \ |
| 781 | 784 | $(OBJDIR)/url_.c:$(OBJDIR)/url.h \ |
| 782 | 785 | $(OBJDIR)/user_.c:$(OBJDIR)/user.h \ |
| 783 | 786 | $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \ |
| 787 | + $(OBJDIR)/util_.c:$(OBJDIR)/util.h \ | |
| 784 | 788 | $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \ |
| 785 | 789 | $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \ |
| 786 | 790 | $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \ |
| 787 | 791 | $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \ |
| 788 | 792 | $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \ |
| @@ -1556,10 +1560,18 @@ | ||
| 1556 | 1560 | |
| 1557 | 1561 | $(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h |
| 1558 | 1562 | $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c |
| 1559 | 1563 | |
| 1560 | 1564 | $(OBJDIR)/utf8.h: $(OBJDIR)/headers |
| 1565 | + | |
| 1566 | +$(OBJDIR)/util_.c: $(SRCDIR)/util.c $(OBJDIR)/translate | |
| 1567 | + $(TRANSLATE) $(SRCDIR)/util.c >$(OBJDIR)/util_.c | |
| 1568 | + | |
| 1569 | +$(OBJDIR)/util.o: $(OBJDIR)/util_.c $(OBJDIR)/util.h $(SRCDIR)/config.h | |
| 1570 | + $(XTCC) -o $(OBJDIR)/util.o -c $(OBJDIR)/util_.c | |
| 1571 | + | |
| 1572 | +$(OBJDIR)/util.h: $(OBJDIR)/headers | |
| 1561 | 1573 | |
| 1562 | 1574 | $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate |
| 1563 | 1575 | $(TRANSLATE) $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c |
| 1564 | 1576 | |
| 1565 | 1577 | $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h |
| 1566 | 1578 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -348,10 +348,11 @@ | |
| 348 | $(SRCDIR)/unicode.c \ |
| 349 | $(SRCDIR)/update.c \ |
| 350 | $(SRCDIR)/url.c \ |
| 351 | $(SRCDIR)/user.c \ |
| 352 | $(SRCDIR)/utf8.c \ |
| 353 | $(SRCDIR)/verify.c \ |
| 354 | $(SRCDIR)/vfile.c \ |
| 355 | $(SRCDIR)/wiki.c \ |
| 356 | $(SRCDIR)/wikiformat.c \ |
| 357 | $(SRCDIR)/winhttp.c \ |
| @@ -454,10 +455,11 @@ | |
| 454 | $(OBJDIR)/unicode_.c \ |
| 455 | $(OBJDIR)/update_.c \ |
| 456 | $(OBJDIR)/url_.c \ |
| 457 | $(OBJDIR)/user_.c \ |
| 458 | $(OBJDIR)/utf8_.c \ |
| 459 | $(OBJDIR)/verify_.c \ |
| 460 | $(OBJDIR)/vfile_.c \ |
| 461 | $(OBJDIR)/wiki_.c \ |
| 462 | $(OBJDIR)/wikiformat_.c \ |
| 463 | $(OBJDIR)/winhttp_.c \ |
| @@ -560,10 +562,11 @@ | |
| 560 | $(OBJDIR)/unicode.o \ |
| 561 | $(OBJDIR)/update.o \ |
| 562 | $(OBJDIR)/url.o \ |
| 563 | $(OBJDIR)/user.o \ |
| 564 | $(OBJDIR)/utf8.o \ |
| 565 | $(OBJDIR)/verify.o \ |
| 566 | $(OBJDIR)/vfile.o \ |
| 567 | $(OBJDIR)/wiki.o \ |
| 568 | $(OBJDIR)/wikiformat.o \ |
| 569 | $(OBJDIR)/winhttp.o \ |
| @@ -779,10 +782,11 @@ | |
| 779 | $(OBJDIR)/unicode_.c:$(OBJDIR)/unicode.h \ |
| 780 | $(OBJDIR)/update_.c:$(OBJDIR)/update.h \ |
| 781 | $(OBJDIR)/url_.c:$(OBJDIR)/url.h \ |
| 782 | $(OBJDIR)/user_.c:$(OBJDIR)/user.h \ |
| 783 | $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \ |
| 784 | $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \ |
| 785 | $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \ |
| 786 | $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \ |
| 787 | $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \ |
| 788 | $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \ |
| @@ -1556,10 +1560,18 @@ | |
| 1556 | |
| 1557 | $(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h |
| 1558 | $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c |
| 1559 | |
| 1560 | $(OBJDIR)/utf8.h: $(OBJDIR)/headers |
| 1561 | |
| 1562 | $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate |
| 1563 | $(TRANSLATE) $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c |
| 1564 | |
| 1565 | $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h |
| 1566 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -348,10 +348,11 @@ | |
| 348 | $(SRCDIR)/unicode.c \ |
| 349 | $(SRCDIR)/update.c \ |
| 350 | $(SRCDIR)/url.c \ |
| 351 | $(SRCDIR)/user.c \ |
| 352 | $(SRCDIR)/utf8.c \ |
| 353 | $(SRCDIR)/util.c \ |
| 354 | $(SRCDIR)/verify.c \ |
| 355 | $(SRCDIR)/vfile.c \ |
| 356 | $(SRCDIR)/wiki.c \ |
| 357 | $(SRCDIR)/wikiformat.c \ |
| 358 | $(SRCDIR)/winhttp.c \ |
| @@ -454,10 +455,11 @@ | |
| 455 | $(OBJDIR)/unicode_.c \ |
| 456 | $(OBJDIR)/update_.c \ |
| 457 | $(OBJDIR)/url_.c \ |
| 458 | $(OBJDIR)/user_.c \ |
| 459 | $(OBJDIR)/utf8_.c \ |
| 460 | $(OBJDIR)/util_.c \ |
| 461 | $(OBJDIR)/verify_.c \ |
| 462 | $(OBJDIR)/vfile_.c \ |
| 463 | $(OBJDIR)/wiki_.c \ |
| 464 | $(OBJDIR)/wikiformat_.c \ |
| 465 | $(OBJDIR)/winhttp_.c \ |
| @@ -560,10 +562,11 @@ | |
| 562 | $(OBJDIR)/unicode.o \ |
| 563 | $(OBJDIR)/update.o \ |
| 564 | $(OBJDIR)/url.o \ |
| 565 | $(OBJDIR)/user.o \ |
| 566 | $(OBJDIR)/utf8.o \ |
| 567 | $(OBJDIR)/util.o \ |
| 568 | $(OBJDIR)/verify.o \ |
| 569 | $(OBJDIR)/vfile.o \ |
| 570 | $(OBJDIR)/wiki.o \ |
| 571 | $(OBJDIR)/wikiformat.o \ |
| 572 | $(OBJDIR)/winhttp.o \ |
| @@ -779,10 +782,11 @@ | |
| 782 | $(OBJDIR)/unicode_.c:$(OBJDIR)/unicode.h \ |
| 783 | $(OBJDIR)/update_.c:$(OBJDIR)/update.h \ |
| 784 | $(OBJDIR)/url_.c:$(OBJDIR)/url.h \ |
| 785 | $(OBJDIR)/user_.c:$(OBJDIR)/user.h \ |
| 786 | $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \ |
| 787 | $(OBJDIR)/util_.c:$(OBJDIR)/util.h \ |
| 788 | $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \ |
| 789 | $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \ |
| 790 | $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \ |
| 791 | $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \ |
| 792 | $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \ |
| @@ -1556,10 +1560,18 @@ | |
| 1560 | |
| 1561 | $(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h |
| 1562 | $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c |
| 1563 | |
| 1564 | $(OBJDIR)/utf8.h: $(OBJDIR)/headers |
| 1565 | |
| 1566 | $(OBJDIR)/util_.c: $(SRCDIR)/util.c $(OBJDIR)/translate |
| 1567 | $(TRANSLATE) $(SRCDIR)/util.c >$(OBJDIR)/util_.c |
| 1568 | |
| 1569 | $(OBJDIR)/util.o: $(OBJDIR)/util_.c $(OBJDIR)/util.h $(SRCDIR)/config.h |
| 1570 | $(XTCC) -o $(OBJDIR)/util.o -c $(OBJDIR)/util_.c |
| 1571 | |
| 1572 | $(OBJDIR)/util.h: $(OBJDIR)/headers |
| 1573 | |
| 1574 | $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate |
| 1575 | $(TRANSLATE) $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c |
| 1576 | |
| 1577 | $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h |
| 1578 |
+10
| --- win/Makefile.msc | ||
| +++ win/Makefile.msc | ||
| @@ -150,10 +150,11 @@ | ||
| 150 | 150 | unicode_.c \ |
| 151 | 151 | update_.c \ |
| 152 | 152 | url_.c \ |
| 153 | 153 | user_.c \ |
| 154 | 154 | utf8_.c \ |
| 155 | + util_.c \ | |
| 155 | 156 | verify_.c \ |
| 156 | 157 | vfile_.c \ |
| 157 | 158 | wiki_.c \ |
| 158 | 159 | wikiformat_.c \ |
| 159 | 160 | winhttp_.c \ |
| @@ -260,10 +261,11 @@ | ||
| 260 | 261 | $(OX)\unicode$O \ |
| 261 | 262 | $(OX)\update$O \ |
| 262 | 263 | $(OX)\url$O \ |
| 263 | 264 | $(OX)\user$O \ |
| 264 | 265 | $(OX)\utf8$O \ |
| 266 | + $(OX)\util$O \ | |
| 265 | 267 | $(OX)\verify$O \ |
| 266 | 268 | $(OX)\vfile$O \ |
| 267 | 269 | $(OX)\wiki$O \ |
| 268 | 270 | $(OX)\wikiformat$O \ |
| 269 | 271 | $(OX)\winhttp$O \ |
| @@ -384,10 +386,11 @@ | ||
| 384 | 386 | echo $(OX)\unicode.obj >> $@ |
| 385 | 387 | echo $(OX)\update.obj >> $@ |
| 386 | 388 | echo $(OX)\url.obj >> $@ |
| 387 | 389 | echo $(OX)\user.obj >> $@ |
| 388 | 390 | echo $(OX)\utf8.obj >> $@ |
| 391 | + echo $(OX)\util.obj >> $@ | |
| 389 | 392 | echo $(OX)\verify.obj >> $@ |
| 390 | 393 | echo $(OX)\vfile.obj >> $@ |
| 391 | 394 | echo $(OX)\wiki.obj >> $@ |
| 392 | 395 | echo $(OX)\wikiformat.obj >> $@ |
| 393 | 396 | echo $(OX)\winhttp.obj >> $@ |
| @@ -1036,10 +1039,16 @@ | ||
| 1036 | 1039 | $(OX)\utf8$O : utf8_.c utf8.h |
| 1037 | 1040 | $(TCC) /Fo$@ -c utf8_.c |
| 1038 | 1041 | |
| 1039 | 1042 | utf8_.c : $(SRCDIR)\utf8.c |
| 1040 | 1043 | translate$E $** > $@ |
| 1044 | + | |
| 1045 | +$(OX)\util$O : util_.c util.h | |
| 1046 | + $(TCC) /Fo$@ -c util_.c | |
| 1047 | + | |
| 1048 | +util_.c : $(SRCDIR)\util.c | |
| 1049 | + translate$E $** > $@ | |
| 1041 | 1050 | |
| 1042 | 1051 | $(OX)\verify$O : verify_.c verify.h |
| 1043 | 1052 | $(TCC) /Fo$@ -c verify_.c |
| 1044 | 1053 | |
| 1045 | 1054 | verify_.c : $(SRCDIR)\verify.c |
| @@ -1189,10 +1198,11 @@ | ||
| 1189 | 1198 | unicode_.c:unicode.h \ |
| 1190 | 1199 | update_.c:update.h \ |
| 1191 | 1200 | url_.c:url.h \ |
| 1192 | 1201 | user_.c:user.h \ |
| 1193 | 1202 | utf8_.c:utf8.h \ |
| 1203 | + util_.c:util.h \ | |
| 1194 | 1204 | verify_.c:verify.h \ |
| 1195 | 1205 | vfile_.c:vfile.h \ |
| 1196 | 1206 | wiki_.c:wiki.h \ |
| 1197 | 1207 | wikiformat_.c:wikiformat.h \ |
| 1198 | 1208 | winhttp_.c:winhttp.h \ |
| 1199 | 1209 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -150,10 +150,11 @@ | |
| 150 | unicode_.c \ |
| 151 | update_.c \ |
| 152 | url_.c \ |
| 153 | user_.c \ |
| 154 | utf8_.c \ |
| 155 | verify_.c \ |
| 156 | vfile_.c \ |
| 157 | wiki_.c \ |
| 158 | wikiformat_.c \ |
| 159 | winhttp_.c \ |
| @@ -260,10 +261,11 @@ | |
| 260 | $(OX)\unicode$O \ |
| 261 | $(OX)\update$O \ |
| 262 | $(OX)\url$O \ |
| 263 | $(OX)\user$O \ |
| 264 | $(OX)\utf8$O \ |
| 265 | $(OX)\verify$O \ |
| 266 | $(OX)\vfile$O \ |
| 267 | $(OX)\wiki$O \ |
| 268 | $(OX)\wikiformat$O \ |
| 269 | $(OX)\winhttp$O \ |
| @@ -384,10 +386,11 @@ | |
| 384 | echo $(OX)\unicode.obj >> $@ |
| 385 | echo $(OX)\update.obj >> $@ |
| 386 | echo $(OX)\url.obj >> $@ |
| 387 | echo $(OX)\user.obj >> $@ |
| 388 | echo $(OX)\utf8.obj >> $@ |
| 389 | echo $(OX)\verify.obj >> $@ |
| 390 | echo $(OX)\vfile.obj >> $@ |
| 391 | echo $(OX)\wiki.obj >> $@ |
| 392 | echo $(OX)\wikiformat.obj >> $@ |
| 393 | echo $(OX)\winhttp.obj >> $@ |
| @@ -1036,10 +1039,16 @@ | |
| 1036 | $(OX)\utf8$O : utf8_.c utf8.h |
| 1037 | $(TCC) /Fo$@ -c utf8_.c |
| 1038 | |
| 1039 | utf8_.c : $(SRCDIR)\utf8.c |
| 1040 | translate$E $** > $@ |
| 1041 | |
| 1042 | $(OX)\verify$O : verify_.c verify.h |
| 1043 | $(TCC) /Fo$@ -c verify_.c |
| 1044 | |
| 1045 | verify_.c : $(SRCDIR)\verify.c |
| @@ -1189,10 +1198,11 @@ | |
| 1189 | unicode_.c:unicode.h \ |
| 1190 | update_.c:update.h \ |
| 1191 | url_.c:url.h \ |
| 1192 | user_.c:user.h \ |
| 1193 | utf8_.c:utf8.h \ |
| 1194 | verify_.c:verify.h \ |
| 1195 | vfile_.c:vfile.h \ |
| 1196 | wiki_.c:wiki.h \ |
| 1197 | wikiformat_.c:wikiformat.h \ |
| 1198 | winhttp_.c:winhttp.h \ |
| 1199 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -150,10 +150,11 @@ | |
| 150 | unicode_.c \ |
| 151 | update_.c \ |
| 152 | url_.c \ |
| 153 | user_.c \ |
| 154 | utf8_.c \ |
| 155 | util_.c \ |
| 156 | verify_.c \ |
| 157 | vfile_.c \ |
| 158 | wiki_.c \ |
| 159 | wikiformat_.c \ |
| 160 | winhttp_.c \ |
| @@ -260,10 +261,11 @@ | |
| 261 | $(OX)\unicode$O \ |
| 262 | $(OX)\update$O \ |
| 263 | $(OX)\url$O \ |
| 264 | $(OX)\user$O \ |
| 265 | $(OX)\utf8$O \ |
| 266 | $(OX)\util$O \ |
| 267 | $(OX)\verify$O \ |
| 268 | $(OX)\vfile$O \ |
| 269 | $(OX)\wiki$O \ |
| 270 | $(OX)\wikiformat$O \ |
| 271 | $(OX)\winhttp$O \ |
| @@ -384,10 +386,11 @@ | |
| 386 | echo $(OX)\unicode.obj >> $@ |
| 387 | echo $(OX)\update.obj >> $@ |
| 388 | echo $(OX)\url.obj >> $@ |
| 389 | echo $(OX)\user.obj >> $@ |
| 390 | echo $(OX)\utf8.obj >> $@ |
| 391 | echo $(OX)\util.obj >> $@ |
| 392 | echo $(OX)\verify.obj >> $@ |
| 393 | echo $(OX)\vfile.obj >> $@ |
| 394 | echo $(OX)\wiki.obj >> $@ |
| 395 | echo $(OX)\wikiformat.obj >> $@ |
| 396 | echo $(OX)\winhttp.obj >> $@ |
| @@ -1036,10 +1039,16 @@ | |
| 1039 | $(OX)\utf8$O : utf8_.c utf8.h |
| 1040 | $(TCC) /Fo$@ -c utf8_.c |
| 1041 | |
| 1042 | utf8_.c : $(SRCDIR)\utf8.c |
| 1043 | translate$E $** > $@ |
| 1044 | |
| 1045 | $(OX)\util$O : util_.c util.h |
| 1046 | $(TCC) /Fo$@ -c util_.c |
| 1047 | |
| 1048 | util_.c : $(SRCDIR)\util.c |
| 1049 | translate$E $** > $@ |
| 1050 | |
| 1051 | $(OX)\verify$O : verify_.c verify.h |
| 1052 | $(TCC) /Fo$@ -c verify_.c |
| 1053 | |
| 1054 | verify_.c : $(SRCDIR)\verify.c |
| @@ -1189,10 +1198,11 @@ | |
| 1198 | unicode_.c:unicode.h \ |
| 1199 | update_.c:update.h \ |
| 1200 | url_.c:url.h \ |
| 1201 | user_.c:user.h \ |
| 1202 | utf8_.c:utf8.h \ |
| 1203 | util_.c:util.h \ |
| 1204 | verify_.c:verify.h \ |
| 1205 | vfile_.c:vfile.h \ |
| 1206 | wiki_.c:wiki.h \ |
| 1207 | wikiformat_.c:wikiformat.h \ |
| 1208 | winhttp_.c:winhttp.h \ |
| 1209 |