]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a benign inaccuracy in the os_unix.c SQLITE_FCNTL_SIZE_HINT code.
authordan <dan@noemail.net>
Wed, 6 Apr 2011 19:15:45 +0000 (19:15 +0000)
committerdan <dan@noemail.net>
Wed, 6 Apr 2011 19:15:45 +0000 (19:15 +0000)
FossilOrigin-Name: 61a6ccbe3c9c3ad5f35fb325e3c327cb19409925

manifest
manifest.uuid
src/os_unix.c
test/syscall.test
test/wal.test

index 82540dec380542345aef4468599511dd66783b86..19af12fa9a1887fd4347217892c88b29c22b529d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Changes\sto\ssupport\sbuilding\swith\svarious\sSQLITE_OMIT_XXX\soptions\sdefined.
-D 2011-04-06T17:54:31.814
+C Fix\sa\sbenign\sinaccuracy\sin\sthe\sos_unix.c\sSQLITE_FCNTL_SIZE_HINT\scode.
+D 2011-04-06T19:15:45.675
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 7a4d9524721d40ef9ee26f93f9bd6a51dba106f2
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -162,7 +162,7 @@ F src/os.c 22ac61d06e72a0dac900400147333b07b13d8e1d
 F src/os.h 9dbed8c2b9c1f2f2ebabc09e49829d4777c26bf9
 F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f
 F src/os_os2.c 2596fd2d5d0976c6c0c628d0c3c7c4e7a724f4cf
-F src/os_unix.c 32414676594a0a26cfccd7e02656230a3406eee7
+F src/os_unix.c a8fe62148d41e54e383d3360a711a01595feef58
 F src/os_win.c 24d72407a90551969744cf9bcbb1b4c72c5fa845
 F src/pager.c 055239dcdfe12b3f5d97f6f01f85da01e2d6d912
 F src/pager.h 3f8c783de1d4706b40b1ac15b64f5f896bcc78d1
@@ -678,7 +678,7 @@ F test/subselect.test d24fd8757daf97dafd2e889c73ea4c4272dcf4e4
 F test/substr.test 18f57c4ca8a598805c4d64e304c418734d843c1a
 F test/superlock.test 5d7a4954b0059c903f82c7b67867bc5451a7c082
 F test/sync.test ded6b39d8d8ca3c0c5518516c6371b3316d3e3a3
-F test/syscall.test 02e5359bf4f5e6f716696318fde4e0b5c2c70d21
+F test/syscall.test 707c95e4ab7863e13f1293c6b0c76bead30249b3
 F test/sysfault.test c79441d88d23696fbec7b147dba98d42a04f523f
 F test/table.test 04ba066432430657712d167ebf28080fe878d305
 F test/tableapi.test 2674633fa95d80da917571ebdd759a14d9819126
@@ -861,7 +861,7 @@ F test/vtabE.test 7c4693638d7797ce2eda17af74292b97e705cc61
 F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
 F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
 F test/vtab_shared.test 0eff9ce4f19facbe0a3e693f6c14b80711a4222d
-F test/wal.test 084b086913a205eab4dde4b9a9cf8c781a576bb8
+F test/wal.test bac92a13276ce9b65d3d5c9ff3411d24c795826c
 F test/wal2.test e561a8c6fdd1c2cd1876f3e39757934e7b7361f8
 F test/wal3.test 5c396cc22497244d627306f4c1d360167353f8dd
 F test/wal4.test 3404b048fa5e10605facaf70384e6d2943412e30
@@ -927,7 +927,7 @@ F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P b7296fd380319bcae26b1ac13f23e57a4852881b
-R 4db291802b7406c40281c186d712b803
+P 2039ed952a02bdcd4fc6d2e20572c4632084dcdb
+R 3687ff8b52f927a607094192283816b8
 U dan
-Z 5987d8475f9d11110fdabc0084f5d8fd
+Z 880d0add4f13ff10be2704386fa9b211
index 5a4abd67a9d469d522b1775c358be0748564d3ee..7d6077d75b01a607c3af98a55b0e6c7dcaa1d050 100644 (file)
@@ -1 +1 @@
-2039ed952a02bdcd4fc6d2e20572c4632084dcdb
\ No newline at end of file
+61a6ccbe3c9c3ad5f35fb325e3c327cb19409925
\ No newline at end of file
index 67dd06fc1c6776a26aa080f38ceace2a7a2ab9c7..e3fa9ea46541a1418ff5b1c69fc13cfdb6aaaa39 100644 (file)
@@ -3398,18 +3398,17 @@ static int fcntlSizeHint(unixFile *pFile, i64 nByte){
       */
       int nBlk = buf.st_blksize;  /* File-system block size */
       i64 iWrite;                 /* Next offset to write to */
-      int nWrite;                 /* Return value from seekAndWrite() */
 
       if( robust_ftruncate(pFile->h, nSize) ){
         pFile->lastErrno = errno;
         return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
       }
       iWrite = ((buf.st_size + 2*nBlk - 1)/nBlk)*nBlk-1;
-      do {
-        nWrite = seekAndWrite(pFile, iWrite, "", 1);
+      while( iWrite<nSize ){
+        int nWrite = seekAndWrite(pFile, iWrite, "", 1);
+        if( nWrite!=1 ) return SQLITE_IOERR_WRITE;
         iWrite += nBlk;
-      } while( nWrite==1 && iWrite<nSize );
-      if( nWrite!=1 ) return SQLITE_IOERR_WRITE;
+      }
 #endif
     }
   }
index 6aca75ec394741c7d2b5452f4f18d9e2465ace07..4442612ab0df9c287a8cb114fdf8902f5f185e65 100644 (file)
@@ -239,7 +239,6 @@ do_test 8.1 {
   file_control_chunksize_test db main 4096
   file size test.db
 } {0}
-
 foreach {tn hint size} {
   1  1000    4096 
   2  1000    4096 
@@ -253,5 +252,25 @@ foreach {tn hint size} {
   } $size
 }
 
+do_test 8.3 {
+  db close
+  forcedelete test.db test.db2
+  sqlite3 db test.db
+  file_control_chunksize_test db main 16
+  file size test.db
+} {0}
+foreach {tn hint size} {
+  1  5       16 
+  2  13      16 
+  3  45      48 
+  4  48      48 
+  5  49      64 
+} {
+  do_test 8.4.$tn {
+    file_control_sizehint_test db main $hint
+    file size test.db
+  } $size
+}
+
 test_syscall reset
 finish_test
index ff88f314d20fcd19e06a2ece86fe07444cf29593..bc5df883ee06b795d023701ea850d49405eaa650 100644 (file)
@@ -1530,26 +1530,26 @@ ifcapable autovacuum {
     INSERT INTO t1 SELECT * FROM t1;
     INSERT INTO t1 SELECT * FROM t1;
   } {wal}
-  do_execsql_test 24.2 { 
-    DELETE FROM t1;
-    PRAGMA wal_checkpoint;
-  } {0 109 109}
-  do_test 24.3 {
+  do_test 24.2 { 
+    execsql {
+      DELETE FROM t1;
+      PRAGMA wal_checkpoint;
+    }
     db close
     sqlite3 db test.db
     file exists test.db-wal
   } 0
-  do_test 24.4 {
+  do_test 24.3 {
     file size test.db
   } [expr 84 * 1024]
-  do_test 24.5 {
+  do_test 24.4 {
     execsql { 
       PRAGMA incremental_vacuum;
       PRAGMA wal_checkpoint;
     }
     file size test.db
   } [expr 3 * 1024]
-  do_test 24.6 {
+  do_test 24.5 {
     file size test.db-wal
   } 2128
 }