From: mistachkin Date: Mon, 7 May 2012 20:28:19 +0000 (+0000) Subject: Merge Windows directory checking changes from trunk. X-Git-Tag: version-3.7.13~11^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fcd2f12fc761fdb4ea399a93777032bfc9d3f25a;p=thirdparty%2Fsqlite.git Merge Windows directory checking changes from trunk. FossilOrigin-Name: 7a7466f400e94d8c9e745efb2973300474a74d2a --- fcd2f12fc761fdb4ea399a93777032bfc9d3f25a diff --cc manifest index a2099b7f92,6872f43e39..09a5f3495a --- a/manifest +++ b/manifest @@@ -1,5 -1,5 +1,5 @@@ - C Sync\sthe\slatest\strunk\schanges\sinto\sthe\swinRT\sbranch. - D 2012-05-04T23:11:21.989 -C Merge\sWindows\sdirectory\schecking\schanges\sto\strunk. -D 2012-05-07T18:10:12.605 ++C Merge\sWindows\sdirectory\schecking\schanges\sfrom\strunk. ++D 2012-05-07T20:28:19.785 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2f37e468503dbe79d35c9f6dffcf3fae1ae9ec20 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@@ -160,7 -160,7 +160,7 @@@ F src/os.h 38aabd5e3ecd4162332076f55bb0 F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440 F src/os_unix.c 424d46e0edab969293c2223f09923b2178171f47 - F src/os_win.c c3487c9c506c1253bb4c65abc3caf988b9addb6c -F src/os_win.c 412d6434133c7c81dc48b7702f3ea5e61c309e5c ++F src/os_win.c ce348d158b43883c5b1495f68be3f654b7d0c503 F src/pager.c bb5635dde0b152797836d1c72275284724bb563c F src/pager.h ef1eaf8593e78f73885c1dfac27ad83bee23bdc5 F src/parse.y eb054bb40a5bf90d3422a01ed0e5df229461727a @@@ -175,7 -175,7 +175,7 @@@ F src/resolve.c 748e75299faff345f34f0e5 F src/rowset.c f6a49f3e9579428024662f6e2931832511f831a1 F src/select.c d7b9018b7dd2e821183d69477ab55c39b8272335 F src/shell.c 04399b2f9942bd02ed5ffee3b84bcdb39c52a1e6 - F src/sqlite.h.in 21eb2ff783710a8cf2b435890dc1ffc750058169 -F src/sqlite.h.in b8c6d77179cee6e4b8d6eb9f3c2917626d58acd3 ++F src/sqlite.h.in 457e6fb1eef84fbd97864c086499b1de64a05aa5 F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477 F src/sqliteInt.h c5e917c4f1453f3972b1fd0c81105dfe4f09cc32 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d @@@ -995,7 -995,7 +995,7 @@@ F tool/tostr.awk e75472c2f98dd76e06b8c9 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/warnings-clang.sh a8a0a3babda96dfb1ff51adda3cbbf3dfb7266c2 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 - P 25478dcff59690a5f59c3b96600374184057eae9 bfa61e781cb442be641486e7e55a1518e888d830 - R ce5ef0f680ccee96865eacdf6d030fb3 - U drh - Z e6cad85cf7d7f8dd84e66fcbcd8c3674 -P bfa61e781cb442be641486e7e55a1518e888d830 b08530e1a02cba03afefd65dc101e074e8847c07 -R fce36c453dc0cfdd0c18e985348b50c5 ++P be4ab188cffbe97ae4f1f0520591bb7f0df185de a4555a53eab3f5d2f142c78a6b71189544e80ae6 ++R d4541eb715733c4ea776ae24939baa95 + U mistachkin -Z 6287c2c1d24bbcf6d142a68d76da7aa1 ++Z 7ca602c491f736ecdcb3f782ba71db3e diff --cc manifest.uuid index f0736b428d,ded09514db..d7340ec524 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - be4ab188cffbe97ae4f1f0520591bb7f0df185de -a4555a53eab3f5d2f142c78a6b71189544e80ae6 ++7a7466f400e94d8c9e745efb2973300474a74d2a diff --cc src/os_win.c index dfa62a7f4c,fcfe0118ed..78dd4ab0ca --- a/src/os_win.c +++ b/src/os_win.c @@@ -3553,42 -3214,29 +3587,48 @@@ static int winOpen #endif if( isNT() ){ +#if SQLITE_OS_WINRT + CREATEFILE2_EXTENDED_PARAMETERS extendedParameters; + extendedParameters.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS); + extendedParameters.dwFileAttributes = + dwFlagsAndAttributes & FILE_ATTRIBUTE_MASK; + extendedParameters.dwFileFlags = dwFlagsAndAttributes & FILE_FLAG_MASK; + extendedParameters.dwSecurityQosFlags = SECURITY_ANONYMOUS; + extendedParameters.lpSecurityAttributes = NULL; + extendedParameters.hTemplateFile = NULL; + while( (h = osCreateFile2((LPCWSTR)zConverted, + dwDesiredAccess, + dwShareMode, + dwCreationDisposition, + &extendedParameters))==INVALID_HANDLE_VALUE && - retryIoerr(&cnt, &lastErrno) ){} ++ retryIoerr(&cnt, &lastErrno) ){ ++ /* Noop */ ++ } +#else while( (h = osCreateFileW((LPCWSTR)zConverted, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL))==INVALID_HANDLE_VALUE && - retryIoerr(&cnt, &lastErrno) ){} + retryIoerr(&cnt, &lastErrno) ){ + /* Noop */ + } -#if SQLITE_OS_WINCE==0 - }else{ +#endif + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ while( (h = osCreateFileA((LPCSTR)zConverted, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL))==INVALID_HANDLE_VALUE && - retryIoerr(&cnt, &lastErrno) ){} + retryIoerr(&cnt, &lastErrno) ){ + /* Noop */ + } -#endif } - +#endif logIoerr(cnt); OSTRACE(("OPEN %d %s 0x%lx %s\n", @@@ -3675,26 -3324,53 +3716,62 @@@ static int winDelete if( zConverted==0 ){ return SQLITE_IOERR_NOMEM; } - rc = 1; if( isNT() ){ + do { +#if SQLITE_OS_WINRT - WIN32_FILE_ATTRIBUTE_DATA sAttrData; - memset(&sAttrData, 0, sizeof(sAttrData)); - while( osGetFileAttributesExW(zConverted, GetFileExInfoStandard, - &sAttrData) && ++ WIN32_FILE_ATTRIBUTE_DATA sAttrData; ++ memset(&sAttrData, 0, sizeof(sAttrData)); ++ if ( osGetFileAttributesExW(zConverted, GetFileExInfoStandard, ++ &sAttrData) ){ ++ attr = sAttrData.dwFileAttributes; ++ }else{ ++ rc = SQLITE_OK; /* Already gone? */ ++ break; ++ } +#else - while( osGetFileAttributesW(zConverted)!=INVALID_FILE_ATTRIBUTES && + attr = osGetFileAttributesW(zConverted); +#endif - (rc = osDeleteFileW(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){} - rc = rc ? SQLITE_OK : SQLITE_ERROR; + if ( attr==INVALID_FILE_ATTRIBUTES ){ + rc = SQLITE_OK; /* Already gone? */ + break; + } + if ( attr&FILE_ATTRIBUTE_DIRECTORY ){ + rc = SQLITE_ERROR; /* Files only. */ + break; + } + if ( osDeleteFileW(zConverted) ){ + rc = SQLITE_OK; /* Deleted OK. */ + break; + } + if ( !retryIoerr(&cnt, &lastErrno) ){ + rc = SQLITE_ERROR; /* No more retries. */ + break; + } + } while(1); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. -** Since the ANSI version of these Windows API do not exist for WINCE, -** it's important to not reference them for WINCE builds. -*/ -#if SQLITE_OS_WINCE==0 - }else{ + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ - while( osGetFileAttributesA(zConverted)!=INVALID_FILE_ATTRIBUTES && - (rc = osDeleteFileA(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){} - rc = rc ? SQLITE_OK : SQLITE_ERROR; + do { + attr = osGetFileAttributesA(zConverted); + if ( attr==INVALID_FILE_ATTRIBUTES ){ + rc = SQLITE_OK; /* Already gone? */ + break; + } + if ( attr&FILE_ATTRIBUTE_DIRECTORY ){ + rc = SQLITE_ERROR; /* Files only. */ + break; + } + if ( osDeleteFileA(zConverted) ){ + rc = SQLITE_OK; /* Deleted OK. */ + break; + } + if ( !retryIoerr(&cnt, &lastErrno) ){ + rc = SQLITE_ERROR; /* No more retries. */ + break; + } + } while(1); -#endif } +#endif if( rc ){ rc = winLogError(SQLITE_IOERR_DELETE, lastErrno, "winDelete", zFilename);