diff options
author | jack <jack@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-05-03 05:58:08 +0800 |
---|---|---|
committer | jack <jack@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-05-03 05:58:08 +0800 |
commit | e443776eb7025c569df22f801965f0ec84798e35 (patch) | |
tree | a6200d5ccc57109dfece0b30180da83a9915785c /mbbsd/record.c | |
parent | 886fd091d3cc9e39e342e13e994fb63acb30c34b (diff) | |
download | pttbbs-e443776eb7025c569df22f801965f0ec84798e35.tar pttbbs-e443776eb7025c569df22f801965f0ec84798e35.tar.gz pttbbs-e443776eb7025c569df22f801965f0ec84798e35.tar.bz2 pttbbs-e443776eb7025c569df22f801965f0ec84798e35.tar.lz pttbbs-e443776eb7025c569df22f801965f0ec84798e35.tar.xz pttbbs-e443776eb7025c569df22f801965f0ec84798e35.tar.zst pttbbs-e443776eb7025c569df22f801965f0ec84798e35.zip |
merge trunk to branches and corrected confliction
git-svn-id: http://opensvn.csie.org/pttbbs/branches/Jaky.i18n@1919 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/record.c')
-rw-r--r-- | mbbsd/record.c | 80 |
1 files changed, 60 insertions, 20 deletions
diff --git a/mbbsd/record.c b/mbbsd/record.c index 605f5417..c8393f6f 100644 --- a/mbbsd/record.c +++ b/mbbsd/record.c @@ -127,6 +127,66 @@ substitute_record(char *fpath, void *rptr, int size, int id) return 0; } +int +substitute_ref_record(char *direct, fileheader_t * fhdr, int ent) +{ + fileheader_t hdr; + char genbuf[256]; + int num = 0; + + /* rocker.011018: 串接模式用reference增進效率 */ + if ((fhdr->money & FHR_REFERENCE) && + (num = fhdr->money & ~FHR_REFERENCE)){ + setdirpath(genbuf, direct, ".DIR"); + get_record(genbuf, &hdr, sizeof(hdr), num); + if (strcmp(hdr.filename, fhdr->filename)) + { + if((num = getindex(genbuf, fhdr, num))>0) + { + substitute_record(genbuf, fhdr, sizeof(*fhdr), num); + } + } + else if(num>0) + { + fhdr->money = hdr.money; + substitute_record(genbuf, fhdr, sizeof(*fhdr), num); + } + fhdr->money = FHR_REFERENCE | num ; // Ptt: update now! + } + substitute_record(direct, fhdr, sizeof(*fhdr), ent); + return num; +} + +int +getindex(char *direct, fileheader_t *fh_o, int end) +{ // Ptt: 從前面找很費力 太暴力 + int fd=-1, begin=1, i, stamp, s; + fileheader_t fh; + + i = get_num_records(direct, sizeof(fileheader_t)); + if(end>i) end = i; + stamp = atoi(fh_o->filename+2); + i=(begin+end)/2; + for(; end>begin+1; i=(begin+end)/2) + { + if(get_record_keep(direct, &fh, sizeof(fileheader_t), i, &fd)==-1) + break; + if(!fh.filename[0]) break; + s = atoi(fh.filename+2); + if (s > stamp) end = i+1; + else if(s == stamp) + { + close(fd); + fh_o->money = fh.money; + return i; + } + else begin = i; + } + if(fd==-1) close(fd); + return 0; +} + + /* rocker.011022: 避免lock檔開啟時不正常斷線,造成永久lock */ #ifndef _BBS_UTIL_C_ static int @@ -311,26 +371,6 @@ delete_range(char *fpath, int id1, int id2) return 0; } #endif -int -search_rec(char *dirname, int (*filecheck) ()) -{ - fileheader_t fhdr; - FILE *fp; - int ans = 0; - - if (!(fp = fopen(dirname, "r"))) - return 0; - - while (fread(&fhdr, sizeof(fhdr), 1, fp)) { - ans++; - if ((*filecheck) (&fhdr)) { - fclose(fp); - return ans; - } - } - fclose(fp); - return 0; -} #ifdef SAFE_ARTICLE_DELETE |