]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Prevent the sqlite3_pagecount() function from ever returning the pending-byte
authordanielk1977 <danielk1977@noemail.net>
Fri, 16 Sep 2005 10:18:45 +0000 (10:18 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Fri, 16 Sep 2005 10:18:45 +0000 (10:18 +0000)
page. (CVS 2702)

FossilOrigin-Name: 35a8893537ae5faed6ee49270ac9c01a6010993f

manifest
manifest.uuid
src/pager.c

index 990f19eb6198533ada70402c8cad2378f559cb03..084bba0d6fc52eacf15101ce92ebf06314f5fd57 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Move\sthe\sdefinition\sof\ssqlite3_pending_byte\sfrom\stest2.c\sto\sos_common.h.\s(CVS\s2701)
-D 2005-09-16T10:13:42
+C Prevent\sthe\ssqlite3_pagecount()\sfunction\sfrom\sever\sreturning\sthe\spending-byte\npage.\s(CVS\s2702)
+D 2005-09-16T10:18:46
 F Makefile.in 12784cdce5ffc8dfb707300c34e4f1eb3b8a14f1
 F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -56,7 +56,7 @@ F src/os_unix.c c86cf43b7ca9200e6fb7bc202ad2cc7da2f69367
 F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e
 F src/os_win.c ed03a35b2894f9b99840415f941a9f8594dea756
 F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
-F src/pager.c 2b48db1cc6073a6d2577100866db6ae039d20940
+F src/pager.c 96802068d3f387a6a4f016d840366ac9f8afcf6e
 F src/pager.h 17b13225abd93c1e9f470060f40a21b9edb5a164
 F src/parse.y 5602d5cb894dda2932bf50b7e88782a4440ae3ae
 F src/pragma.c 69413fbdc0c6aaa493a776ea52c1b3e6cf35dfb2
@@ -307,7 +307,7 @@ F www/tclsqlite.tcl ddcf912ea48695603c8ed7efb29f0812ef8d1b49
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 9115e0621d1fdc5a89a0288b87c0a4ce1e4b50c6
-R a7daea377dbdbe2fe22f19ff9d88ca83
+P bedf702f539636fa3b65fd0d6797b087481b4613
+R 0124fbe01caee72dcc427f2bd19a3f5b
 U danielk1977
-Z 396e98a623d7af55e92295f6bc6162c0
+Z afd4b7335827c48ee6ad68f26d27acfa
index 20fc6d39520bd1620826eb71627c22f40dfb2168..f0108c3e9d44a021e4be0b9653feabe0e9261ac4 100644 (file)
@@ -1 +1 @@
-bedf702f539636fa3b65fd0d6797b087481b4613
\ No newline at end of file
+35a8893537ae5faed6ee49270ac9c01a6010993f
\ No newline at end of file
index d898d029d8ce44d99fce17bc2e031e9ff42867bc..9429c1c635e2393a835004813b5d1d09225aefb5 100644 (file)
@@ -18,7 +18,7 @@
 ** file simultaneously, or one process from reading the database while
 ** another is writing.
 **
-** @(#) $Id: pager.c,v 1.212 2005/09/09 01:32:06 drh Exp $
+** @(#) $Id: pager.c,v 1.213 2005/09/16 10:18:46 danielk1977 Exp $
 */
 #ifndef SQLITE_OMIT_DISKIO
 #include "sqliteInt.h"
@@ -1752,29 +1752,35 @@ void sqlite3pager_read_fileheader(Pager *pPager, int N, unsigned char *pDest){
 
 /*
 ** Return the total number of pages in the disk file associated with
-** pPager.
+** pPager. 
+**
+** If the PENDING_BYTE lies on the page directly after the end of the
+** file, then consider this page part of the file too. For example, if
+** PENDING_BYTE is byte 4096 (the first byte of page 5) and the size of the
+** file is 4096 bytes, 5 is returned instead of 4.
 */
 int sqlite3pager_pagecount(Pager *pPager){
   i64 n;
   assert( pPager!=0 );
   if( pPager->dbSize>=0 ){
-    return pPager->dbSize;
-  }
-  if( sqlite3OsFileSize(&pPager->fd, &n)!=SQLITE_OK ){
-    pPager->errMask |= PAGER_ERR_DISK;
-    return 0;
-  }
-  if( n>0 && n<pPager->pageSize ){
-    n = 1;
-  }else{
-    n /= pPager->pageSize;
+    n = pPager->dbSize;
+  } else {
+    if( sqlite3OsFileSize(&pPager->fd, &n)!=SQLITE_OK ){
+      pPager->errMask |= PAGER_ERR_DISK;
+      return 0;
+    }
+    if( n>0 && n<pPager->pageSize ){
+      n = 1;
+    }else{
+      n /= pPager->pageSize;
+    }
+    if( pPager->state!=PAGER_UNLOCK ){
+      pPager->dbSize = n;
+    }
   }
-  if( !MEMDB && n==PENDING_BYTE/pPager->pageSize ){
+  if( n==(PENDING_BYTE/pPager->pageSize) ){
     n++;
   }
-  if( pPager->state!=PAGER_UNLOCK ){
-    pPager->dbSize = n;
-  }
   return n;
 }