diff options
author | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-07-20 08:55:34 +0800 |
---|---|---|
committer | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-07-20 08:55:34 +0800 |
commit | 24ec3204b34c9e6749b9312f2edb84edb2a4cb34 (patch) | |
tree | 4c4bc5443344d91ab20163b0ed491732d2a732ed /mbbsd | |
parent | 047bb28fce410663731f69295cff89ab902a6085 (diff) | |
download | pttbbs-24ec3204b34c9e6749b9312f2edb84edb2a4cb34.tar pttbbs-24ec3204b34c9e6749b9312f2edb84edb2a4cb34.tar.gz pttbbs-24ec3204b34c9e6749b9312f2edb84edb2a4cb34.tar.bz2 pttbbs-24ec3204b34c9e6749b9312f2edb84edb2a4cb34.tar.lz pttbbs-24ec3204b34c9e6749b9312f2edb84edb2a4cb34.tar.xz pttbbs-24ec3204b34c9e6749b9312f2edb84edb2a4cb34.tar.zst pttbbs-24ec3204b34c9e6749b9312f2edb84edb2a4cb34.zip |
merge from MergeCache
git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@1065 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd')
-rw-r--r-- | mbbsd/Makefile | 5 | ||||
-rw-r--r-- | mbbsd/announce.c | 9 | ||||
-rw-r--r-- | mbbsd/bbs.c | 5 | ||||
-rw-r--r-- | mbbsd/board.c | 7 | ||||
-rw-r--r-- | mbbsd/cache.c | 307 | ||||
-rw-r--r-- | mbbsd/mail.c | 8 | ||||
-rw-r--r-- | mbbsd/mbbsd.c | 17 | ||||
-rw-r--r-- | mbbsd/stuff.c | 23 | ||||
-rw-r--r-- | mbbsd/toolkit.c | 13 | ||||
-rw-r--r-- | mbbsd/var.c | 4 |
10 files changed, 220 insertions, 178 deletions
diff --git a/mbbsd/Makefile b/mbbsd/Makefile index 7d16b04f..5762a2d7 100644 --- a/mbbsd/Makefile +++ b/mbbsd/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.28 2003/07/06 03:41:08 in2 Exp $ +# $Id: Makefile,v 1.29 2003/07/20 00:55:34 in2 Exp $ .include "../pttbbs.mk" @@ -14,8 +14,7 @@ OBJS= admin.o announce.o args.o bbs.o board.o cache.o cal.o card.o\ kaede.o lovepaper.o mail.o mbbsd.o menu.o more.o name.o osdep.o\ othello.o page.o read.o record.o register.o screen.o stuff.o\ talk.o term.o topsong.o user.o vice.o vote.o xyz.o\ - voteboard.o syspost.o var.o toolkit.o passwd.o\ - calendar.o + voteboard.o syspost.o var.o passwd.o calendar.o .SUFFIXES: .c .o .c.o: ../include/var.h diff --git a/mbbsd/announce.c b/mbbsd/announce.c index f0db7535..92b89d7f 100644 --- a/mbbsd/announce.c +++ b/mbbsd/announce.c @@ -1,4 +1,4 @@ -/* $Id: announce.c,v 1.30 2003/07/06 03:41:08 in2 Exp $ */ +/* $Id: announce.c,v 1.31 2003/07/20 00:55:34 in2 Exp $ */ #include "bbs.h" #define PATHLEN 256 @@ -863,7 +863,8 @@ a_menu(char *maintitle, char *path, int lastlevel) 還是檔案竟然是用 fstat(2) 而不是直接存在 .DIR 內 |||b 須等該資料寫入 .DIR 內再 implement才有效率. */ - if( !lastlevel && !HAS_PERM(PERM_SYSOP) && !HAS_PERM(PERM_SYSSUBOP) && !is_BM(bcache[currbid - 1].BM) && + if( !lastlevel && !HAS_PERM(PERM_SYSOP) && + !HAS_PERM(PERM_SYSSUBOP) && is_BM_cache(currbid) && dashd(fname) ) vmsg("只有板主才可以拷貝目錄唷!"); else @@ -961,7 +962,7 @@ a_menu(char *maintitle, char *path, int lastlevel) #ifdef BLOG case 'b': - if( !HAS_PERM(SYSOP) && !is_BM(bcache[currbid - 1].BM) ) + if( !HAS_PERM(PERM_SYSOP) && !is_BM_cache(currbid) ) vmsg("只有板主才可以用唷!"); else{ char genbuf[128]; @@ -974,7 +975,7 @@ a_menu(char *maintitle, char *path, int lastlevel) break; case 'B': - if( !HAS_PERM(SYSOP) && !is_BM(bcache[currbid - 1].BM) ) + if( !HAS_PERM(SYSOP) && !is_BM_cache(currbid) ) vmsg("只有板主才可以用唷!"); else BlogMain(me.now); diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c index a113b03d..3aaae9c2 100644 --- a/mbbsd/bbs.c +++ b/mbbsd/bbs.c @@ -1,4 +1,4 @@ -/* $Id: bbs.c,v 1.103 2003/07/06 23:09:25 kcwu Exp $ */ +/* $Id: bbs.c,v 1.104 2003/07/20 00:55:34 in2 Exp $ */ #include "bbs.h" static int recommend(int ent, fileheader_t * fhdr, char *direct); @@ -121,7 +121,7 @@ set_board() bp->title + 7); currmode = (currmode & (MODE_DIRTY | MODE_MENU)) | MODE_STARTED; - if (HAS_PERM(PERM_ALLBOARD) || is_BM(bp->BM)) + if (HAS_PERM(PERM_ALLBOARD) || is_BM_cache(currbid)) currmode = currmode | MODE_BOARD | MODE_POST; else if (haspostperm(currboard)) currmode |= MODE_POST; @@ -1466,6 +1466,7 @@ del_post(int ent, fileheader_t * fhdr, char *direct) if (!not_owned && strcmp(currboard, "Test")) { if (cuser.numposts) cuser.numposts--; + /* XXX: is_BM(cuser.userid) is always true @_@ */ if (!(currmode & MODE_DIGEST && is_BM(cuser.userid))){ move(b_lines - 1, 0); clrtoeol(); diff --git a/mbbsd/board.c b/mbbsd/board.c index 415dabe1..7351d1e9 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -1,4 +1,4 @@ -/* $Id: board.c,v 1.132 2003/07/03 03:37:39 victor Exp $ */ +/* $Id: board.c,v 1.133 2003/07/20 00:55:34 in2 Exp $ */ #include "bbs.h" #define BRC_STRLEN 15 /* Length of board name */ #define BRC_MAXSIZE 24576 @@ -575,7 +575,6 @@ int Ben_Perm(boardheader_t * bptr) { register int level, brdattr; - register char *ptr; level = bptr->level; brdattr = bptr->brdattr; @@ -583,8 +582,7 @@ Ben_Perm(boardheader_t * bptr) if (HAS_PERM(PERM_SYSOP)) return 1; - ptr = bptr->BM; - if (is_BM(ptr)) + if( is_BM_cache(bptr - bcache + 1) ) /* XXXbid */ return 1; /* 祕密看板:核對首席板主的好友名單 */ @@ -688,6 +686,7 @@ load_uidofgid(const int gid, const int type) else currbptr->next[type] = (boardheader_t *) ~ 0; } + static boardstat_t * addnewbrdstat(int n, int state) { diff --git a/mbbsd/cache.c b/mbbsd/cache.c index fb7baca8..ad2d7a7d 100644 --- a/mbbsd/cache.c +++ b/mbbsd/cache.c @@ -1,15 +1,10 @@ -/* $Id: cache.c,v 1.62 2003/06/07 14:19:12 kcwu Exp $ */ +/* $Id: cache.c,v 1.63 2003/07/20 00:55:34 in2 Exp $ */ #include "bbs.h" -#ifndef __FreeBSD__ -union semun { - int val; /* value for SETVAL */ - struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */ - unsigned short int *array; /* array for GETALL, SETALL */ - struct seminfo *__buf; /* buffer for IPC_INFO */ -}; +#ifdef _BBS_UTIL_C_ +# define log_usies(a, b) ; +# define abort_bbs(a) exit(1) #endif - /* * the reason for "safe_sleep" is that we may call sleep during SIGALRM * handler routine, while SIGALRM is blocked. if we use the original sleep, @@ -25,9 +20,7 @@ safe_sleep(unsigned int seconds) sigprocmask(SIG_BLOCK, &set, &oldset); if (sigismember(&oldset, SIGALRM)) { unsigned long retv; -#if !defined(_BBS_UTIL_C_) log_usies("SAFE_SLEEP ", "avoid hang"); -#endif sigemptyset(&set); sigaddset(&set, SIGALRM); sigprocmask(SIG_UNBLOCK, &set, NULL); @@ -38,22 +31,9 @@ safe_sleep(unsigned int seconds) return sleep(seconds); } -#if defined(_BBS_UTIL_C_) -static void -setapath(char *buf, char *boardname) -{ - snprintf(buf, "man/boards/%c/%s", boardname[0], boardname); -} - -static char *str_dotdir = ".DIR"; - -static void -setadir(char *buf, char *path) -{ - sprintf(buf, "%s/%s", path, str_dotdir); -} -#endif - +/* + * section - SHM + */ static void attach_err(int shmkey, char *name) { @@ -70,7 +50,7 @@ attach_shm(int shmkey, int shmsize) shmid = shmget(shmkey, shmsize, 0); if (shmid < 0) { - // SHM should be created by uhash_loader, NOT mbbsd. + // SHM should be created by uhash_loader, NOT mbbsd or other utils attach_err(shmkey, "shmget"); } else { shmptr = (void *)shmat(shmid, NULL, 0); @@ -81,12 +61,40 @@ attach_shm(int shmkey, int shmsize) return shmptr; } +void +attach_SHM(void) +{ + SHM = attach_shm(SHM_KEY, sizeof(SHM_t)); + if (!SHM->loaded) /* (uhash) assume fresh shared memory is + * zeroed */ + exit(1); + if (SHM->Btouchtime == 0) + SHM->Btouchtime = 1; + bcache = SHM->bcache; -#define SEM_FLG 0600 /* semaphore mode */ + GLOBALVAR = SHM->GLOBALVAR; + if (SHM->Ptouchtime == 0) + SHM->Ptouchtime = 1; + + if (SHM->Ftouchtime == 0) + SHM->Ftouchtime = 1; +} /* ----------------------------------------------------- */ /* semaphore : for critical section */ /* ----------------------------------------------------- */ +#define SEM_FLG 0600 /* semaphore mode */ + +#ifndef __FreeBSD__ +/* according to X/OPEN, we have to define it ourselves */ +union semun { + int val; /* value for SETVAL */ + struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */ + unsigned short int *array; /* array for GETALL, SETALL */ + struct seminfo *__buf; /* buffer for IPC_INFO */ +}; +#endif + void sem_init(int semkey, int *semid) { @@ -116,6 +124,9 @@ sem_lock(int op, int semid) } } +/* + * section - user cache(including uhash) + */ /* uhash ****************************************** */ /* * the design is this: we use another stand-alone program to create and load @@ -127,27 +138,6 @@ sem_lock(int op, int semid) * loaded yet. */ -/* attach_uhash should be called before using uhash */ - -void -attach_SHM(void) -{ - SHM = attach_shm(SHM_KEY, sizeof(SHM_t)); - if (!SHM->loaded) /* (uhash) assume fresh shared memory is - * zeroed */ - exit(1); - if (SHM->Btouchtime == 0) - SHM->Btouchtime = 1; - bcache = SHM->bcache; - - GLOBALVAR = SHM->GLOBALVAR; - if (SHM->Ptouchtime == 0) - SHM->Ptouchtime = 1; - - if (SHM->Ftouchtime == 0) - SHM->Ftouchtime = 1; -} - void add_to_uhash(int n, char *id) { @@ -166,13 +156,13 @@ add_to_uhash(int n, char *id) SHM->next_in_hash[*p = n] = -1; } +void +remove_from_uhash(int n) +{ /* * note: after remove_from_uhash(), you should add_to_uhash() (likely with a * different name) */ -void -remove_from_uhash(int n) -{ int h = StringHash(SHM->userid[n]); int *p = &(SHM->hash_head[h]); int times; @@ -188,32 +178,6 @@ remove_from_uhash(int n) } int -setumoney(int uid, int money) -{ - SHM->money[uid - 1] = money; - passwd_update_money(uid); - return SHM->money[uid - 1]; -} - -int -deumoney(int uid, int money) -{ - if (money < 0 && SHM->money[uid - 1] < -money) - return setumoney(uid, 0); - else - return setumoney(uid, SHM->money[uid - 1] + money); -} -int -demoney(int money) -{ - return deumoney(usernum, money); -} -int -moneyof(int uid) -{ /* ptt 改進金錢處理效率 */ - return SHM->money[uid - 1]; -} -int searchuser(char *userid) { int h, p, times; @@ -231,8 +195,6 @@ searchuser(char *userid) return 0; } -#if !defined(_BBS_UTIL_C_) - int getuser(char *userid) { @@ -284,6 +246,7 @@ searchnewuser(int mode) return 0; } +#ifndef _BBS_UTIL_C_ char * u_namearray(char buf[][IDLEN + 1], int *pnum, char *tag) { @@ -315,30 +278,10 @@ u_namearray(char buf[][IDLEN + 1], int *pnum, char *tag) } #endif -/*-------------------------------------------------------*/ -/* .UTMP cache */ -/*-------------------------------------------------------*/ -#if !defined(_BBS_UTIL_C_) -void -setutmpmode(unsigned int mode) -{ - if (currstat != mode) - currutmp->mode = currstat = mode; - - /* 追蹤使用者 */ - if (HAS_PERM(PERM_LOGUSER)) { - char msg[200]; - snprintf(msg, sizeof(msg), "%s setutmpmode to %s(%d) at %s", - cuser.userid, modestring(currutmp, 0), mode, Cdate(&now)); - log_user(msg); - } -} -#endif - -/* Ptt:這裡加上 hash 觀念找空的 utmp */ void getnewutmpent(userinfo_t * up) { +/* Ptt:這裡加上 hash 觀念找空的 utmp */ register int i, p; register userinfo_t *uentp; for (i = 0, p = StringHash(up->userid) % USHM_SIZE; i < USHM_SIZE; i++, p++) { @@ -375,7 +318,6 @@ search_ulist(int uid) return search_ulistn(uid, 1); } -#if !defined(_BBS_UTIL_C_) userinfo_t * search_ulist_pid(int pid) { @@ -401,6 +343,7 @@ search_ulist_pid(int pid) } return 0; } + userinfo_t * search_ulistn(int uid, int unum) { @@ -432,6 +375,7 @@ search_ulistn(int uid, int unum) } return 0; } + userinfo_t * search_ulist_userid(char *userid) { @@ -458,6 +402,7 @@ search_ulist_userid(char *userid) return 0; } +#ifndef _BBS_UTIL_C_ int count_logins(int uid, int show) { @@ -491,7 +436,6 @@ count_logins(int uid, int show) return 0; } - void purge_utmp(userinfo_t * uentp) { @@ -499,12 +443,68 @@ purge_utmp(userinfo_t * uentp) memset(uentp, 0, sizeof(userinfo_t)); SHM->UTMPneedsort = 1; } +#endif + +/* + * section - money cache + */ +int +setumoney(int uid, int money) +{ + SHM->money[uid - 1] = money; + passwd_update_money(uid); + return SHM->money[uid - 1]; +} + +int +deumoney(int uid, int money) +{ + if (money < 0 && SHM->money[uid - 1] < -money) + return setumoney(uid, 0); + else + return setumoney(uid, SHM->money[uid - 1] + money); +} + +int +demoney(int money) +{ + return deumoney(usernum, money); +} + +int +moneyof(int uid) +{ /* ptt 改進金錢處理效率 */ + return SHM->money[uid - 1]; +} + +/* + * section - utmp + */ +#if !defined(_BBS_UTIL_C_) /* _BBS_UTIL_C_ 不會有 utmp */ +void +setutmpmode(unsigned int mode) +{ + if (currstat != mode) + currutmp->mode = currstat = mode; + /* 追蹤使用者 */ + if (HAS_PERM(PERM_LOGUSER)) { + char msg[200]; + snprintf(msg, sizeof(msg), "%s setutmpmode to %s(%d) at %s", + cuser.userid, modestring(currutmp, 0), mode, Cdate(&now)); + log_user(msg); + } +} #endif -/*-------------------------------------------------------*/ -/* .BOARDS cache */ -/*-------------------------------------------------------*/ +/* + * section - board cache + */ +void touchbtotal(int bid) { + SHM->total[bid - 1] = 0; + SHM->lastposttime[bid - 1] = 0; +} + void touchdircache(int bid) { @@ -552,19 +552,22 @@ get_fileheader_cache(int bid, char *direct, fileheader_t * headers, memcpy(headers, &(SHM->dircache[bid - 1][n]), sizeof(fileheader_t) * ret); return ret; } + static int cmpboardname(boardheader_t ** brd, boardheader_t ** tmp) { return strcasecmp((*brd)->brdname, (*tmp)->brdname); } + static int cmpboardclass(boardheader_t ** brd, boardheader_t ** tmp) { return (strncmp((*brd)->title, (*tmp)->title, 4) << 8) + strcasecmp((*brd)->brdname, (*tmp)->brdname); } + static void -sort_bcache() +sort_bcache(void) { int i; /* critical section 不能單獨呼叫 呼叫reload_bcache or reset_board */ @@ -576,13 +579,13 @@ sort_bcache() qsort(SHM->bsorted[1], SHM->Bnumber, sizeof(boardheader_t *), (QCAST) cmpboardclass); } -static void -reload_bcache() + +void +reload_bcache(void) { if (SHM->Bbusystate) { safe_sleep(1); } -#if !defined(_BBS_UTIL_C_) else { int fd, i; @@ -604,11 +607,9 @@ reload_bcache() } SHM->Bbusystate = 0; } -#endif } -void -resolve_boards() +void resolve_boards(void) { while (SHM->Buptime < SHM->Btouchtime) { reload_bcache(); @@ -616,35 +617,32 @@ resolve_boards() numboards = SHM->Bnumber; } -void -touch_boards() +void touch_boards(void) { SHM->Btouchtime = now; numboards = -1; resolve_boards(); } -void -addbrd_touchcache() +void addbrd_touchcache(void) { SHM->Bnumber++; numboards = SHM->Bnumber; reset_board(numboards); } -#if !defined(_BBS_UTIL_C_) + void -reset_board(int bid) +reset_board(int bid) /* XXXbid: from 1 */ { /* Ptt: 這樣就不用老是touch board了 */ int fd, i, nuser; boardheader_t *bhdr; - if (--bid < 0) return; - if (SHM->Bbusystate || now - SHM->busystate_b[bid - 1] < 10) { + if (SHM->Bbusystate || now - SHM->busystate_b[bid] < 10) { safe_sleep(1); } else { - SHM->busystate_b[bid - 1] = now; - nuser = bcache[bid - 1].nuser; + SHM->busystate_b[bid] = now; + nuser = bcache[bid].nuser; bhdr = bcache; bhdr += bid; @@ -658,11 +656,13 @@ reset_board(int bid) bcache[i].firstchild[0] = NULL; bcache[i].firstchild[1] = NULL; } - nuser = bcache[bid - 1].nuser; - SHM->busystate_b[bid - 1] = 0; + SHM->busystate_b[bid] = 0; + + buildBMcache(bid + 1); /* XXXbid */ } } +#ifndef _BBS_UTIL_C_ /* because of Ben_Perm() in board.c */ int apply_boards(int (*func) (boardheader_t *)) { @@ -683,11 +683,13 @@ getbcache(int bid) { /* Ptt改寫 */ return bcache + bid - 1; } + int getbtotal(int bid) { return SHM->total[bid - 1]; } + void setbtotal(int bid) { @@ -725,7 +727,6 @@ touchbpostnum(int bid, int delta) *total += delta; } - int getbnum(char *bname) { @@ -748,7 +749,6 @@ getbnum(char *bname) return 0; } -#if !defined(_BBS_UTIL_C_) int haspostperm(char *bname) { @@ -784,14 +784,46 @@ haspostperm(char *bname) return HAS_PERM(i & ~PERM_POST); } -#endif + +void buildBMcache(int bid) /* bid starts from 1 */ +{ + char s[IDLEN * 3 + 3], *ptr; + int i, uid; + --bid; + + strncpy(s, bcache[bid].BM, sizeof(s)); + for( i = 0 ; s[i] != 0 ; ++i ) + if( !isalpha(s[i]) && !isdigit(s[i]) ) + s[i] = ' '; + + for( ptr = strtok(s, " "), i = 0 ; + i < MAX_BMs && ptr != NULL ; + ptr = strtok(NULL, " "), ++i ) + if( (uid = searchuser(ptr)) != 0 ) + SHM->BMcache[bid][i] = uid; + for( ; i < MAX_BMs ; ++i ) + SHM->BMcache[bid][i] = -1; +} + +int is_BM_cache(int bid) /* bid starts from 1 */ +{ + --bid; + if( currutmp->uid == SHM->BMcache[bid][0] || + currutmp->uid == SHM->BMcache[bid][1] || + currutmp->uid == SHM->BMcache[bid][2] || + currutmp->uid == SHM->BMcache[bid][3] ){ + cuser.userlevel |= PERM_BM; + return 1; + } + return 0; +} /*-------------------------------------------------------*/ /* PTT cache */ /*-------------------------------------------------------*/ -/* cachefor 動態看板 */ +/* cache for 動態看板 */ void -reload_pttcache() +reload_pttcache(void) { if (SHM->Pbusystate) safe_sleep(1); @@ -855,15 +887,13 @@ reload_pttcache() /* 等所有資料更新後再設定 uptime */ SHM->Puptime = SHM->Ptouchtime; -#if !defined(_BBS_UTIL_C_) log_usies("CACHE", "reload pttcache"); -#endif SHM->Pbusystate = 0; } } void -resolve_garbage() +resolve_garbage(void) { int count = 0; @@ -887,9 +917,9 @@ resolve_garbage() /*-------------------------------------------------------*/ /* PTT's cache */ /*-------------------------------------------------------*/ -/* cachefor from host 與最多上線人數 */ +/* cache for from host 與最多上線人數 */ static void -reload_fcache() +reload_fcache(void) { if (SHM->Fbusystate) safe_sleep(1); @@ -931,12 +961,15 @@ reload_fcache() } void -resolve_fcache() +resolve_fcache(void) { while (SHM->Fuptime < SHM->Ftouchtime) reload_fcache(); } +/* + * section - hbfl (hidden board friend list) + */ void hbflreload(int bid) { diff --git a/mbbsd/mail.c b/mbbsd/mail.c index 70549fbe..ff434498 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -1,4 +1,4 @@ -/* $Id: mail.c,v 1.27 2003/05/19 07:10:19 in2 Exp $ */ +/* $Id: mail.c,v 1.28 2003/07/20 00:55:34 in2 Exp $ */ #include "bbs.h" char currmaildir[32]; static char msg_cc[] = "\033[32m[群組名單]\033[m\n"; @@ -1230,7 +1230,7 @@ mail_cite(int ent, fileheader_t * fhdr, char *direct) char title[TTLEN + 1]; static char xboard[20]; char buf[20]; - boardheader_t *bp; + int bid; setuserfile(fpath, fhdr->filename); strlcpy(title, "◇ ", sizeof(title)); @@ -1253,11 +1253,11 @@ mail_cite(int ent, fileheader_t * fhdr, char *direct) completeboard_getname); if (*buf) strlcpy(xboard, buf, sizeof(xboard)); - if (*xboard && (bp = getbcache(getbnum(xboard)))) { + if (*xboard && ((bid = getbnum(xboard)) >= 0)){ /* XXXbid */ setapath(fpath, xboard); setutmpmode(ANNOUNCE); a_menu(xboard, fpath, HAS_PERM(PERM_ALLBOARD) ? 2 : - is_BM(bp->BM) ? 1 : 0); + is_BM_cache(bid) ? 1 : 0); } else { mail_man(); } diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index da5c6c94..4220f9b0 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -1,4 +1,4 @@ -/* $Id: mbbsd.c,v 1.89 2003/07/17 00:57:21 in2 Exp $ */ +/* $Id: mbbsd.c,v 1.90 2003/07/20 00:55:34 in2 Exp $ */ #include "bbs.h" #define SOCKET_QLEN 4 @@ -162,7 +162,7 @@ u_exit(char *mode) //userec_t xuser; int diff = (time(0) - login_start_time) / 60; - /* close fd 0 & a to terminate network */ + /* close fd 0 & 1 to terminate network */ close(0); close(1); @@ -697,13 +697,16 @@ where(char *from) #endif static void -check_BM() +check_BM(void) { + /* XXX: -_- */ int i; - boardheader_t *bhdr; cuser.userlevel &= ~PERM_BM; - for (i = 0, bhdr = bcache; i < numboards && !is_BM(bhdr->BM); i++, bhdr++); + for( i = 0 ; i < numboards ; ++i ) + if( is_BM_cache(i + 1) ) /* XXXbid */ + return; + //for (i = 0, bhdr = bcache; i < numboards && !is_BM(bhdr->BM); i++, bhdr++); } static void @@ -715,8 +718,6 @@ setup_utmp(int mode) uinfo.uid = usernum; uinfo.mode = currstat = mode; uinfo.mailalert = load_mailalert(cuser.userid); - if (!(cuser.numlogins % 20) && cuser.userlevel & PERM_BM) - check_BM(); /* Ptt 自動取下離職板主權力 */ uinfo.userlevel = cuser.userlevel; uinfo.sex = cuser.sex % 8; @@ -749,6 +750,8 @@ setup_utmp(int mode) uinfo.invisible = YEA; getnewutmpent(&uinfo); SHM->UTMPneedsort = 1; + if (!(cuser.numlogins % 20) && cuser.userlevel & PERM_BM) + check_BM(); /* Ptt 自動取下離職板主權力 */ #ifndef _BBS_UTIL_C_ friend_load(); nice(3); diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index a254b42c..80428954 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -1,4 +1,4 @@ -/* $Id: stuff.c,v 1.12 2003/06/28 08:47:45 kcwu Exp $ */ +/* $Id: stuff.c,v 1.13 2003/07/20 00:55:34 in2 Exp $ */ #include "bbs.h" /* ----------------------------------------------------- */ @@ -336,6 +336,7 @@ belong(char *filelist, char *key) return rc; } +#ifndef _BBS_UTIL_C_ /* getdata_buf */ time_t gettime(int line, time_t dt) { @@ -361,6 +362,8 @@ gettime(int line, time_t dt) } while ((endtime.tm_hour = atoi(yn)) < 0 || endtime.tm_hour > 23); return mktime(&endtime); } +#endif + char * Cdate(time_t * clock) { @@ -391,6 +394,8 @@ Cdatedate(time_t * clock) return foo; } +#ifndef _BBS_UTIL_C_ +/* 這一區都是有關於畫面處理的, 故 _BBS_UTIL_C_ 不須要 */ static void capture_screen() { @@ -619,6 +624,7 @@ show_help(char *helptext[]) } pressanykey(); } +#endif // _BBS_UTIL_C_ /* ----------------------------------------------------- */ /* use mmap() to malloc large memory in CRITICAL_MEMORY */ @@ -629,7 +635,7 @@ void *MALLOC(int size) int *p; p = (int *)mmap(NULL, (size + 4), PROT_READ | PROT_WRITE, MAP_ANON, -1, 0); p[0] = size; -#ifdef DEBUG +#if defined(DEBUG) && !defined(_BBS_UTIL_C_) vmsg("critical malloc %d bytes", size); #endif return (void *)&p[1]; @@ -639,8 +645,19 @@ void FREE(void *ptr) { int size = ((int *)ptr)[-1]; munmap((void *)(&(((int *)ptr)[-1])), size); -#ifdef DEBUG +#if defined(DEBUG) && !defined(_BBS_UTIL_C_) vmsg("critical free %d bytes", size); #endif } #endif + +unsigned +StringHash(unsigned char *s) +{ + unsigned int v = 0; + while (*s) { + v = (v << 8) | (v >> 24); + v ^= toupper(*s++); /* note this is case insensitive */ + } + return (v * 2654435769UL) >> (32 - HASH_BITS); +} diff --git a/mbbsd/toolkit.c b/mbbsd/toolkit.c deleted file mode 100644 index 99f80e0b..00000000 --- a/mbbsd/toolkit.c +++ /dev/null @@ -1,13 +0,0 @@ -/* $Id: toolkit.c,v 1.4 2002/07/21 09:26:02 in2 Exp $ */ -#include "bbs.h" - -unsigned -StringHash(unsigned char *s) -{ - unsigned int v = 0; - while (*s) { - v = (v << 8) | (v >> 24); - v ^= toupper(*s++); /* note this is case insensitive */ - } - return (v * 2654435769UL) >> (32 - HASH_BITS); -} diff --git a/mbbsd/var.c b/mbbsd/var.c index 59e40eb4..4ba3cf9e 100644 --- a/mbbsd/var.c +++ b/mbbsd/var.c @@ -1,4 +1,4 @@ -/* $Id: var.c,v 1.20 2003/07/06 23:09:25 kcwu Exp $ */ +/* $Id: var.c,v 1.21 2003/07/20 00:55:34 in2 Exp $ */ #define INCLUDE_VAR_H #include "bbs.h" @@ -591,6 +591,7 @@ unsigned char *adv_gomoku /* [978] */ = /* name.c */ word_t *toplev; +#ifndef _BBS_UTIL_C_ /* menu.c */ commands_t cmdlist[] = { {admin, PERM_SYSOP | PERM_VIEWSYSOP, "00Admin 【 系統維護區 】"}, @@ -606,6 +607,7 @@ commands_t cmdlist[] = { {Goodbye, 0, "GGoodbye 離開,再見……"}, {NULL, 0, NULL} }; +#endif /* friend.c */ /* Ptt 各種特別名單的檔名 */ |