1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-08 14:02:16 +03:00

Actually look at i-node numbers to determine whether or not the database

file has moved.

FossilOrigin-Name: 2b1884dc14f9a04a04eebb3245fbe0daaff399eb
This commit is contained in:
drh
2013-12-07 12:29:22 +00:00
parent 091a81b91d
commit b959a017b6
6 changed files with 54 additions and 25 deletions

View File

@@ -4806,15 +4806,16 @@ static int databaseIsUnmoved(Pager *pPager){
const int fixedFlags = SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN |
SQLITE_IOCAP_UNMOVABLE_WHEN_OPEN;
int dc;
int x = 0, rc;
int bHasMoved = 0;
int rc;
if( pPager->tempFile ) return SQLITE_OK;
if( pPager->dbSize==0 ) return SQLITE_OK;
assert( pPager->zFilename && pPager->zFilename[0] );
dc = sqlite3OsDeviceCharacteristics(pPager->fd);
if( (dc&fixedFlags)==fixedFlags ) return SQLITE_OK;
rc = sqlite3OsAccess(pPager->pVfs, pPager->zFilename, SQLITE_ACCESS_EXISTS, &x);
if( rc==SQLITE_OK && !x ) rc = SQLITE_READONLY_DBMOVED;
rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_HAS_MOVED, &bHasMoved);
if( rc==SQLITE_OK && bHasMoved ) rc = SQLITE_READONLY_DBMOVED;
return rc;
}