diff options
author | danielk1977 <danielk1977@noemail.net> | 2008-08-27 19:01:57 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2008-08-27 19:01:57 +0000 |
commit | 59633aeec2ba9190b966b74ccdb0b7c524eb6bf7 (patch) | |
tree | ce9c2308400bbe1b369d849a9335d6761dc69cfc /src | |
parent | 255538e947f55a3c7a8aeb520a258653dbbd4810 (diff) | |
download | sqlite-59633aeec2ba9190b966b74ccdb0b7c524eb6bf7.tar.gz sqlite-59633aeec2ba9190b966b74ccdb0b7c524eb6bf7.zip |
If any error occurs during sqlite3_open(), move the database handle into "sick" state. When in the sick state the user can use sqlite3_errcode() and sqlite3_errmsg(), but not much else. (CVS 5628)
FossilOrigin-Name: ce9c74eaab459ddde213c828e821940f5d6cb354
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/main.c b/src/main.c index ee19e5e5c..a8aba7ed0 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,7 @@ ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** -** $Id: main.c,v 1.493 2008/08/21 20:21:35 drh Exp $ +** $Id: main.c,v 1.494 2008/08/27 19:01:58 danielk1977 Exp $ */ #include "sqliteInt.h" #include <ctype.h> @@ -1481,7 +1481,6 @@ static int openDatabase( db->pVfs = sqlite3_vfs_find(zVfs); if( !db->pVfs ){ rc = SQLITE_ERROR; - db->magic = SQLITE_MAGIC_SICK; sqlite3Error(db, rc, "no such vfs: %s", zVfs); goto opendb_out; } @@ -1495,7 +1494,6 @@ static int openDatabase( createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0); createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0); if( db->mallocFailed ){ - db->magic = SQLITE_MAGIC_SICK; goto opendb_out; } db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 6, 0); @@ -1518,7 +1516,6 @@ static int openDatabase( &db->aDb[0].pBt); if( rc!=SQLITE_OK ){ sqlite3Error(db, rc, 0); - db->magic = SQLITE_MAGIC_SICK; goto opendb_out; } db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt); @@ -1608,9 +1605,12 @@ opendb_out: assert( db->mutex!=0 || isThreadsafe==0 || sqlite3Config.bFullMutex==0 ); sqlite3_mutex_leave(db->mutex); } - if( SQLITE_NOMEM==(rc = sqlite3_errcode(db)) ){ + rc = sqlite3_errcode(db); + if( rc==SQLITE_NOMEM ){ sqlite3_close(db); db = 0; + }else if( rc!=SQLITE_OK ){ + db->magic = SQLITE_MAGIC_SICK; } *ppDb = db; return sqlite3ApiExit(0, rc); |