Fossil SCM
Import the latest version of tmstmpvfs.c.
Commit
0529ecd95d56347b119ee541626835b9a1aefba3c8249ed736ec0ff32b96a367
Parent
6cb48bf66adf3a8…
1 file changed
+10
-6
+10
-6
| --- extsrc/tmstmpvfs.c | ||
| +++ extsrc/tmstmpvfs.c | ||
| @@ -482,10 +482,11 @@ | ||
| 482 | 482 | } |
| 483 | 483 | |
| 484 | 484 | /* Free a TmstmpLog object */ |
| 485 | 485 | static void tmstmpLogFree(TmstmpLog *pLog){ |
| 486 | 486 | if( pLog==0 ) return; |
| 487 | + if( pLog->log ) fclose(pLog->log); | |
| 487 | 488 | sqlite3_free(pLog->zLogname); |
| 488 | 489 | sqlite3_free(pLog); |
| 489 | 490 | } |
| 490 | 491 | |
| 491 | 492 | /* Flush log content. Open the file if necessary. Return the |
| @@ -500,10 +501,11 @@ | ||
| 500 | 501 | p->pLog = 0; |
| 501 | 502 | return 1; |
| 502 | 503 | } |
| 503 | 504 | } |
| 504 | 505 | (void)fwrite(pLog->a, pLog->n, 1, pLog->log); |
| 506 | + fflush(pLog->log); | |
| 505 | 507 | pLog->n = 0; |
| 506 | 508 | return 0; |
| 507 | 509 | } |
| 508 | 510 | |
| 509 | 511 | /* |
| @@ -617,11 +619,11 @@ | ||
| 617 | 619 | if( iAmt==24 ){ |
| 618 | 620 | /* A frame header */ |
| 619 | 621 | u32 x = 0; |
| 620 | 622 | p->iFrame = (iOfst - 32)/(p->pgsz+24)+1; |
| 621 | 623 | p->pgno = tmstmpGetU32((const u8*)zBuf); |
| 622 | - p->salt1 = tmstmpGetU32(((const u8*)zBuf)+16); | |
| 624 | + p->salt1 = tmstmpGetU32(((const u8*)zBuf)+8); | |
| 623 | 625 | memcpy(&x, ((const u8*)zBuf)+4, 4); |
| 624 | 626 | p->isCommit = (x!=0); |
| 625 | 627 | p->iOfst = iOfst; |
| 626 | 628 | }else if( iAmt>=512 && iOfst==p->iOfst+24 ){ |
| 627 | 629 | unsigned char s[TMSTMP_RESERVE]; |
| @@ -635,21 +637,21 @@ | ||
| 635 | 637 | }else if( p->inCkpt ){ |
| 636 | 638 | unsigned char *s = (unsigned char*)zBuf+iAmt-TMSTMP_RESERVE; |
| 637 | 639 | memset(s, 0, TMSTMP_RESERVE); |
| 638 | 640 | tmstmpPutTS(p, s+2); |
| 639 | 641 | tmstmpPutU32(p->iFrame, s+8); |
| 640 | - tmstmpPutU32(p->pPartner->salt1, s+12); | |
| 642 | + tmstmpPutU32(p->pPartner->salt1 & 0xffffff, s+12); | |
| 641 | 643 | assert( p->pgsz>0 ); |
| 642 | 644 | tmstmpEvent(p, ELOG_CKPT_PAGE, 0, (iOfst/p->pgsz)+1, p->iFrame, 0); |
| 643 | 645 | }else if( p->pPartner==0 ){ |
| 644 | 646 | /* Writing into a database in rollback mode */ |
| 645 | 647 | unsigned char *s = (unsigned char*)zBuf+iAmt-TMSTMP_RESERVE; |
| 646 | 648 | memset(s, 0, TMSTMP_RESERVE); |
| 647 | 649 | tmstmpPutTS(p, s+2); |
| 648 | 650 | s[12] = 2; |
| 649 | 651 | assert( p->pgsz>0 ); |
| 650 | - tmstmpEvent(p, ELOG_DB_PAGE, 0, (u32)(iOfst/p->pgsz), 0, s+2); | |
| 652 | + tmstmpEvent(p, ELOG_DB_PAGE, 0, (u32)(iOfst/p->pgsz)+1, 0, s+2); | |
| 651 | 653 | } |
| 652 | 654 | return pSub->pMethods->xWrite(pSub,zBuf,iAmt,iOfst); |
| 653 | 655 | } |
| 654 | 656 | |
| 655 | 657 | /* |
| @@ -857,11 +859,11 @@ | ||
| 857 | 859 | u32 r2; |
| 858 | 860 | u32 pid; |
| 859 | 861 | TmstmpLog *pLog; |
| 860 | 862 | sqlite3_uint64 r1; /* Milliseconds since 1970-01-01 */ |
| 861 | 863 | sqlite3_uint64 days; /* Days since 1970-01-01 */ |
| 862 | - sqlite3_uint64 sod; /* Start of date specified by ms */ | |
| 864 | + sqlite3_uint64 sod; /* Start of date specified by r1 */ | |
| 863 | 865 | sqlite3_uint64 z; /* Days since 0000-03-01 */ |
| 864 | 866 | sqlite3_uint64 era; /* 400-year era */ |
| 865 | 867 | int h; /* hour */ |
| 866 | 868 | int m; /* minute */ |
| 867 | 869 | int s; /* second */ |
| @@ -877,11 +879,13 @@ | ||
| 877 | 879 | |
| 878 | 880 | p->isDb = 1; |
| 879 | 881 | r1 = 0; |
| 880 | 882 | pLog = sqlite3_malloc64( sizeof(TmstmpLog) ); |
| 881 | 883 | if( pLog==0 ){ |
| 882 | - return SQLITE_NOMEM; | |
| 884 | + pSubFile->pMethods->xClose(pSubFile); | |
| 885 | + rc = SQLITE_NOMEM; | |
| 886 | + goto tmstmp_open_done; | |
| 883 | 887 | } |
| 884 | 888 | memset(pLog, 0, sizeof(pLog[0])); |
| 885 | 889 | p->pLog = pLog; |
| 886 | 890 | p->pSubVfs->xCurrentTimeInt64(p->pSubVfs, (sqlite3_int64*)&r1); |
| 887 | 891 | r1 -= 210866760000000LL; |
| @@ -891,11 +895,11 @@ | ||
| 891 | 895 | |
| 892 | 896 | h = sod/3600; |
| 893 | 897 | m = (sod%3600)/60; |
| 894 | 898 | s = sod%60; |
| 895 | 899 | z = days + 719468; |
| 896 | - era = z/147097; | |
| 900 | + era = z/146097; | |
| 897 | 901 | doe = (unsigned)(z - era*146097); |
| 898 | 902 | yoe = (doe - doe/1460 + doe/36524 - doe/146096)/365; |
| 899 | 903 | y = (int)yoe + era*400; |
| 900 | 904 | doy = doe - (365*yoe + yoe/4 - yoe/100); |
| 901 | 905 | mp = (5*doy + 2)/153; |
| 902 | 906 |
| --- extsrc/tmstmpvfs.c | |
| +++ extsrc/tmstmpvfs.c | |
| @@ -482,10 +482,11 @@ | |
| 482 | } |
| 483 | |
| 484 | /* Free a TmstmpLog object */ |
| 485 | static void tmstmpLogFree(TmstmpLog *pLog){ |
| 486 | if( pLog==0 ) return; |
| 487 | sqlite3_free(pLog->zLogname); |
| 488 | sqlite3_free(pLog); |
| 489 | } |
| 490 | |
| 491 | /* Flush log content. Open the file if necessary. Return the |
| @@ -500,10 +501,11 @@ | |
| 500 | p->pLog = 0; |
| 501 | return 1; |
| 502 | } |
| 503 | } |
| 504 | (void)fwrite(pLog->a, pLog->n, 1, pLog->log); |
| 505 | pLog->n = 0; |
| 506 | return 0; |
| 507 | } |
| 508 | |
| 509 | /* |
| @@ -617,11 +619,11 @@ | |
| 617 | if( iAmt==24 ){ |
| 618 | /* A frame header */ |
| 619 | u32 x = 0; |
| 620 | p->iFrame = (iOfst - 32)/(p->pgsz+24)+1; |
| 621 | p->pgno = tmstmpGetU32((const u8*)zBuf); |
| 622 | p->salt1 = tmstmpGetU32(((const u8*)zBuf)+16); |
| 623 | memcpy(&x, ((const u8*)zBuf)+4, 4); |
| 624 | p->isCommit = (x!=0); |
| 625 | p->iOfst = iOfst; |
| 626 | }else if( iAmt>=512 && iOfst==p->iOfst+24 ){ |
| 627 | unsigned char s[TMSTMP_RESERVE]; |
| @@ -635,21 +637,21 @@ | |
| 635 | }else if( p->inCkpt ){ |
| 636 | unsigned char *s = (unsigned char*)zBuf+iAmt-TMSTMP_RESERVE; |
| 637 | memset(s, 0, TMSTMP_RESERVE); |
| 638 | tmstmpPutTS(p, s+2); |
| 639 | tmstmpPutU32(p->iFrame, s+8); |
| 640 | tmstmpPutU32(p->pPartner->salt1, s+12); |
| 641 | assert( p->pgsz>0 ); |
| 642 | tmstmpEvent(p, ELOG_CKPT_PAGE, 0, (iOfst/p->pgsz)+1, p->iFrame, 0); |
| 643 | }else if( p->pPartner==0 ){ |
| 644 | /* Writing into a database in rollback mode */ |
| 645 | unsigned char *s = (unsigned char*)zBuf+iAmt-TMSTMP_RESERVE; |
| 646 | memset(s, 0, TMSTMP_RESERVE); |
| 647 | tmstmpPutTS(p, s+2); |
| 648 | s[12] = 2; |
| 649 | assert( p->pgsz>0 ); |
| 650 | tmstmpEvent(p, ELOG_DB_PAGE, 0, (u32)(iOfst/p->pgsz), 0, s+2); |
| 651 | } |
| 652 | return pSub->pMethods->xWrite(pSub,zBuf,iAmt,iOfst); |
| 653 | } |
| 654 | |
| 655 | /* |
| @@ -857,11 +859,11 @@ | |
| 857 | u32 r2; |
| 858 | u32 pid; |
| 859 | TmstmpLog *pLog; |
| 860 | sqlite3_uint64 r1; /* Milliseconds since 1970-01-01 */ |
| 861 | sqlite3_uint64 days; /* Days since 1970-01-01 */ |
| 862 | sqlite3_uint64 sod; /* Start of date specified by ms */ |
| 863 | sqlite3_uint64 z; /* Days since 0000-03-01 */ |
| 864 | sqlite3_uint64 era; /* 400-year era */ |
| 865 | int h; /* hour */ |
| 866 | int m; /* minute */ |
| 867 | int s; /* second */ |
| @@ -877,11 +879,13 @@ | |
| 877 | |
| 878 | p->isDb = 1; |
| 879 | r1 = 0; |
| 880 | pLog = sqlite3_malloc64( sizeof(TmstmpLog) ); |
| 881 | if( pLog==0 ){ |
| 882 | return SQLITE_NOMEM; |
| 883 | } |
| 884 | memset(pLog, 0, sizeof(pLog[0])); |
| 885 | p->pLog = pLog; |
| 886 | p->pSubVfs->xCurrentTimeInt64(p->pSubVfs, (sqlite3_int64*)&r1); |
| 887 | r1 -= 210866760000000LL; |
| @@ -891,11 +895,11 @@ | |
| 891 | |
| 892 | h = sod/3600; |
| 893 | m = (sod%3600)/60; |
| 894 | s = sod%60; |
| 895 | z = days + 719468; |
| 896 | era = z/147097; |
| 897 | doe = (unsigned)(z - era*146097); |
| 898 | yoe = (doe - doe/1460 + doe/36524 - doe/146096)/365; |
| 899 | y = (int)yoe + era*400; |
| 900 | doy = doe - (365*yoe + yoe/4 - yoe/100); |
| 901 | mp = (5*doy + 2)/153; |
| 902 |
| --- extsrc/tmstmpvfs.c | |
| +++ extsrc/tmstmpvfs.c | |
| @@ -482,10 +482,11 @@ | |
| 482 | } |
| 483 | |
| 484 | /* Free a TmstmpLog object */ |
| 485 | static void tmstmpLogFree(TmstmpLog *pLog){ |
| 486 | if( pLog==0 ) return; |
| 487 | if( pLog->log ) fclose(pLog->log); |
| 488 | sqlite3_free(pLog->zLogname); |
| 489 | sqlite3_free(pLog); |
| 490 | } |
| 491 | |
| 492 | /* Flush log content. Open the file if necessary. Return the |
| @@ -500,10 +501,11 @@ | |
| 501 | p->pLog = 0; |
| 502 | return 1; |
| 503 | } |
| 504 | } |
| 505 | (void)fwrite(pLog->a, pLog->n, 1, pLog->log); |
| 506 | fflush(pLog->log); |
| 507 | pLog->n = 0; |
| 508 | return 0; |
| 509 | } |
| 510 | |
| 511 | /* |
| @@ -617,11 +619,11 @@ | |
| 619 | if( iAmt==24 ){ |
| 620 | /* A frame header */ |
| 621 | u32 x = 0; |
| 622 | p->iFrame = (iOfst - 32)/(p->pgsz+24)+1; |
| 623 | p->pgno = tmstmpGetU32((const u8*)zBuf); |
| 624 | p->salt1 = tmstmpGetU32(((const u8*)zBuf)+8); |
| 625 | memcpy(&x, ((const u8*)zBuf)+4, 4); |
| 626 | p->isCommit = (x!=0); |
| 627 | p->iOfst = iOfst; |
| 628 | }else if( iAmt>=512 && iOfst==p->iOfst+24 ){ |
| 629 | unsigned char s[TMSTMP_RESERVE]; |
| @@ -635,21 +637,21 @@ | |
| 637 | }else if( p->inCkpt ){ |
| 638 | unsigned char *s = (unsigned char*)zBuf+iAmt-TMSTMP_RESERVE; |
| 639 | memset(s, 0, TMSTMP_RESERVE); |
| 640 | tmstmpPutTS(p, s+2); |
| 641 | tmstmpPutU32(p->iFrame, s+8); |
| 642 | tmstmpPutU32(p->pPartner->salt1 & 0xffffff, s+12); |
| 643 | assert( p->pgsz>0 ); |
| 644 | tmstmpEvent(p, ELOG_CKPT_PAGE, 0, (iOfst/p->pgsz)+1, p->iFrame, 0); |
| 645 | }else if( p->pPartner==0 ){ |
| 646 | /* Writing into a database in rollback mode */ |
| 647 | unsigned char *s = (unsigned char*)zBuf+iAmt-TMSTMP_RESERVE; |
| 648 | memset(s, 0, TMSTMP_RESERVE); |
| 649 | tmstmpPutTS(p, s+2); |
| 650 | s[12] = 2; |
| 651 | assert( p->pgsz>0 ); |
| 652 | tmstmpEvent(p, ELOG_DB_PAGE, 0, (u32)(iOfst/p->pgsz)+1, 0, s+2); |
| 653 | } |
| 654 | return pSub->pMethods->xWrite(pSub,zBuf,iAmt,iOfst); |
| 655 | } |
| 656 | |
| 657 | /* |
| @@ -857,11 +859,11 @@ | |
| 859 | u32 r2; |
| 860 | u32 pid; |
| 861 | TmstmpLog *pLog; |
| 862 | sqlite3_uint64 r1; /* Milliseconds since 1970-01-01 */ |
| 863 | sqlite3_uint64 days; /* Days since 1970-01-01 */ |
| 864 | sqlite3_uint64 sod; /* Start of date specified by r1 */ |
| 865 | sqlite3_uint64 z; /* Days since 0000-03-01 */ |
| 866 | sqlite3_uint64 era; /* 400-year era */ |
| 867 | int h; /* hour */ |
| 868 | int m; /* minute */ |
| 869 | int s; /* second */ |
| @@ -877,11 +879,13 @@ | |
| 879 | |
| 880 | p->isDb = 1; |
| 881 | r1 = 0; |
| 882 | pLog = sqlite3_malloc64( sizeof(TmstmpLog) ); |
| 883 | if( pLog==0 ){ |
| 884 | pSubFile->pMethods->xClose(pSubFile); |
| 885 | rc = SQLITE_NOMEM; |
| 886 | goto tmstmp_open_done; |
| 887 | } |
| 888 | memset(pLog, 0, sizeof(pLog[0])); |
| 889 | p->pLog = pLog; |
| 890 | p->pSubVfs->xCurrentTimeInt64(p->pSubVfs, (sqlite3_int64*)&r1); |
| 891 | r1 -= 210866760000000LL; |
| @@ -891,11 +895,11 @@ | |
| 895 | |
| 896 | h = sod/3600; |
| 897 | m = (sod%3600)/60; |
| 898 | s = sod%60; |
| 899 | z = days + 719468; |
| 900 | era = z/146097; |
| 901 | doe = (unsigned)(z - era*146097); |
| 902 | yoe = (doe - doe/1460 + doe/36524 - doe/146096)/365; |
| 903 | y = (int)yoe + era*400; |
| 904 | doy = doe - (365*yoe + yoe/4 - yoe/100); |
| 905 | mp = (5*doy + 2)/153; |
| 906 |