diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-04-03 21:08:37 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-04-03 21:08:37 +0800 |
commit | 09ad37923288982a63098a7aa346ea79748f7eca (patch) | |
tree | ad0b24b51e730c1173f6a258e3aa0957f045c055 /mbbsd | |
parent | ec3ed850be27c29ecc4d9fc2a0f0404f997fc7d6 (diff) | |
download | pttbbs-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')
-rw-r--r-- | mbbsd/admin.c | 6 | ||||
-rw-r--r-- | mbbsd/announce.c | 4 | ||||
-rw-r--r-- | mbbsd/bbs.c | 39 | ||||
-rw-r--r-- | mbbsd/cache.c | 2 | ||||
-rw-r--r-- | mbbsd/calendar.c | 2 | ||||
-rw-r--r-- | mbbsd/friend.c | 2 | ||||
-rw-r--r-- | mbbsd/gamble.c | 2 | ||||
-rw-r--r-- | mbbsd/mail.c | 4 | ||||
-rw-r--r-- | mbbsd/read.c | 6 | ||||
-rw-r--r-- | mbbsd/record.c | 17 | ||||
-rw-r--r-- | mbbsd/user.c | 2 |
11 files changed, 49 insertions, 37 deletions
diff --git a/mbbsd/admin.c b/mbbsd/admin.c index b0695b3b..5e188b59 100644 --- a/mbbsd/admin.c +++ b/mbbsd/admin.c @@ -452,7 +452,7 @@ m_mod_board(char *bname) { boardheader_t bh, newbh; int bid; - char genbuf[256], ans[4]; + char genbuf[PATHLEN], ans[4]; bid = getbnum(bname); if (!bid || !bname[0] || get_record(fn_board, &bh, sizeof(bh), bid) == -1) { @@ -491,7 +491,7 @@ m_mod_board(char *bname) break; case 'c': if (HasUserPerm(PERM_SYSOP)) { - char frombname[20], fromdir[256]; + char frombname[20], fromdir[PATHLEN]; #ifdef MERGEBBS if(getans("是否匯入SOB看板? (y/N)")=='y') { @@ -719,7 +719,7 @@ int x_file(void) { int aborted, num; - char ans[4], *fpath, buf[256]; + char ans[4], *fpath, buf[PATHLEN]; move(b_lines - 7, 0); /* Ptt */ diff --git a/mbbsd/announce.c b/mbbsd/announce.c index 6e09946d..8b947995 100644 --- a/mbbsd/announce.c +++ b/mbbsd/announce.c @@ -1484,7 +1484,7 @@ void BlogMain(int num) if( hash[0] != 0 && getans("請確定刪除(Y/N)?[N] ") == 'y' ){ MYSQL mysql; - char cmd[256]; + char cmd[PATHLEN]; snprintf(cmd, sizeof(cmd), "delete from comment where " "hash='%s'&&brdname='%s'", hash, currboard); @@ -1530,7 +1530,7 @@ void BlogMain(int num) case 'C': case 'c': { fileheader_t item; - char fpath[PATHLEN], adir[PATHLEN], buf[256]; + char fpath[PATHLEN], adir[PATHLEN], buf[PATHLEN]; setapath(fpath, currboard); stampdir(fpath, &item); strlcpy(item.title, "◆ Blog", sizeof(item.title)); 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; diff --git a/mbbsd/cache.c b/mbbsd/cache.c index 76518ce6..060e5dd7 100644 --- a/mbbsd/cache.c +++ b/mbbsd/cache.c @@ -735,7 +735,7 @@ setbtotal(int bid) { boardheader_t *bh = getbcache(bid); struct stat st; - char genbuf[256]; + char genbuf[PATHLEN]; int num, fd; assert(0<=bid-1 && bid-1<MAX_BOARD); diff --git a/mbbsd/calendar.c b/mbbsd/calendar.c index b87c774a..93394b08 100644 --- a/mbbsd/calendar.c +++ b/mbbsd/calendar.c @@ -133,7 +133,7 @@ static event_t * ReadEvent(int today) { FILE *fp; - char buf[256]; + char buf[PATHLEN]; static event_t head; head.next = NULL; diff --git a/mbbsd/friend.c b/mbbsd/friend.c index 16df6633..4ec98f9a 100644 --- a/mbbsd/friend.c +++ b/mbbsd/friend.c @@ -526,7 +526,7 @@ t_reject(void) int t_fix_aloha() { - char xid[IDLEN+1] = ""; + char xid[IDLEN+1]= ""; char fn[PATHLEN] = ""; clear(); diff --git a/mbbsd/gamble.c b/mbbsd/gamble.c index b915b3c3..ddc27bdc 100644 --- a/mbbsd/gamble.c +++ b/mbbsd/gamble.c @@ -207,7 +207,7 @@ doesnt_catch_up: int openticket(int bid) { - char path[MAXPATHLEN], buf[MAXPATHLEN], outcome[MAXPATHLEN]; + char path[PATHLEN], buf[PATHLEN], outcome[PATHLEN]; int i, money = 0, count, bet, price, total = 0, ticket[8] = {0, 0, 0, 0, 0, 0, 0, 0}; boardheader_t *bh = getbcache(bid); diff --git a/mbbsd/mail.c b/mbbsd/mail.c index 58068c3b..17dea28e 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -1059,7 +1059,7 @@ maildoent(int num, fileheader_t * ent) /* evaluate size */ size_t filesz = 0; char ut = 'k'; - char buf[MAXPATHLEN]; + char buf[PATHLEN]; struct stat st; if( !ent->filename[0] ){ @@ -2099,7 +2099,7 @@ int load_mailalert(const char *userid) { struct stat st; - char maildir[MAXPATHLEN]; + char maildir[PATHLEN]; int fd; register int num; fileheader_t my_mail; diff --git a/mbbsd/read.c b/mbbsd/read.c index e94e1191..c39a9381 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -482,9 +482,9 @@ 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 newdirect[PATHLEN]; int first_select; - char genbuf[MAXPATHLEN], *p = strstr(currdirect, "SR."); + char genbuf[PATHLEN], *p = strstr(currdirect, "SR."); static int _mode = 0; int reload, inc; int len, fd, fr, i, count = 0, reference = 0; @@ -568,7 +568,7 @@ select_read(const keeploc_t * locmem, int sr_mode) snprintf(genbuf, sizeof(genbuf), "%s%X.%X.%X", first_select ? "SR.":p, sr_mode, (int)strlen(keyword), DBCS_StringHash(keyword)); - if( strlen(genbuf) > MAXPATHLEN - 50 ) + if( strlen(genbuf) > PATHLEN - 50 ) return READ_REDRAW; // avoid overflow if (currstat == RMAIL) diff --git a/mbbsd/record.c b/mbbsd/record.c index d50df1d9..6b8a8af9 100644 --- a/mbbsd/record.c +++ b/mbbsd/record.c @@ -198,7 +198,7 @@ substitute_ref_record(const char *direct, fileheader_t * fhdr, int ent) /* rocker.011022: 避免lock檔開啟時不正常斷線,造成永久lock */ #ifndef _BBS_UTIL_C_ -static int +int force_open(const char *fname) { int fd; @@ -206,7 +206,7 @@ force_open(const char *fname) expire = now - 3600; /* lock 存在超過一個小時就是有問題! */ - if (dasht(fname) < expire) + if (dasht(fname) > expire) return -1; unlink(fname); fd = open(fname, O_WRONLY | O_TRUNC, 0644); @@ -217,9 +217,9 @@ force_open(const char *fname) /* new/old/lock file processing */ typedef struct nol_t { - char newfn[256]; - char oldfn[256]; - char lockfn[256]; + char newfn[PATHLEN]; + char oldfn[PATHLEN]; + char lockfn[PATHLEN]; } nol_t; #ifndef _BBS_UTIL_C_ @@ -406,7 +406,7 @@ safe_article_delete_range(const char *direct, int from, int to) strlcpy(fn, direct, sizeof(fn)); if( (ptr = rindex(fn, '/')) == NULL ) - return 0; + return -1; ++ptr; if( (fd = open(direct, O_RDWR)) != -1 && @@ -428,8 +428,9 @@ safe_article_delete_range(const char *direct, int from, int to) write(fd, &newfhdr, sizeof(fileheader_t)); } close(fd); + return 0; } - return 0; + return -1; } @@ -634,7 +635,7 @@ setaidfile(char *buf, const char *bn, aidu_t aidu) // try to load by AID int bid = 0; int n = 0, fd = 0; - char bfpath[PATHLEN] = ""; + char bfpath[PATHLEN]; boardheader_t *bh = NULL; fileheader_t fh; diff --git a/mbbsd/user.c b/mbbsd/user.c index fb158ea0..353beba4 100644 --- a/mbbsd/user.c +++ b/mbbsd/user.c @@ -1191,7 +1191,7 @@ u_editsig(void) int aborted; char ans[4]; int j, browsing = 0; - char genbuf[MAXPATHLEN]; + char genbuf[PATHLEN]; SigInfo si; memset(&si, 0, sizeof(si)); |