aboutsummaryrefslogtreecommitdiff
path: root/src/test_async.c
diff options
context:
space:
mode:
authordanielk1977 <danielk1977@noemail.net>2007-09-05 14:32:25 +0000
committerdanielk1977 <danielk1977@noemail.net>2007-09-05 14:32:25 +0000
commit7be2cce3337a8708568d7dc3df716e9f71876108 (patch)
treea06e05c2249cf8d35ed46550a347b9012cfb6989 /src/test_async.c
parentdf6a81c8388df2064f1c27cdacc838c8caec708a (diff)
downloadsqlite-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.c17
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;
}