From 20150280476994d7f9395a26c8bbb78a72c04918 Mon Sep 17 00:00:00 2001 From: kcwu Date: Sun, 23 Sep 2007 08:02:39 +0000 Subject: * revise code for entering board. * fix board permission. git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3571 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/board.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) (limited to 'mbbsd/board.c') diff --git a/mbbsd/board.c b/mbbsd/board.c index a7c5e382..bf0993a3 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -63,6 +63,55 @@ inline boardheader_t *getparent(const boardheader_t *fh) return NULL; } +/** + * @param[in] boardname board name, case insensitive + * @return 0 if success + * -1 if not found + * -2 permission denied + * -3 error + * @note enter board: + * 1. setup brc (currbid, currboard, currbrdattr) + * 2. set currbid, currBM, currmode, currdirect + * 3. utmp brc_id + */ +int enter_board(const char *boardname) +{ + boardheader_t *bh; + int bid; + char bname[IDLEN+1]; + char bpath[60]; + struct stat st; + + /* checking ... */ + if (boardname[0] == '\0' || !(bid = getbnum(boardname))) + return -1; + assert(0<=bid-1 && bid-1brdname, sizeof(bname)); + if (bname[0] == '\0') + return -3; + + setbpath(bpath, bname); + if (stat(bpath, &st) == -1) { + return -3; + } + + /* really enter board */ + brc_update(); + brc_initial_board(bname); + setutmpbid(currbid); + + set_board(); + setbdir(currdirect, currboard); + curredit &= ~EDIT_MAIL; + + return 0; +} + + void imovefav(int old) { char buf[5]; @@ -82,8 +131,7 @@ init_brdbuf(void) { if (brc_initialize()) return; - brc_initial_board(DEFAULT_BOARD); - set_board(); + enter_board(DEFAULT_BOARD); } void -- cgit v1.2.3