]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix os2GetTempname() to actually work: DosScanEnv() wants an empty PSZ as argument...
authorpweilbacher <pweilbacher@noemail.net>
Wed, 24 Oct 2007 23:03:25 +0000 (23:03 +0000)
committerpweilbacher <pweilbacher@noemail.net>
Wed, 24 Oct 2007 23:03:25 +0000 (23:03 +0000)
FossilOrigin-Name: 8a233845f61080cca24da3672444f3e5b985da67

manifest
manifest.uuid
src/os_os2.c

index 195de57c8132de5733d60a50f071d3b1dffdf27e..54b23e833821c5e666efc0e7778227b5cd95dcd8 100644 (file)
--- 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
index 3fb2365ea63f2f92af50bc7833ddc00a791cac94..49fed893123a7d839d69519294ffddb5f961e673 100644 (file)
@@ -1 +1 @@
-e87c883a1235ac47ee340a31051dcd5deb369d4e
\ No newline at end of file
+8a233845f61080cca24da3672444f3e5b985da67
\ No newline at end of file
index f26425ab76a40e80b9f67ecc630fc86619b6699e..5db4ef09b8adf1b11492ac227d20eaa0d14adeaf 100644 (file)
@@ -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;
 }