-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
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
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
"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;
}