diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2012-12-10 00:16:24 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2012-12-10 00:16:24 +0800 |
commit | f3c6ee00f4a906802e3c4dd56aeb7276441990f8 (patch) | |
tree | be062469cd57f5d1b2285a1fd9f57d4ff8647c79 | |
parent | dee9268cc994cfab54f84dd4287b3f6da8c2195e (diff) | |
download | pttbbs-f3c6ee00f4a906802e3c4dd56aeb7276441990f8.tar pttbbs-f3c6ee00f4a906802e3c4dd56aeb7276441990f8.tar.gz pttbbs-f3c6ee00f4a906802e3c4dd56aeb7276441990f8.tar.bz2 pttbbs-f3c6ee00f4a906802e3c4dd56aeb7276441990f8.tar.lz pttbbs-f3c6ee00f4a906802e3c4dd56aeb7276441990f8.tar.xz pttbbs-f3c6ee00f4a906802e3c4dd56aeb7276441990f8.tar.zst pttbbs-f3c6ee00f4a906802e3c4dd56aeb7276441990f8.zip |
Auto mark push_bottom posts, to prevent unexpected expiring of bottom posts.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk@5730 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | pttbbs/mbbsd/bbs.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/pttbbs/mbbsd/bbs.c b/pttbbs/mbbsd/bbs.c index ca0550b5..6329a2ae 100644 --- a/pttbbs/mbbsd/bbs.c +++ b/pttbbs/mbbsd/bbs.c @@ -4009,38 +4009,46 @@ board_digest(void) static int -push_bottom(int ent, fileheader_t *fhdr, const char *direct) +push_bottom(int ent, fileheader_t *old_fhdr, const char *direct) { int num; + fileheader_t fhdr; char buf[PATHLEN]; if ((currmode & MODE_DIGEST) || !(currmode & MODE_BOARD) - || fhdr->filename[0]=='L') + || old_fhdr->filename[0]=='L') return DONOTHING; setbottomtotal(currbid); // <- Ptt : will be remove when stable num = getbottomtotal(currbid); - if (!(fhdr->filemode & FILE_BOTTOM)) + if (!(old_fhdr->filemode & FILE_BOTTOM)) { move(b_lines-1, 0); clrtoeol(); outs(ANSI_COLOR(1;33) "提醒您置底與原文目前互為連結,刪掉原文也會導致置底消失。" ANSI_RESET); } - if( vans(fhdr->filemode & FILE_BOTTOM ? + if( vans(old_fhdr->filemode & FILE_BOTTOM ? "取消置底公告?(y/N)": "加入置底公告?(y/N)") != 'y' ) return FULLUPDATE; - if(!(fhdr->filemode & FILE_BOTTOM) ){ + + // Don't change original fhdr. + memcpy(&fhdr, old_fhdr, sizeof(fhdr)); + + if(!(fhdr.filemode & FILE_BOTTOM) ){ snprintf(buf, sizeof(buf), "%s.bottom", direct); if(num >= 5){ vmsg("不得超過 5 篇重要公告 請精簡!"); return FULLUPDATE; } - fhdr->filemode ^= FILE_BOTTOM; - fhdr->multi.refer.flag = 1; - fhdr->multi.refer.ref = ent; - append_record(buf, fhdr, sizeof(fileheader_t)); + fhdr.filemode ^= FILE_BOTTOM; + fhdr.multi.refer.flag = 1; + fhdr.multi.refer.ref = ent; + append_record(buf, &fhdr, sizeof(fileheader_t)); + // make sure original one won't be deleted... add 'm'. + if (!(old_fhdr->filemode & FILE_MARKED)) + mark_post(ent, old_fhdr, direct); } else{ - fhdr->filemode ^= FILE_BOTTOM; - num = delete_fileheader(direct, fhdr, ent); + fhdr.filemode ^= FILE_BOTTOM; + num = delete_fileheader(direct, &fhdr, ent); } assert(0<=currbid-1 && currbid-1<MAX_BOARD); setbottomtotal(currbid); |