diff options
Diffstat (limited to 'mbbsd')
-rw-r--r-- | mbbsd/angel.c | 1 | ||||
-rw-r--r-- | mbbsd/board.c | 39 | ||||
-rw-r--r-- | mbbsd/brc.c | 15 |
3 files changed, 18 insertions, 37 deletions
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); } |