summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-06-16 02:14:11 +0800
committerkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-06-16 02:14:11 +0800
commit1e74218f83c72175954f25bff7ba13b78119a863 (patch)
tree3b49350ce20c49e55b80ecdea9fea7277543faf6
parent25d3eb59e94d5844209f7d401802f0f72c5c8ea6 (diff)
downloadpttbbs-1e74218f83c72175954f25bff7ba13b78119a863.tar
pttbbs-1e74218f83c72175954f25bff7ba13b78119a863.tar.gz
pttbbs-1e74218f83c72175954f25bff7ba13b78119a863.tar.bz2
pttbbs-1e74218f83c72175954f25bff7ba13b78119a863.tar.lz
pttbbs-1e74218f83c72175954f25bff7ba13b78119a863.tar.xz
pttbbs-1e74218f83c72175954f25bff7ba13b78119a863.tar.zst
pttbbs-1e74218f83c72175954f25bff7ba13b78119a863.zip
* revert r4584, r4586, r4595: to preserve old behavior.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4628 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--include/proto.h2
-rw-r--r--mbbsd/angel.c1
-rw-r--r--mbbsd/board.c39
-rw-r--r--mbbsd/brc.c15
4 files changed, 19 insertions, 38 deletions
diff --git a/include/proto.h b/include/proto.h
index 617b5827..efe9c4d7 100644
--- a/include/proto.h
+++ b/include/proto.h
@@ -100,7 +100,7 @@ int TopBoards(void);
/* brc */
int brc_initialize(void);
void brc_finalize(void);
-int brc_initial_board(int bid);
+int brc_initial_board(const char *boardname);
// v3 api: add 'modified' tag
int brc_unread(int bid, const char *fname, time4_t modified);
diff --git a/mbbsd/angel.c b/mbbsd/angel.c
index a18aa276..240e51a2 100644
--- a/mbbsd/angel.c
+++ b/mbbsd/angel.c
@@ -288,6 +288,7 @@ GotoNewHand(){
// usually crashed as 'assert(currbid == brc_currbid)'
if (currboard[0]) {
strlcpy(old_board, currboard, IDLEN + 1);
+ currboard = ""; // force enter_board
}
if (enter_board(BN_NEWBIE) == 0)
diff --git a/mbbsd/board.c b/mbbsd/board.c
index d199dc46..8f8f2dc5 100644
--- a/mbbsd/board.c
+++ b/mbbsd/board.c
@@ -74,8 +74,8 @@ inline boardheader_t *getparent(const boardheader_t *fh)
* -2 permission denied
* -3 error
* @note enter board:
- * 1. setup brc
- * 2. set currbid, currboard, currbrdattr, currBM, currmode, currdirect
+ * 1. setup brc (currbid, currboard, currbrdattr)
+ * 2. set currbid, currBM, currmode, currdirect
* 3. utmp brc_id
*/
int enter_board(const char *boardname)
@@ -107,10 +107,7 @@ int enter_board(const char *boardname)
/* really enter board */
brc_update();
- brc_initial_board(bid);
- currbid = bid;
- currboard = bcache[currbid - 1].brdname;
- currbrdattr = bcache[currbid - 1].brdattr;
+ brc_initial_board(bname);
setutmpbid(currbid);
set_board();
@@ -120,18 +117,6 @@ int enter_board(const char *boardname)
return 0;
}
-/*
- * leave_board 會變成不在任何看板內, 並不會返回前看板.
- * 因此 enter_board 跟 leave_board 不需要成對.
- */
-void leave_board()
-{
- currbid = 0;
- currboard = "";
- currbrdattr = 0;
- setutmpbid(0);
- currmode &= MODE_STARTED | MODE_DIRTY;
-}
static void imovefav(int old)
{
@@ -1103,7 +1088,7 @@ unread_position(char *dirfile, boardstat_t * ptr)
total = B_TOTAL(ptr);
num = total + 1;
if ((ptr->myattr & NBRD_UNREAD) && (fd = open(dirfile, O_RDWR)) > 0) {
- if (!brc_initial_board(ptr->bid)) {
+ if (!brc_initial_board(B_BH(ptr)->brdname)) {
num = 1;
} else {
num = total - 1;
@@ -1654,7 +1639,6 @@ choose_board(int newflag)
case 's':
{
char bname[IDLEN+1];
- const char *bak_currboard = currboard;
move(0, 0);
clrtoeol();
// since now user can use Ctrl-S to get access
@@ -1677,11 +1661,6 @@ choose_board(int newflag)
// try to enter board directly.
if(enter_board(bname) >= 0)
Read();
- if (bak_currboard[0])
- enter_board(bak_currboard);
- else
- leave_board();
-
// restore my mode
setutmpmode(newflag ? READNEW : READBRD);
}
@@ -1723,21 +1702,15 @@ choose_board(int newflag)
assert(0<=ptr->bid-1 && ptr->bid-1<MAX_BOARD);
if (!(B_BH(ptr)->brdattr & BRD_GROUPBOARD)) { /* 非sub class */
if (HasBoardPerm(B_BH(ptr))) {
- const char *bak_currboard = currboard;
- brc_initial_board(ptr->bid);
+ brc_initial_board(B_BH(ptr)->brdname);
if (newflag) {
- setbdir(buf, B_BH(ptr)->brdname);
+ setbdir(buf, currboard);
tmp = unread_position(buf, ptr);
head = tmp - t_lines / 2;
getkeep(buf, head > 1 ? head : 1, tmp + 1);
}
- enter_board(B_BH(ptr)->brdname);
Read();
- if (bak_currboard[0])
- enter_board(bak_currboard);
- else
- leave_board();
check_newpost(ptr);
head = -1;
setutmpmode(newflag ? READNEW : READBRD);
diff --git a/mbbsd/brc.c b/mbbsd/brc.c
index 15371f29..c7413612 100644
--- a/mbbsd/brc.c
+++ b/mbbsd/brc.c
@@ -436,16 +436,23 @@ brc_read_record(int bid, int *num, brc_rec *list){
* @return number of records in \a boardname
*/
int
-brc_initial_board(int bid)
+brc_initial_board(const char *boardname)
{
brc_initialize();
- if (bid == brc_currbid)
+ if (strcmp(currboard, boardname) == 0) {
+ assert(currbid == brc_currbid);
return brc_num;
+ }
brc_update(); /* write back first */
- assert(0<=bid-1 && bid-1<MAX_BOARD);
- brc_currbid = bid;
+ currbid = getbnum(boardname);
+ if( currbid == 0 )
+ currbid = getbnum(DEFAULT_BOARD);
+ assert(0<=currbid-1 && currbid-1<MAX_BOARD);
+ brc_currbid = currbid;
+ currboard = bcache[currbid - 1].brdname;
+ currbrdattr = bcache[currbid - 1].brdattr;
return brc_read_record(brc_currbid, &brc_num, brc_list);
}