summaryrefslogtreecommitdiffstats
path: root/mbbsd
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
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')
-rw-r--r--mbbsd/admin.c6
-rw-r--r--mbbsd/announce.c4
-rw-r--r--mbbsd/bbs.c39
-rw-r--r--mbbsd/cache.c2
-rw-r--r--mbbsd/calendar.c2
-rw-r--r--mbbsd/friend.c2
-rw-r--r--mbbsd/gamble.c2
-rw-r--r--mbbsd/mail.c4
-rw-r--r--mbbsd/read.c6
-rw-r--r--mbbsd/record.c17
-rw-r--r--mbbsd/user.c2
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));