diff options
author | danielk1977 <danielk1977@noemail.net> | 2007-09-05 14:32:25 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2007-09-05 14:32:25 +0000 |
commit | 7be2cce3337a8708568d7dc3df716e9f71876108 (patch) | |
tree | a06e05c2249cf8d35ed46550a347b9012cfb6989 /src/test_async.c | |
parent | df6a81c8388df2064f1c27cdacc838c8caec708a (diff) | |
download | sqlite-7be2cce3337a8708568d7dc3df716e9f71876108.tar.gz sqlite-7be2cce3337a8708568d7dc3df716e9f71876108.zip |
Test that the asynchronous backend works with components like "." or ".." in the path to the database file. (CVS 4403)
FossilOrigin-Name: 0a87a854226ccea920484613dd7f7873e673c96e
Diffstat (limited to 'src/test_async.c')
-rw-r--r-- | src/test_async.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/test_async.c b/src/test_async.c index 13138cfb3..f4f564c84 100644 --- a/src/test_async.c +++ b/src/test_async.c @@ -621,13 +621,18 @@ static int getFileLock(AsyncLock *pLock){ assert(eRequired>=0 && eRequired<=SQLITE_LOCK_EXCLUSIVE); } } + if( eRequired>pLock->eLock ){ rc = sqlite3OsLock(pLock->pFile, eRequired); - }else if(eRequired<pLock->eLock){ - rc = sqlite3OsUnlock(pLock->pFile, eRequired); + if( rc==SQLITE_OK ){ + pLock->eLock = eRequired; + } } - if( rc==SQLITE_OK ){ - pLock->eLock = eRequired; + else if( eRequired<pLock->eLock && eRequired<=SQLITE_LOCK_SHARED ){ + rc = sqlite3OsUnlock(pLock->pFile, eRequired); + if( rc==SQLITE_OK ){ + pLock->eLock = eRequired; + } } } @@ -932,11 +937,11 @@ static int asyncFullPathname( /* Replace any occurences of "<path-component>/../" with "" */ if( iOut>0 && iIn<=(nPathOut-4) && zPathOut[iIn]=='/' && zPathOut[iIn+1]=='.' - && zPathOut[iIn+2]=='.' && zPathOut[iIn+2]=='/' + && zPathOut[iIn+2]=='.' && zPathOut[iIn+3]=='/' ){ iIn += 3; iOut--; - for( ; iOut>0 && zPathOut[iOut]!='/'; iOut--); + for( ; iOut>0 && zPathOut[iOut-1]!='/'; iOut--); continue; } |