diff options
author | dan <Dan Kennedy> | 2021-09-10 21:28:56 +0000 |
---|---|---|
committer | dan <Dan Kennedy> | 2021-09-10 21:28:56 +0000 |
commit | 9023444fea771dd0b38bf92efa1751e02b0e89d0 (patch) | |
tree | 07ce8d29a960af10cf3535d8c176dd5ae787bc25 /src/util.c | |
parent | ee7c667a364035db0ca9ced959b918e6ed40d7bf (diff) | |
download | sqlite-9023444fea771dd0b38bf92efa1751e02b0e89d0.tar.gz sqlite-9023444fea771dd0b38bf92efa1751e02b0e89d0.zip |
If an EXCEPTION_IN_PAGE_ERROR exception is caught, make the underlying OS error code available via sqlite3_system_errno().
FossilOrigin-Name: fdb20e9ee48465b94aa6ac3c5e263ecaa7c3b10f4a193e79f965b7c35944b08b
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c index 2d1c64ad1..3eb0419b6 100644 --- a/src/util.c +++ b/src/util.c @@ -136,6 +136,23 @@ void sqlite3ErrorClear(sqlite3 *db){ */ void sqlite3SystemError(sqlite3 *db, int rc){ if( rc==SQLITE_IOERR_NOMEM ) return; +#ifdef SQLITE_USE_SEH + if( rc==SQLITE_IOERR_IN_PAGE ){ + int ii; + int iErr; + sqlite3BtreeEnterAll(db); + for(ii=0; ii<db->nDb; ii++){ + if( db->aDb[ii].pBt ){ + iErr = sqlite3PagerWalSystemErrno(sqlite3BtreePager(db->aDb[ii].pBt)); + if( iErr ){ + db->iSysErrno = iErr; + } + } + } + sqlite3BtreeLeaveAll(db); + return; + } +#endif rc &= 0xff; if( rc==SQLITE_CANTOPEN || rc==SQLITE_IOERR ){ db->iSysErrno = sqlite3OsGetLastError(db->pVfs); |