diff options
author | ptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2007-01-18 17:13:53 +0800 |
---|---|---|
committer | ptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2007-01-18 17:13:53 +0800 |
commit | 5a0e612ca4825c5b35acf82d142fd7d7e745e1d0 (patch) | |
tree | 0f13deee81f1f569c8dc13cc3f686299c41f2ed3 /mbbsd/bbs.c | |
parent | 519c7a330f916c29c21ef80d2fc20326e7ba96e2 (diff) | |
download | pttbbs-5a0e612ca4825c5b35acf82d142fd7d7e745e1d0.tar pttbbs-5a0e612ca4825c5b35acf82d142fd7d7e745e1d0.tar.gz pttbbs-5a0e612ca4825c5b35acf82d142fd7d7e745e1d0.tar.bz2 pttbbs-5a0e612ca4825c5b35acf82d142fd7d7e745e1d0.tar.lz pttbbs-5a0e612ca4825c5b35acf82d142fd7d7e745e1d0.tar.xz pttbbs-5a0e612ca4825c5b35acf82d142fd7d7e745e1d0.tar.zst pttbbs-5a0e612ca4825c5b35acf82d142fd7d7e745e1d0.zip |
fix the bug of the cost of deleting post
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3475 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/bbs.c')
-rw-r--r-- | mbbsd/bbs.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c index 4dbae34b..a5d72bd5 100644 --- a/mbbsd/bbs.c +++ b/mbbsd/bbs.c @@ -545,10 +545,11 @@ cancelpost(const fileheader_t *fh, int by_BM, char *newpath) } static void -do_deleteCrossPost(fileheader_t *fh, char bname[]) +do_deleteCrossPost(const fileheader_t *fh, char bname[]) { char bdir[MAXPATHLEN]="", file[MAXPATHLEN]=""; - if(!bname) return; + fileheader_t newfh; + if(!bname || !fh) return; int i, bid = getbnum(bname); if(bid <=0 || !fh->filename[0]) return; @@ -558,11 +559,14 @@ do_deleteCrossPost(fileheader_t *fh, char bname[]) setbdir(bdir, bname); setbfile(file, bname, fh->filename); - if( (i=getindex(bdir, fh, 0))>0) + memcpy(&newfh, fh, sizeof(fileheader_t)); + // Ptt: protect original fh + // because getindex safe_article_delete will change fh in some case + if( (i=getindex(bdir, &newfh, 0))>0) { #ifdef SAFE_ARTICLE_DELETE if(bp && !(currmode & MODE_DIGEST) && bp->nuser > 30 ) - safe_article_delete(i, fh, bdir); + safe_article_delete(i, &newfh, bdir); else #endif delete_record(bdir, sizeof(fileheader_t), i); @@ -572,17 +576,21 @@ do_deleteCrossPost(fileheader_t *fh, char bname[]) } static void -deleteCrossPost(fileheader_t *fh, char *bname) +deleteCrossPost(const fileheader_t *fh, char *bname) { if(!fh || !fh->filename[0]) return; if(!strcmp(bname, ALLPOST) || !strcmp(bname, "NEWIDPOST") || !strcmp(bname, ALLHIDPOST) || !strcmp(bname, "UnAnonymous")) { + int len=0; char xbname[TTLEN + 1], *po = strrchr(fh->title, '.'); if(!po) return; - - sprintf(xbname, "%.*s", (int) strlen(po)-3, po+1); + po++; + len = (int) strlen(po)-2; + + if(len > TTLEN) return; + sprintf(xbname, "%.*s", len, po); do_deleteCrossPost(fh, xbname); } else |