diff options
author | drh <drh@noemail.net> | 2009-06-02 21:31:38 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2009-06-02 21:31:38 +0000 |
commit | e98c9049a0a56ea8c3a704a986298f1dc5a9af2f (patch) | |
tree | c2050cc77cfe5f1db7bd7619d17453b97a025cba /src/backup.c | |
parent | c54a617e1ff59a717960a876977b7c56f2276715 (diff) | |
download | sqlite-e98c9049a0a56ea8c3a704a986298f1dc5a9af2f.tar.gz sqlite-e98c9049a0a56ea8c3a704a986298f1dc5a9af2f.zip |
Further reductions in the amount of stack space required. (CVS 6707)
FossilOrigin-Name: 04bad9eb6dd8bf7cafc9f3918b676e95d5b1c984
Diffstat (limited to 'src/backup.c')
-rw-r--r-- | src/backup.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/backup.c b/src/backup.c index e0ab5d882..a1cb85503 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.15 2009/05/14 19:26:51 drh Exp $ +** $Id: backup.c,v 1.16 2009/06/02 21:31:39 drh Exp $ */ #include "sqliteInt.h" #include "btreeInt.h" @@ -91,15 +91,24 @@ static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){ int i = sqlite3FindDbName(pDb, zDb); if( i==1 ){ - Parse sParse; - memset(&sParse, 0, sizeof(sParse)); - sParse.db = pDb; - if( sqlite3OpenTempDatabase(&sParse) ){ - sqlite3ErrorClear(&sParse); - sqlite3Error(pErrorDb, sParse.rc, "%s", sParse.zErrMsg); + Parse *pParse; + int rc = 0; + pParse = sqlite3StackAllocZero(pErrorDb, sizeof(*pParse)); + if( pParse==0 ){ + sqlite3Error(pErrorDb, SQLITE_NOMEM, "out of memory"); + rc = SQLITE_NOMEM; + }else{ + pParse->db = pDb; + if( sqlite3OpenTempDatabase(pParse) ){ + sqlite3ErrorClear(pParse); + sqlite3Error(pErrorDb, pParse->rc, "%s", pParse->zErrMsg); + rc = SQLITE_ERROR; + } + sqlite3StackFree(pErrorDb, pParse); + } + if( rc ){ return 0; } - assert( sParse.zErrMsg==0 ); } if( i<0 ){ |