diff options
author | ptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-08-05 23:40:19 +0800 |
---|---|---|
committer | ptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-08-05 23:40:19 +0800 |
commit | dbd9a354806f0e6695ec8c428cf91e2ed2c77dad (patch) | |
tree | dfc3ea951f3adc0cc48d57995685deb94075c199 /mbbsd/read.c | |
parent | 7d4fc6115ef95c78534e5a1459e79d337f9adfa8 (diff) | |
download | pttbbs-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.c | 24 |
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; |