aboutsummaryrefslogtreecommitdiff
path: root/src/backup.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2009-06-02 21:31:38 +0000
committerdrh <drh@noemail.net>2009-06-02 21:31:38 +0000
commite98c9049a0a56ea8c3a704a986298f1dc5a9af2f (patch)
treec2050cc77cfe5f1db7bd7619d17453b97a025cba /src/backup.c
parentc54a617e1ff59a717960a876977b7c56f2276715 (diff)
downloadsqlite-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.c25
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 ){