aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2016-03-21 11:38:01 +0000
committerdrh <drh@noemail.net>2016-03-21 11:38:01 +0000
commit8d2f41ccd2945061d4e1d0e4bf82ef8937637c82 (patch)
tree2092e86f20a432838100456d150d855eacf7abe5 /src
parentb7c9659db3c820a5c9702714db2ce8baa8ba0060 (diff)
downloadsqlite-8d2f41ccd2945061d4e1d0e4bf82ef8937637c82.tar.gz
sqlite-8d2f41ccd2945061d4e1d0e4bf82ef8937637c82.zip
Do a better job of capturing all system errno values regardless of when
they occur. FossilOrigin-Name: 7d49998d571d841a6d1b55f5f9889e613daaab2a
Diffstat (limited to 'src')
-rw-r--r--src/main.c1
-rw-r--r--src/util.c7
2 files changed, 6 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index e4d5cb494..2e5ba0839 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2868,7 +2868,6 @@ static int openDatabase(
if( rc==SQLITE_IOERR_NOMEM ){
rc = SQLITE_NOMEM_BKPT;
}
- sqlite3SystemError(db, rc);
sqlite3Error(db, rc);
goto opendb_out;
}
diff --git a/src/util.c b/src/util.c
index 0a705a6a6..b23134291 100644
--- a/src/util.c
+++ b/src/util.c
@@ -120,10 +120,14 @@ const char *sqlite3StrNext(const char *z){
/*
** Set the current error code to err_code and clear any prior error message.
*/
+static SQLITE_NOINLINE void sqlite3ErrorFinish(sqlite3 *db, int err_code){
+ if( db->pErr ) sqlite3ValueSetNull(db->pErr);
+ sqlite3SystemError(db, err_code);
+}
void sqlite3Error(sqlite3 *db, int err_code){
assert( db!=0 );
db->errCode = err_code;
- if( db->pErr ) sqlite3ValueSetNull(db->pErr);
+ if( err_code || db->pErr ) sqlite3ErrorFinish(db, err_code);
}
/*
@@ -162,6 +166,7 @@ void sqlite3SystemError(sqlite3 *db, int rc){
void sqlite3ErrorWithMsg(sqlite3 *db, int err_code, const char *zFormat, ...){
assert( db!=0 );
db->errCode = err_code;
+ sqlite3SystemError(db, err_code);
if( zFormat==0 ){
sqlite3Error(db, err_code);
}else if( db->pErr || (db->pErr = sqlite3ValueNew(db))!=0 ){