From: danielk1977 Date: Fri, 16 Sep 2005 10:18:45 +0000 (+0000) Subject: Prevent the sqlite3_pagecount() function from ever returning the pending-byte X-Git-Tag: version-3.6.10~3458 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=15f411dbdd01e3e630253d13f7e02664c1074d61;p=thirdparty%2Fsqlite.git Prevent the sqlite3_pagecount() function from ever returning the pending-byte page. (CVS 2702) FossilOrigin-Name: 35a8893537ae5faed6ee49270ac9c01a6010993f --- diff --git a/manifest b/manifest index 990f19eb61..084bba0d6f 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 20fc6d3952..f0108c3e9d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bedf702f539636fa3b65fd0d6797b087481b4613 \ No newline at end of file +35a8893537ae5faed6ee49270ac9c01a6010993f \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index d898d029d8..9429c1c635 100644 --- a/src/pager.c +++ b/src/pager.c @@ -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 && npageSize ){ - 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 && npageSize ){ + 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; }