From 99295b493392a5205898b4fac03315f73626186a Mon Sep 17 00:00:00 2001 From: pweilbacher Date: Wed, 24 Oct 2007 23:03:25 +0000 Subject: [PATCH] Fix os2GetTempname() to actually work: DosScanEnv() wants an empty PSZ as argument and we obviously don't need to test for file existence any more. (CVS 4512) FossilOrigin-Name: 8a233845f61080cca24da3672444f3e5b985da67 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/os_os2.c | 40 ++++++++++++++++++++-------------------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/manifest b/manifest index 195de57c81..54b23e8338 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C fts3.c\sbuildTerms()\spasses\s-1\sfor\snInput.\s(CVS\s4511) -D 2007-10-24T21:52:37 +C Fix\sos2GetTempname()\sto\sactually\swork:\sDosScanEnv()\swants\san\sempty\sPSZ\sas\sargument\sand\swe\sobviously\sdon't\sneed\sto\stest\sfor\sfile\sexistence\sany\smore.\s(CVS\s4512) +D 2007-10-24T23:03:26 F Makefile.in 30c7e3ba426ddb253b8ef037d1873425da6009a8 F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -113,7 +113,7 @@ F src/mutex_w32.c 6e197765f283815496193e78e9548b5d0e53b68e F src/os.c 8360932f1450b2b45edb608a3b184b031f7d00cc F src/os.h b75506ab40d222300f38023acb56fe08df5ffe33 F src/os_common.h 98862f120ca6bf7a48ce8b16f158b77d00bc9d2f -F src/os_os2.c 8d8ef4462cfa1b4d824ec55c486bce86fa0ac6fc +F src/os_os2.c ea8cb86c197abbc94eb55c82f6403644c1eb9963 F src/os_os2.h c3f7d0af7e3453d1d7aa81b06c0a56f5a226530b F src/os_test.c 49833426101f99aee4bb5f6a44b7c4b2029fda1c F src/os_test.h 903c93554c23d88f34f667f1979e4a1cee792af3 @@ -584,7 +584,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P c085d6dfc0f5849113986cb2a25e64d0c95b3dfb -R 1b4ac17574411f9b35840f7094f3e2bb -U shess -Z 7dd99f635814c93b45c657ecd5503b28 +P e87c883a1235ac47ee340a31051dcd5deb369d4e +R 8e734d5fb9e62d42e48173acdc8210f0 +U pweilbacher +Z a7a6afdf4d123b7113e6f3532b244c99 diff --git a/manifest.uuid b/manifest.uuid index 3fb2365ea6..49fed89312 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e87c883a1235ac47ee340a31051dcd5deb369d4e \ No newline at end of file +8a233845f61080cca24da3672444f3e5b985da67 \ No newline at end of file diff --git a/src/os_os2.c b/src/os_os2.c index f26425ab76..5db4ef09b8 100644 --- a/src/os_os2.c +++ b/src/os_os2.c @@ -747,32 +747,32 @@ static int os2GetTempname( sqlite3_vfs *pVfs, int nBuf, char *zBuf ){ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; int i, j; - char zTempPath[CCHMAXPATH]; - APIRET rc = NO_ERROR; - FILESTATUS3 fsts3ConfigInfo; - if( DosScanEnv( (PSZ)"TEMP", (PSZ*)&zTempPath ) ){ - if( DosScanEnv( (PSZ)"TMP", (PSZ*)&zTempPath ) ){ - if( DosScanEnv( (PSZ)"TMPDIR", (PSZ*)&zTempPath ) ){ + PSZ zTempPath = ""; + if( DosScanEnv( (PSZ)"TEMP", &zTempPath ) ){ + if( DosScanEnv( (PSZ)"TMP", &zTempPath ) ){ + if( DosScanEnv( (PSZ)"TMPDIR", &zTempPath ) ){ ULONG ulDriveNum = 0, ulDriveMap = 0; DosQueryCurrentDisk( &ulDriveNum, &ulDriveMap ); sprintf( (char*)zTempPath, "%c:", (char)( 'A' + ulDriveNum - 1 ) ); } } } - do{ - assert( nBuf>=pVfs->mxPathname ); - sqlite3_snprintf(pVfs->mxPathname-17, zBuf, "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath ); - j = strlen( zBuf ); - sqlite3Randomness( 15, &zBuf[j] ); - for( i = 0; i < 15; i++, j++ ){ - zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; - } - zBuf[j] = 0; - - memset(&fsts3ConfigInfo, 0, sizeof(fsts3ConfigInfo)); - rc = DosQueryPathInfo( (PSZ)zBuf, FIL_STANDARD, - &fsts3ConfigInfo, sizeof(FILESTATUS3) ); - }while( rc != NO_ERROR ); + /* strip off a trailing slashes or backslashes, otherwise we would get * + * multiple (back)slashes which causes DosOpen() to fail */ + j = strlen(zTempPath); + while( j > 0 && ( zTempPath[j-1] == '\\' || zTempPath[j-1] == '/' ) ){ + j--; + } + zTempPath[j] = '\0'; + assert( nBuf>=pVfs->mxPathname ); + sqlite3_snprintf( pVfs->mxPathname-30, zBuf, + "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath ); + j = strlen( zBuf ); + sqlite3Randomness( 20, &zBuf[j] ); + for( i = 0; i < 20; i++, j++ ){ + zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; + } + zBuf[j] = 0; OSTRACE2( "TEMP FILENAME: %s\n", zBuf ); return SQLITE_OK; }