diff options
author | drh <drh@noemail.net> | 2016-03-21 11:38:01 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2016-03-21 11:38:01 +0000 |
commit | 8d2f41ccd2945061d4e1d0e4bf82ef8937637c82 (patch) | |
tree | 2092e86f20a432838100456d150d855eacf7abe5 /src/util.c | |
parent | b7c9659db3c820a5c9702714db2ce8baa8ba0060 (diff) | |
download | sqlite-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/util.c')
-rw-r--r-- | src/util.c | 7 |
1 files changed, 6 insertions, 1 deletions
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 ){ |