diff options
author | danielk1977 <danielk1977@noemail.net> | 2009-02-12 17:01:49 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2009-02-12 17:01:49 +0000 |
commit | f2a79f2248e18d9c28a18ff509b8b9a10f2c3d37 (patch) | |
tree | 5604a5a19eef9cef63e033371cb7c01e6f873ff9 /src/backup.c | |
parent | 1435ccd52baed46a3c796160b15275a81f3e571a (diff) | |
download | sqlite-f2a79f2248e18d9c28a18ff509b8b9a10f2c3d37.tar.gz sqlite-f2a79f2248e18d9c28a18ff509b8b9a10f2c3d37.zip |
Fix some edge cases with backing up databases that are exactly PENDING_BYTE bytes in size, or just slightly larger. (CVS 6288)
FossilOrigin-Name: 2fc450e8e60248d6111d0b0d2b8f2344f5b89bca
Diffstat (limited to 'src/backup.c')
-rw-r--r-- | src/backup.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/backup.c b/src/backup.c index cda0263a3..aef1fd4b2 100644 --- a/src/backup.c +++ b/src/backup.c @@ -12,7 +12,7 @@ ** This file contains the implementation of the sqlite3_backup_XXX() ** API functions and the related features. ** -** $Id: backup.c,v 1.9 2009/02/09 18:55:46 danielk1977 Exp $ +** $Id: backup.c,v 1.10 2009/02/12 17:01:50 danielk1977 Exp $ */ #include "sqliteInt.h" #include "btreeInt.h" @@ -373,6 +373,9 @@ int sqlite3_backup_step(sqlite3_backup *p, int nPage){ if( nSrcPagesize<nDestPagesize ){ int ratio = nDestPagesize/nSrcPagesize; nDestTruncate = (nSrcPage+ratio-1)/ratio; + if( nDestTruncate==PENDING_BYTE_PAGE(p->pDest->pBt) ){ + nDestTruncate--; + } }else{ nDestTruncate = nSrcPage * (nSrcPagesize/nDestPagesize); } @@ -392,7 +395,10 @@ int sqlite3_backup_step(sqlite3_backup *p, int nPage){ sqlite3_file * const pFile = sqlite3PagerFile(pDestPager); assert( pFile ); - assert( (i64)nDestTruncate*(i64)nDestPagesize >= iSize ); + assert( (i64)nDestTruncate*(i64)nDestPagesize >= iSize || ( + nDestTruncate==(PENDING_BYTE_PAGE(p->pDest->pBt)-1) + && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+nDestPagesize + )); if( SQLITE_OK==(rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1)) && SQLITE_OK==(rc = backupTruncateFile(pFile, iSize)) && SQLITE_OK==(rc = sqlite3PagerSync(pDestPager)) |