aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordan <dan@noemail.net>2010-08-12 16:36:34 +0000
committerdan <dan@noemail.net>2010-08-12 16:36:34 +0000
commit1879b088bd447dc8fcb50a63dba84e4d462e44f9 (patch)
tree15e9534fb4b56c7f11f2e53bf80cd02cfad3ff07 /src
parent5653e4da365d8f27e9f2e91baaee5d6a08ebb279 (diff)
downloadsqlite-1879b088bd447dc8fcb50a63dba84e4d462e44f9.tar.gz
sqlite-1879b088bd447dc8fcb50a63dba84e4d462e44f9.zip
If an error occurs in PagerSetPagesize(), set the output variable to the unmodified page-size before returning.
FossilOrigin-Name: 02def8f92588b8a45dff3976d1e7f9e3f0359b3b
Diffstat (limited to 'src')
-rw-r--r--src/pager.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/pager.c b/src/pager.c
index 3a7afd17c..0ad95b123 100644
--- a/src/pager.c
+++ b/src/pager.c
@@ -3354,6 +3354,8 @@ void sqlite3PagerSetBusyhandler(
** then *pPageSize is set to the old, retained page size before returning.
*/
int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){
+ int rc = SQLITE_OK;
+
/* It is not possible to do a full assert_pager_state() here, as this
** function may be called from within PagerOpen(), before the state
** of the Pager object is internally consistent.
@@ -3372,14 +3374,16 @@ int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){
){
char *pNew; /* New temp space */
i64 nByte = 0;
+
if( pPager->eState>PAGER_OPEN && isOpen(pPager->fd) ){
- int rc = sqlite3OsFileSize(pPager->fd, &nByte);
- if( rc!=SQLITE_OK ) return rc;
+ rc = sqlite3OsFileSize(pPager->fd, &nByte);
}
- pNew = (char *)sqlite3PageMalloc(pageSize);
- if( !pNew ){
- return SQLITE_NOMEM;
- }else{
+ if( rc==SQLITE_OK ){
+ pNew = (char *)sqlite3PageMalloc(pageSize);
+ if( !pNew ) rc = SQLITE_NOMEM;
+ }
+
+ if( rc==SQLITE_OK ){
pager_reset(pPager);
pPager->dbSize = nByte/pageSize;
pPager->pageSize = pageSize;
@@ -3390,11 +3394,13 @@ int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){
}
*pPageSize = pPager->pageSize;
- if( nReserve<0 ) nReserve = pPager->nReserve;
- assert( nReserve>=0 && nReserve<1000 );
- pPager->nReserve = (i16)nReserve;
- pagerReportSize(pPager);
- return SQLITE_OK;
+ if( rc==SQLITE_OK ){
+ if( nReserve<0 ) nReserve = pPager->nReserve;
+ assert( nReserve>=0 && nReserve<1000 );
+ pPager->nReserve = (i16)nReserve;
+ pagerReportSize(pPager);
+ }
+ return rc;
}
/*