diff options
author | kcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2009-06-16 02:14:11 +0800 |
---|---|---|
committer | kcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2009-06-16 02:14:11 +0800 |
commit | 1fbf85139681696ed8c7ac849530baf4de756864 (patch) | |
tree | 7e0b230a5b4ff7568f221c5aa927587f699cae9f | |
parent | e537204bfbe441595fcf341952de49b70ccad8f1 (diff) | |
download | pttbbs-1fbf85139681696ed8c7ac849530baf4de756864.tar pttbbs-1fbf85139681696ed8c7ac849530baf4de756864.tar.gz pttbbs-1fbf85139681696ed8c7ac849530baf4de756864.tar.bz2 pttbbs-1fbf85139681696ed8c7ac849530baf4de756864.tar.lz pttbbs-1fbf85139681696ed8c7ac849530baf4de756864.tar.xz pttbbs-1fbf85139681696ed8c7ac849530baf4de756864.tar.zst pttbbs-1fbf85139681696ed8c7ac849530baf4de756864.zip |
* revert r4584, r4586, r4595: to preserve old behavior.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk@4628 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | pttbbs/include/proto.h | 2 | ||||
-rw-r--r-- | pttbbs/mbbsd/angel.c | 1 | ||||
-rw-r--r-- | pttbbs/mbbsd/board.c | 39 | ||||
-rw-r--r-- | pttbbs/mbbsd/brc.c | 15 |
4 files changed, 19 insertions, 38 deletions
diff --git a/pttbbs/include/proto.h b/pttbbs/include/proto.h index 617b5827..efe9c4d7 100644 --- a/pttbbs/include/proto.h +++ b/pttbbs/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/pttbbs/mbbsd/angel.c b/pttbbs/mbbsd/angel.c index a18aa276..240e51a2 100644 --- a/pttbbs/mbbsd/angel.c +++ b/pttbbs/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/pttbbs/mbbsd/board.c b/pttbbs/mbbsd/board.c index d199dc46..8f8f2dc5 100644 --- a/pttbbs/mbbsd/board.c +++ b/pttbbs/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/pttbbs/mbbsd/brc.c b/pttbbs/mbbsd/brc.c index 15371f29..c7413612 100644 --- a/pttbbs/mbbsd/brc.c +++ b/pttbbs/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); } |