summaryrefslogtreecommitdiffstats
path: root/mbbsd/bbs.c
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-04-03 21:08:37 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-04-03 21:08:37 +0800
commit09ad37923288982a63098a7aa346ea79748f7eca (patch)
treead0b24b51e730c1173f6a258e3aa0957f045c055 /mbbsd/bbs.c
parentec3ed850be27c29ecc4d9fc2a0f0404f997fc7d6 (diff)
downloadpttbbs-09ad37923288982a63098a7aa346ea79748f7eca.tar
pttbbs-09ad37923288982a63098a7aa346ea79748f7eca.tar.gz
pttbbs-09ad37923288982a63098a7aa346ea79748f7eca.tar.bz2
pttbbs-09ad37923288982a63098a7aa346ea79748f7eca.tar.lz
pttbbs-09ad37923288982a63098a7aa346ea79748f7eca.tar.xz
pttbbs-09ad37923288982a63098a7aa346ea79748f7eca.tar.zst
pttbbs-09ad37923288982a63098a7aa346ea79748f7eca.zip
- fix a 7-year bug? force_open should really "force" open file.
- (internal) code refine - drop MAXPATHLEN and change few magic number (256) to PATHLEN. git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4072 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/bbs.c')
-rw-r--r--mbbsd/bbs.c39
1 files changed, 25 insertions, 14 deletions
diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c
index 503e4fdb..b34fc496 100644
--- a/mbbsd/bbs.c
+++ b/mbbsd/bbs.c
@@ -41,7 +41,7 @@ query_file_money(const fileheader_t *pfh)
(pfh->multi.refer.flag) &&
(pfh->multi.refer.ref > 0)) // really? not sure, copied from other's code
{
- char genbuf[MAXPATHLEN];
+ char genbuf[PATHLEN];
/* it is assumed that in MODE_SELECT, currboard is selected. */
setbfile(genbuf, currboard, FN_DIR);
@@ -288,7 +288,7 @@ set_board(void)
#ifdef _DEBUG
{
- char buf[MAXPATHLEN];
+ char buf[PATHLEN];
sprintf(buf, "title=%d, brdname=%d, currBM=%d, t_c=%d, l=%d",
strlen(bp->title), strlen(bp->brdname),
strlen(currBM), t_columns, l);
@@ -645,7 +645,7 @@ cancelpost(const fileheader_t *fh, int by_BM, char *newpath)
char *ptr, *brd;
fileheader_t postfile;
char genbuf[200];
- char nick[STRLEN], fn1[MAXPATHLEN];
+ char nick[STRLEN], fn1[PATHLEN];
int len = 42-strlen(currboard);
struct tm *ptime = localtime4(&now);
@@ -691,7 +691,7 @@ cancelpost(const fileheader_t *fh, int by_BM, char *newpath)
static void
do_deleteCrossPost(const fileheader_t *fh, char bname[])
{
- char bdir[MAXPATHLEN]="", file[MAXPATHLEN]="";
+ char bdir[PATHLEN], file[PATHLEN];
fileheader_t newfh;
boardheader_t *bp;
int i, bid;
@@ -752,7 +752,7 @@ delete_allpost(const char *userid)
{
fileheader_t fhdr;
int fd, i;
- char bdir[MAXPATHLEN]="", file[MAXPATHLEN]="";
+ char bdir[PATHLEN], file[PATHLEN];
if(!userid) return;
@@ -1114,7 +1114,7 @@ do_general(int isbid)
// warning: filename should be retrieved from new fpath.
if(isbid) {
- char bidfn[PATHLEN] = "";
+ char bidfn[PATHLEN];
sprintf(bidfn, "%s.bid", fpath);
append_record(bidfn,(void*) &bidinfo, sizeof(bidinfo));
postfile.filemode |= FILE_BID ;
@@ -1878,7 +1878,7 @@ cross_post(int ent, fileheader_t * fhdr, const char *direct)
/* add cp log. bp is currboard now. */
if(bp->brdattr & BRD_CPLOG)
{
- char buf[MAXPATHLEN], tail[STRLEN];
+ char buf[PATHLEN], tail[STRLEN];
char bname[STRLEN] = "";
struct tm *ptime = localtime4(&now);
int maxlength = 51 +2 - 6;
@@ -3074,15 +3074,26 @@ del_range(int ent, const fileheader_t *fhdr, const char *direct)
}
getdata(1, 48, msg_sure_ny, num1, 3, LCECHO);
if (*num1 == 'y') {
+ int ret = 0;
outmsg("處理中,請稍後...");
refresh();
#ifdef SAFE_ARTICLE_DELETE
if(bp && !(currmode & MODE_DIGEST) && bp->nuser > 30 )
- safe_article_delete_range(direct, inum1, inum2);
+ ret = safe_article_delete_range(direct, inum1, inum2);
else
#endif
- delete_range(direct, inum1, inum2);
- fixkeep(direct, inum1);
+ ret = delete_range(direct, inum1, inum2);
+ if (ret < 0)
+ {
+ clear();
+ stand_title("刪除失敗");
+ outs("\n\n無法刪除檔案。可能是同時有其它人也在進行刪除。\n\n"
+ "若此錯誤持續發生,請等約一小時後再重試。\n\n"
+ "若到時仍無法刪除,請到 SYSOP 看板報告。\n");
+ vmsg("無法刪除。可能有其它人正在同時刪除。");
+ return FULLUPDATE;
+ } else
+ fixkeep(direct, inum1);
if ((curredit & EDIT_MAIL)==0 && (currmode & MODE_BOARD)) // Ptt:update cache
setbtotal(currbid);
@@ -3291,8 +3302,8 @@ show_filename(int ent, const fileheader_t * fhdr, const char *direct)
static int
lock_post(int ent, fileheader_t * fhdr, const char *direct)
{
- char fn1[MAXPATHLEN];
- char genbuf[256] = {'\0'};
+ char fn1[PATHLEN];
+ char genbuf[PATHLEN] = "";
int i;
boardheader_t *bp = NULL;
@@ -3654,7 +3665,7 @@ static int
push_bottom(int ent, fileheader_t *fhdr, const char *direct)
{
int num;
- char buf[256];
+ char buf[PATHLEN];
if ((currmode & MODE_DIGEST) || !(currmode & MODE_BOARD)
|| fhdr->filename[0]=='L')
return DONOTHING;
@@ -3665,7 +3676,7 @@ push_bottom(int ent, fileheader_t *fhdr, const char *direct)
"加入置底公告?(y/N)") != 'y' )
return READ_REDRAW;
if(!(fhdr->filemode & FILE_BOTTOM) ){
- sprintf(buf, "%s.bottom", direct);
+ snprintf(buf, sizeof(buf), "%s.bottom", direct);
if(num >= 5){
vmsg("不得超過 5 篇重要公告 請精簡!");
return READ_REDRAW;