summaryrefslogtreecommitdiffstats
path: root/mbbsd/read.c
diff options
context:
space:
mode:
authorptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-08-05 23:40:19 +0800
committerptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-08-05 23:40:19 +0800
commitdbd9a354806f0e6695ec8c428cf91e2ed2c77dad (patch)
treedfc3ea951f3adc0cc48d57995685deb94075c199 /mbbsd/read.c
parent7d4fc6115ef95c78534e5a1459e79d337f9adfa8 (diff)
downloadpttbbs-dbd9a354806f0e6695ec8c428cf91e2ed2c77dad.tar
pttbbs-dbd9a354806f0e6695ec8c428cf91e2ed2c77dad.tar.gz
pttbbs-dbd9a354806f0e6695ec8c428cf91e2ed2c77dad.tar.bz2
pttbbs-dbd9a354806f0e6695ec8c428cf91e2ed2c77dad.tar.lz
pttbbs-dbd9a354806f0e6695ec8c428cf91e2ed2c77dad.tar.xz
pttbbs-dbd9a354806f0e6695ec8c428cf91e2ed2c77dad.tar.zst
pttbbs-dbd9a354806f0e6695ec8c428cf91e2ed2c77dad.zip
incremental select_read
fix 'Q' in view post money. git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2991 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/read.c')
-rw-r--r--mbbsd/read.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/mbbsd/read.c b/mbbsd/read.c
index 638c060b..73ef43af 100644
--- a/mbbsd/read.c
+++ b/mbbsd/read.c
@@ -414,6 +414,7 @@ static int
select_read(const keeploc_t * locmem, int sr_mode)
{
#define READSIZE 64 // 8192 / sizeof(fileheader_t)
+ time4_t filetime;
fileheader_t fhs[READSIZE];
char newdirect[MAXPATHLEN];
char keyword[TTLEN + 1] = "";
@@ -499,12 +500,27 @@ select_read(const keeploc_t * locmem, int sr_mode)
else
setbfile(newdirect, currboard, genbuf);
- if( now - dasht(newdirect) < 3600 )
+ filetime = dasht(newdirect);
+ if( now - filetime < 180 )
count = dashs(newdirect) / sizeof(fileheader_t);
else {
- if( (fd = open(newdirect, O_CREAT | O_RDWR, 0600)) == -1 )
- return READ_REDRAW;
+ if( now - filetime > 3600)
+ len = O_CREAT | O_RDWR;
+ else
+ len = O_APPEND;
+
+ if( (fd = open(newdirect, len, 0600)) == -1 )
+ return READ_REDRAW;
+
if( (fr = open(currdirect, O_RDONLY, 0)) != -1 ) {
+ if( now - filetime <= 3600)
+ {
+ sprintf(fhs[0].filename, "X.%d", (int)filetime);
+ len = - getindex(currdirect, &fhs[0], 0);
+ if(len>0)
+ lseek(fr, len*sizeof(fileheader_t), SEEK_SET);
+ }
+
while( (len = read(fr, fhs, sizeof(fhs))) > 0 ){
len /= sizeof(fileheader_t);
for( i = 0 ; i < len ; ++i ){
@@ -532,7 +548,7 @@ select_read(const keeploc_t * locmem, int sr_mode)
continue;
else if ((sr_mode & RS_MONEY) &&
// see view_postmoney
- ( (fhs[i].filemode & (FILE_BOTTOM|FILE_ANONYMOUS)) ||
+ ((fhs[i].filemode & (FILE_BOTTOM|FILE_ANONYMOUS)) ||
(fhs[i].multi.money < n_money)))
continue;
++count;