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.

drh 2013-02-21 14:24 trunk
Commit bb0cedb15ad9958c5da21741fee7239f73356797
+92 -295
--- src/main.c
+++ src/main.c
@@ -334,11 +334,11 @@
334334
335335
/*
336336
** atexit() handler which frees up "some" of the resources
337337
** used by fossil.
338338
*/
339
-void fossil_atexit(void) {
339
+static void fossil_atexit(void) {
340340
#ifdef FOSSIL_ENABLE_JSON
341341
cson_value_free(g.json.gc.v);
342342
memset(&g.json, 0, sizeof(g.json));
343343
#endif
344344
free(g.zErrMsg);
@@ -455,10 +455,49 @@
455455
}
456456
return zNewArgv;
457457
}
458458
#endif
459459
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
+}
460499
461500
/*
462501
** This procedure runs first.
463502
*/
464503
#if defined(_WIN32) && !defined(BROKEN_MINGW_CMDLINE)
@@ -562,252 +601,10 @@
562601
fossil_exit(0);
563602
/*NOT_REACHED*/
564603
return 0;
565604
}
566605
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
-
809606
/*
810607
** Print a usage comment and quit
811608
*/
812609
void usage(const char *zFormat){
813610
fossil_fatal("Usage: %s %s %s\n", g.argv[0], g.argv[1], zFormat);
@@ -814,11 +611,11 @@
814611
}
815612
816613
/*
817614
** Remove n elements from g.argv beginning with the i-th element.
818615
*/
819
-void remove_from_argv(int i, int n){
616
+static void remove_from_argv(int i, int n){
820617
int j;
821618
for(j=i+n; j<g.argc; i++, j++){
822619
g.argv[i] = g.argv[j];
823620
}
824621
g.argc = i;
@@ -1503,10 +1300,61 @@
15031300
15041301
/* Return the result.
15051302
*/
15061303
cgi_reply();
15071304
}
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
+}
15081356
15091357
/*
15101358
** COMMAND: cgi*
15111359
**
15121360
** Usage: %fossil ?cgi? SCRIPT
@@ -1603,61 +1451,10 @@
16031451
}else{
16041452
process_one_web_page(zNotFound, pFileGlob);
16051453
}
16061454
}
16071455
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
-
16591456
/*
16601457
** If g.argv[2] exists then it is either the name of a repository
16611458
** that will be used by a server, or else it is a directory that
16621459
** contains multiple repositories that can be served. If g.argv[2]
16631460
** is a directory, the repositories it contains must be named
16641461
--- 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 @@
107107
$(SRCDIR)/unicode.c \
108108
$(SRCDIR)/update.c \
109109
$(SRCDIR)/url.c \
110110
$(SRCDIR)/user.c \
111111
$(SRCDIR)/utf8.c \
112
+ $(SRCDIR)/util.c \
112113
$(SRCDIR)/verify.c \
113114
$(SRCDIR)/vfile.c \
114115
$(SRCDIR)/wiki.c \
115116
$(SRCDIR)/wikiformat.c \
116117
$(SRCDIR)/winhttp.c \
@@ -213,10 +214,11 @@
213214
$(OBJDIR)/unicode_.c \
214215
$(OBJDIR)/update_.c \
215216
$(OBJDIR)/url_.c \
216217
$(OBJDIR)/user_.c \
217218
$(OBJDIR)/utf8_.c \
219
+ $(OBJDIR)/util_.c \
218220
$(OBJDIR)/verify_.c \
219221
$(OBJDIR)/vfile_.c \
220222
$(OBJDIR)/wiki_.c \
221223
$(OBJDIR)/wikiformat_.c \
222224
$(OBJDIR)/winhttp_.c \
@@ -319,10 +321,11 @@
319321
$(OBJDIR)/unicode.o \
320322
$(OBJDIR)/update.o \
321323
$(OBJDIR)/url.o \
322324
$(OBJDIR)/user.o \
323325
$(OBJDIR)/utf8.o \
326
+ $(OBJDIR)/util.o \
324327
$(OBJDIR)/verify.o \
325328
$(OBJDIR)/vfile.o \
326329
$(OBJDIR)/wiki.o \
327330
$(OBJDIR)/wikiformat.o \
328331
$(OBJDIR)/winhttp.o \
@@ -396,11 +399,11 @@
396399
397400
398401
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
399402
$(OBJDIR)/mkindex $(TRANS_SRC) >$@
400403
$(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
402405
touch $(OBJDIR)/headers
403406
$(OBJDIR)/headers: Makefile
404407
$(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
405408
Makefile:
406409
$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -1066,10 +1069,17 @@
10661069
10671070
$(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h
10681071
$(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c
10691072
10701073
$(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
10711081
$(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate
10721082
$(OBJDIR)/translate $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c
10731083
10741084
$(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h
10751085
$(XTCC) -o $(OBJDIR)/verify.o -c $(OBJDIR)/verify_.c
10761086
--- 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
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -110,10 +110,11 @@
110110
unicode
111111
update
112112
url
113113
user
114114
utf8
115
+ util
115116
verify
116117
vfile
117118
wiki
118119
wikiformat
119120
winhttp
120121
--- 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 @@
1313
** [email protected]
1414
** http://www.hwaci.com/drh/
1515
**
1616
*******************************************************************************
1717
**
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.
1920
*/
2021
#include "config.h"
2122
#include "printf.h"
2223
2324
/*
@@ -888,70 +889,154 @@
888889
fossil_puts(blob_str(&b), 1);
889890
blob_reset(&b);
890891
va_end(ap);
891892
}
892893
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
9571042
}
9581043
--- 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 @@
8282
*/
8383
static void process_sync_args(unsigned *pConfigFlags, unsigned *pSyncFlags){
8484
const char *zUrl = 0;
8585
unsigned configSync = 0;
8686
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
+ }
8892
if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER;
8993
if( find_option("private",0,0)!=0 ){
9094
*pSyncFlags |= SYNC_PRIVATE;
9195
}
9296
if( find_option("verbose","v",0)!=0 ){
9397
--- 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 @@
428428
/*
429429
** Prompt the user for the password for g.urlUser. Store the result
430430
** in g.urlPasswd.
431431
*/
432432
void url_prompt_for_password(void){
433
- if( isatty(fileno(stdin)) ){
433
+ if( isatty(fileno(stdin)) && (g.urlFlags & URL_PROMPT_PW)!=0 ){
434434
char *zPrompt = mprintf("\rpassword for %s: ", g.urlUser);
435435
Blob x;
436436
fossil_force_newline();
437437
prompt_for_password(zPrompt, &x, 0);
438438
free(zPrompt);
@@ -464,11 +464,11 @@
464464
void url_remember(void){
465465
db_set("last-sync-url", g.urlCanonical, 0);
466466
if( g.urlFlags & URL_REMEMBER_PW ){
467467
db_set("last-sync-pw", obscure(g.urlPasswd), 0);
468468
}
469
- g.urlFlags = URL_REMEMBER;
469
+ g.urlFlags |= URL_REMEMBER;
470470
}
471471
472472
/* Preemptively prompt for a password if a username is given in the
473473
** URL but no password.
474474
*/
475475
476476
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 @@
2626
TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
2727
LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32
2828
2929
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
3030
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
3232
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
3434
3535
3636
RC=$(DMDIR)\bin\rcc
3737
RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
3838
@@ -46,11 +46,11 @@
4646
4747
$(OBJDIR)\fossil.res: $B\win\fossil.rc
4848
$(RC) $(RCFLAGS) -o$@ $**
4949
5050
$(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 > $@
5252
+echo fossil >> $@
5353
+echo fossil >> $@
5454
+echo $(LIBS) >> $@
5555
+echo. >> $@
5656
+echo fossil >> $@
@@ -679,10 +679,16 @@
679679
$(OBJDIR)\utf8$O : utf8_.c utf8.h
680680
$(TCC) -o$@ -c utf8_.c
681681
682682
utf8_.c : $(SRCDIR)\utf8.c
683683
+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 $** > $@
684690
685691
$(OBJDIR)\verify$O : verify_.c verify.h
686692
$(TCC) -o$@ -c verify_.c
687693
688694
verify_.c : $(SRCDIR)\verify.c
@@ -735,7 +741,7 @@
735741
736742
zip_.c : $(SRCDIR)\zip.c
737743
+translate$E $** > $@
738744
739745
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
741747
@copy /Y nul: headers
742748
--- 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
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -348,10 +348,11 @@
348348
$(SRCDIR)/unicode.c \
349349
$(SRCDIR)/update.c \
350350
$(SRCDIR)/url.c \
351351
$(SRCDIR)/user.c \
352352
$(SRCDIR)/utf8.c \
353
+ $(SRCDIR)/util.c \
353354
$(SRCDIR)/verify.c \
354355
$(SRCDIR)/vfile.c \
355356
$(SRCDIR)/wiki.c \
356357
$(SRCDIR)/wikiformat.c \
357358
$(SRCDIR)/winhttp.c \
@@ -454,10 +455,11 @@
454455
$(OBJDIR)/unicode_.c \
455456
$(OBJDIR)/update_.c \
456457
$(OBJDIR)/url_.c \
457458
$(OBJDIR)/user_.c \
458459
$(OBJDIR)/utf8_.c \
460
+ $(OBJDIR)/util_.c \
459461
$(OBJDIR)/verify_.c \
460462
$(OBJDIR)/vfile_.c \
461463
$(OBJDIR)/wiki_.c \
462464
$(OBJDIR)/wikiformat_.c \
463465
$(OBJDIR)/winhttp_.c \
@@ -560,10 +562,11 @@
560562
$(OBJDIR)/unicode.o \
561563
$(OBJDIR)/update.o \
562564
$(OBJDIR)/url.o \
563565
$(OBJDIR)/user.o \
564566
$(OBJDIR)/utf8.o \
567
+ $(OBJDIR)/util.o \
565568
$(OBJDIR)/verify.o \
566569
$(OBJDIR)/vfile.o \
567570
$(OBJDIR)/wiki.o \
568571
$(OBJDIR)/wikiformat.o \
569572
$(OBJDIR)/winhttp.o \
@@ -779,10 +782,11 @@
779782
$(OBJDIR)/unicode_.c:$(OBJDIR)/unicode.h \
780783
$(OBJDIR)/update_.c:$(OBJDIR)/update.h \
781784
$(OBJDIR)/url_.c:$(OBJDIR)/url.h \
782785
$(OBJDIR)/user_.c:$(OBJDIR)/user.h \
783786
$(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \
787
+ $(OBJDIR)/util_.c:$(OBJDIR)/util.h \
784788
$(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \
785789
$(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \
786790
$(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \
787791
$(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \
788792
$(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \
@@ -1556,10 +1560,18 @@
15561560
15571561
$(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h
15581562
$(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c
15591563
15601564
$(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
15611573
15621574
$(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate
15631575
$(TRANSLATE) $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c
15641576
15651577
$(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h
15661578
--- 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
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -150,10 +150,11 @@
150150
unicode_.c \
151151
update_.c \
152152
url_.c \
153153
user_.c \
154154
utf8_.c \
155
+ util_.c \
155156
verify_.c \
156157
vfile_.c \
157158
wiki_.c \
158159
wikiformat_.c \
159160
winhttp_.c \
@@ -260,10 +261,11 @@
260261
$(OX)\unicode$O \
261262
$(OX)\update$O \
262263
$(OX)\url$O \
263264
$(OX)\user$O \
264265
$(OX)\utf8$O \
266
+ $(OX)\util$O \
265267
$(OX)\verify$O \
266268
$(OX)\vfile$O \
267269
$(OX)\wiki$O \
268270
$(OX)\wikiformat$O \
269271
$(OX)\winhttp$O \
@@ -384,10 +386,11 @@
384386
echo $(OX)\unicode.obj >> $@
385387
echo $(OX)\update.obj >> $@
386388
echo $(OX)\url.obj >> $@
387389
echo $(OX)\user.obj >> $@
388390
echo $(OX)\utf8.obj >> $@
391
+ echo $(OX)\util.obj >> $@
389392
echo $(OX)\verify.obj >> $@
390393
echo $(OX)\vfile.obj >> $@
391394
echo $(OX)\wiki.obj >> $@
392395
echo $(OX)\wikiformat.obj >> $@
393396
echo $(OX)\winhttp.obj >> $@
@@ -1036,10 +1039,16 @@
10361039
$(OX)\utf8$O : utf8_.c utf8.h
10371040
$(TCC) /Fo$@ -c utf8_.c
10381041
10391042
utf8_.c : $(SRCDIR)\utf8.c
10401043
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 $** > $@
10411050
10421051
$(OX)\verify$O : verify_.c verify.h
10431052
$(TCC) /Fo$@ -c verify_.c
10441053
10451054
verify_.c : $(SRCDIR)\verify.c
@@ -1189,10 +1198,11 @@
11891198
unicode_.c:unicode.h \
11901199
update_.c:update.h \
11911200
url_.c:url.h \
11921201
user_.c:user.h \
11931202
utf8_.c:utf8.h \
1203
+ util_.c:util.h \
11941204
verify_.c:verify.h \
11951205
vfile_.c:vfile.h \
11961206
wiki_.c:wiki.h \
11971207
wikiformat_.c:wikiformat.h \
11981208
winhttp_.c:winhttp.h \
11991209
--- 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

Keyboard Shortcuts

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