diff options
Diffstat (limited to 'mbbsd/cache.c')
-rw-r--r-- | mbbsd/cache.c | 1114 |
1 files changed, 606 insertions, 508 deletions
diff --git a/mbbsd/cache.c b/mbbsd/cache.c index 206b39e3..5f97c503 100644 --- a/mbbsd/cache.c +++ b/mbbsd/cache.c @@ -1,99 +1,115 @@ -/* $Id: cache.c,v 1.40 2002/07/04 19:46:16 in2 Exp $ */ +/* $Id: cache.c,v 1.41 2002/07/05 17:10:26 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 */ + 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 -/* 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, we'll never wake up. */ -unsigned int safe_sleep(unsigned int seconds) { - /* jochang sleep¦³°ÝÃD®É¥Î*/ - sigset_t set,oldset; - +/* + * 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, + * we'll never wake up. + */ +unsigned int +safe_sleep(unsigned int seconds) +{ + /* jochang sleep¦³°ÝÃD®É¥Î */ + sigset_t set, oldset; + sigemptyset(&set); sigprocmask(SIG_BLOCK, &set, &oldset); - if(sigismember(&oldset, SIGALRM)) { - unsigned long retv; + 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); - retv=sleep(seconds); - sigprocmask(SIG_BLOCK,&set,NULL); + sigaddset(&set, SIGALRM); + sigprocmask(SIG_UNBLOCK, &set, NULL); + retv = sleep(seconds); + sigprocmask(SIG_BLOCK, &set, NULL); return retv; } return sleep(seconds); } #if defined(_BBS_UTIL_C_) -static void setapath(char *buf, char *boardname) { +static void +setapath(char *buf, char *boardname) +{ sprintf(buf, "man/boards/%c/%s", boardname[0], boardname); } -static char *str_dotdir = ".DIR"; +static char *str_dotdir = ".DIR"; -static void setadir(char *buf, char *path) { +static void +setadir(char *buf, char *path) +{ sprintf(buf, "%s/%s", path, str_dotdir); } #endif -static void attach_err(int shmkey, char *name) { +static void +attach_err(int shmkey, char *name) +{ fprintf(stderr, "[%s error] key = %x\n", name, shmkey); fprintf(stderr, "errno = %d: %s\n", errno, strerror(errno)); exit(1); } -void *attach_shm(int shmkey, int shmsize) { - void *shmptr; - int shmid; +void * +attach_shm(int shmkey, int shmsize) +{ + void *shmptr; + int shmid; shmid = shmget(shmkey, shmsize, 0); - if(shmid < 0) { + if (shmid < 0) { shmid = shmget(shmkey, shmsize, IPC_CREAT | 0600); - if(shmid < 0) + if (shmid < 0) attach_err(shmkey, "shmget"); shmptr = (void *)shmat(shmid, NULL, 0); - if(shmptr == (void *)-1) + if (shmptr == (void *)-1) attach_err(shmkey, "shmat"); } else { shmptr = (void *)shmat(shmid, NULL, 0); - if(shmptr == (void *)-1) + if (shmptr == (void *)-1) attach_err(shmkey, "shmat"); } - + return shmptr; } -#define SEM_FLG 0600 /* semaphore mode */ +#define SEM_FLG 0600 /* semaphore mode */ /* ----------------------------------------------------- */ /* semaphore : for critical section */ /* ----------------------------------------------------- */ -void sem_init(int semkey,int *semid) { - union semun s; +void +sem_init(int semkey, int *semid) +{ + union semun s; - s.val=1; + s.val = 1; *semid = semget(semkey, 1, 0); - if(*semid == -1) { + if (*semid == -1) { *semid = semget(semkey, 1, IPC_CREAT | SEM_FLG); - if(*semid == -1) + if (*semid == -1) attach_err(semkey, "semget"); semctl(*semid, 0, SETVAL, s); } } -void sem_lock(int op,int semid) { - struct sembuf sops; +void +sem_lock(int op, int semid) +{ + struct sembuf sops; sops.sem_num = 0; sops.sem_flg = SEM_UNDO; @@ -101,94 +117,113 @@ void sem_lock(int op,int semid) { semop(semid, &sops, 1); } -/* uhash *******************************************/ -/* the design is this: - we use another stand-alone program to create and load data into the hash. - (that program could be run in rc-scripts or something like that) - after loading completes, the stand-alone program sets loaded to 1 and exits. - - the bbs exits if it can't attach to the shared memory or - the hash is not loaded yet. -*/ +/* uhash ****************************************** */ +/* + * the design is this: we use another stand-alone program to create and load + * data into the hash. (that program could be run in rc-scripts or something + * like that) after loading completes, the stand-alone program sets loaded to + * 1 and exits. + * + * the bbs exits if it can't attach to the shared memory or the hash is not + * loaded yet. + */ /* attach_uhash should be called before using uhash */ -void attach_SHM(void) +void +attach_SHM(void) { SHM = attach_shm(SHM_KEY, sizeof(SHM_t)); - if( !SHM->loaded ) /* (uhash) assume fresh shared memory is zeroed */ + if (!SHM->loaded) /* (uhash) assume fresh shared memory is + * zeroed */ exit(1); - if( SHM->Btouchtime == 0 ) + if (SHM->Btouchtime == 0) SHM->Btouchtime = 1; bcache = SHM->bcache; - + GLOBALVAR = SHM->GLOBALVAR; - if( SHM->Ptouchtime == 0 ) + if (SHM->Ptouchtime == 0) SHM->Ptouchtime = 1; - if( SHM->Ftouchtime == 0 ) + if (SHM->Ftouchtime == 0) SHM->Ftouchtime = 1; } -void add_to_uhash(int n, char *id) { - int *p, h = StringHash(id); - int times; +void +add_to_uhash(int n, char *id) +{ + int *p, h = StringHash(id); + int times; strcpy(SHM->userid[n], id); - + p = &(SHM->hash_head[h]); - - for( times = 0 ; times < MAX_USERS && *p != -1 ; ++times ) + + for (times = 0; times < MAX_USERS && *p != -1; ++times) p = &(SHM->next_in_hash[*p]); - if( times == MAX_USERS ) + if (times == MAX_USERS) abort_bbs(0); SHM->next_in_hash[*p = n] = -1; } -/* 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; +/* + * 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; - for( times = 0 ; times < MAX_USERS && (*p != -1 && *p != n); ++times ) + for (times = 0; times < MAX_USERS && (*p != -1 && *p != n); ++times) p = &(SHM->next_in_hash[*p]); - if( times == MAX_USERS ) + if (times == MAX_USERS) abort_bbs(0); - if(*p == n) + if (*p == n) *p = SHM->next_in_hash[n]; } -int setumoney(int uid, int money) { - SHM->money[uid-1]=money; - passwd_update_money(uid); - return SHM->money[uid-1]; +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 +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 §ï¶iª÷¿ú³B²z®Ä²v */ - return SHM->money[uid-1]; +int +demoney(int money) +{ + return deumoney(usernum, money); } -int searchuser(char *userid) { - int h, p, times; +int +moneyof(int uid) +{ /* ptt §ï¶iª÷¿ú³B²z®Ä²v */ + return SHM->money[uid - 1]; +} +int +searchuser(char *userid) +{ + int h, p, times; h = StringHash(userid); p = SHM->hash_head[h]; - - for( times = 0 ; times < MAX_USERS && p != -1 ; ++times ){ - if(strcasecmp(SHM->userid[p],userid) == 0) { - strcpy(userid,SHM->userid[p]); + + for (times = 0; times < MAX_USERS && p != -1; ++times) { + if (strcasecmp(SHM->userid[p], userid) == 0) { + strcpy(userid, SHM->userid[p]); return p + 1; } p = SHM->next_in_hash[p]; @@ -199,70 +234,80 @@ int searchuser(char *userid) { #if !defined(_BBS_UTIL_C_) -int getuser(char *userid) { - int uid; - - if((uid = searchuser(userid))) +int +getuser(char *userid) +{ + int uid; + + if ((uid = searchuser(userid))) passwd_query(uid, &xuser); return uid; } -char *getuserid(int num) { - if(--num >= 0 && num < MAX_USERS) - return ((char *) SHM->userid[num]); +char * +getuserid(int num) +{ + if (--num >= 0 && num < MAX_USERS) + return ((char *)SHM->userid[num]); return NULL; } -void setuserid(int num, char *userid) { - if(num > 0 && num <= MAX_USERS) { - if(num > SHM->number) +void +setuserid(int num, char *userid) +{ + if (num > 0 && num <= MAX_USERS) { + if (num > SHM->number) SHM->number = num; else - remove_from_uhash(num-1); - add_to_uhash(num-1,userid); + remove_from_uhash(num - 1); + add_to_uhash(num - 1, userid); } } /* 0 ==> §ä¹L´Á±b¸¹ */ /* 1 ==> «Ø¥ß·s±b¸¹ */ /* should do it by searching "" in the hash */ -int searchnewuser(int mode) { - register int i, num; +int +searchnewuser(int mode) +{ + register int i, num; num = SHM->number; i = 0; /* ¬°¤°»ò³oÃ䤣¥Î hash table ¥h§ä¦Ón¥Î linear search? */ - while(i < num) { - if(!SHM->userid[i++][0]) + while (i < num) { + if (!SHM->userid[i++][0]) return i; } - if(mode && (num < MAX_USERS)) + if (mode && (num < MAX_USERS)) return num + 1; return 0; } -char *u_namearray(char buf[][IDLEN + 1], int *pnum, char *tag) { - register char *ptr, tmp; - register int n, total; - char tagbuf[STRLEN]; - int ch, ch2, num; +char * +u_namearray(char buf[][IDLEN + 1], int *pnum, char *tag) +{ + register char *ptr, tmp; + register int n, total; + char tagbuf[STRLEN]; + int ch, ch2, num; - if(*tag == '\0') { + if (*tag == '\0') { *pnum = SHM->number; return SHM->userid[0]; } - for(n = 0; tag[n]; n++) + for (n = 0; tag[n]; n++) tagbuf[n] = chartoupper(tag[n]); tagbuf[n] = '\0'; ch = tagbuf[0]; ch2 = ch - 'A' + 'a'; total = SHM->number; - for(n = num = 0; n < total; n++) { + for (n = num = 0; n < total; n++) { ptr = SHM->userid[n]; tmp = *ptr; - if(tmp == ch || tmp == ch2) { - if(chkstr(tag, tagbuf, ptr)) + if (tmp == ch || tmp == ch2) { + if (chkstr(tag, tagbuf, ptr)) strcpy(buf[num++], ptr); } } @@ -275,92 +320,110 @@ char *u_namearray(char buf[][IDLEN + 1], int *pnum, char *tag) { /* .UTMP cache */ /*-------------------------------------------------------*/ #if !defined(_BBS_UTIL_C_) -void setutmpmode(int mode) { - if(currstat != mode) +void +setutmpmode(int mode) +{ + if (currstat != mode) currutmp->mode = currstat = mode; - + /* °lÂÜ¨Ï¥ÎªÌ */ - if(HAS_PERM(PERM_LOGUSER)) { - char msg[200]; + if (HAS_PERM(PERM_LOGUSER)) { + char msg[200]; sprintf(msg, "%s setutmpmode to %s(%d) at %s", cuser.userid, modestring(currutmp, 0), mode, Cdate(&now)); log_user(msg); } } #endif -static int cmputmpuserid(const void *i, const void *j){ - return strcasecmp((*((userinfo_t**)i))->userid, (*((userinfo_t**)j))->userid); +static int +cmputmpuserid(const void *i, const void *j) +{ + return strcasecmp((*((userinfo_t **) i))->userid, (*((userinfo_t **) j))->userid); } -static int cmputmpmode(const void *i, const void *j){ - return (*((userinfo_t**)i))->mode-(*((userinfo_t**)j))->mode; -} +static int +cmputmpmode(const void *i, const void *j) +{ + return (*((userinfo_t **) i))->mode - (*((userinfo_t **) j))->mode; +} -static int cmputmpidle(const void *i, const void *j){ - return (*((userinfo_t**)i))->lastact-(*((userinfo_t**)j))->lastact; -} +static int +cmputmpidle(const void *i, const void *j) +{ + return (*((userinfo_t **) i))->lastact - (*((userinfo_t **) j))->lastact; +} -static int cmputmpfrom(const void *i, const void *j){ - return strcasecmp((*((userinfo_t**)i))->from, (*((userinfo_t**)j))->from); -} +static int +cmputmpfrom(const void *i, const void *j) +{ + return strcasecmp((*((userinfo_t **) i))->from, (*((userinfo_t **) j))->from); +} -static int cmputmpfive(const void *i, const void *j){ - int type; - if((type=(*((userinfo_t**)j))->five_win - (*((userinfo_t**)i))->five_win)) - return type; - if((type=(*((userinfo_t**)i))->five_lose - (*((userinfo_t**)j))->five_lose)) - return type; - return (*((userinfo_t**)i))->five_tie-(*((userinfo_t**)j))->five_tie; -} +static int +cmputmpfive(const void *i, const void *j) +{ + int type; + if ((type = (*((userinfo_t **) j))->five_win - (*((userinfo_t **) i))->five_win)) + return type; + if ((type = (*((userinfo_t **) i))->five_lose - (*((userinfo_t **) j))->five_lose)) + return type; + return (*((userinfo_t **) i))->five_tie - (*((userinfo_t **) j))->five_tie; +} #if 0 -static int cmputmpsex(const void *i, const void *j) +static int +cmputmpsex(const void *i, const void *j) { - static int ladyfirst[]={1,0,1,0,1,0,3,3}; - return ladyfirst[(*(userinfo_t**)i)->sex&07]- - ladyfirst[(*(userinfo_t**)j)->sex&07]; + static int ladyfirst[] = {1, 0, 1, 0, 1, 0, 3, 3}; + return ladyfirst[(*(userinfo_t **) i)->sex & 07] - + ladyfirst[(*(userinfo_t **) j)->sex & 07]; } #endif -static int cmputmppid(const void *i, const void *j){ - return (*((userinfo_t**)i))->pid-(*((userinfo_t**)j))->pid; +static int +cmputmppid(const void *i, const void *j) +{ + return (*((userinfo_t **) i))->pid - (*((userinfo_t **) j))->pid; } -static int cmputmpuid(const void *i, const void *j){ - return (*((userinfo_t**)i))->uid-(*((userinfo_t**)j))->uid; +static int +cmputmpuid(const void *i, const void *j) +{ + return (*((userinfo_t **) i))->uid - (*((userinfo_t **) j))->uid; } -void sort_utmp() +void +sort_utmp() { - userinfo_t *uentp; - int count, i, ns; - short nusers[MAX_BOARD]; + userinfo_t *uentp; + int count, i, ns; + short nusers[MAX_BOARD]; now = time(0); - if( now - SHM->UTMPuptime < 60 && - (now == SHM->UTMPuptime || SHM->UTMPbusystate) ) - return; /* lazy sort */ - SHM->UTMPbusystate=1; + if (now - SHM->UTMPuptime < 60 && + (now == SHM->UTMPuptime || SHM->UTMPbusystate)) + return; /* lazy sort */ + SHM->UTMPbusystate = 1; SHM->UTMPuptime = now; ns = (SHM->currsorted ? 0 : 1); - - for( uentp = &SHM->uinfo[0], count = i = 0 ; - i < USHM_SIZE ; - ++i, uentp = &SHM->uinfo[i] ){ - if( uentp->pid ){ - if( uentp->sex < 0 || uentp->sex > 7 ) + + for (uentp = &SHM->uinfo[0], count = i = 0; + i < USHM_SIZE; + ++i, uentp = &SHM->uinfo[i]) { + if (uentp->pid) { + if (uentp->sex < 0 || uentp->sex > 7) purge_utmp(uentp); else SHM->sorted[ns][0][count++] = uentp; - } + } } SHM->UTMPnumber = count; - qsort(SHM->sorted[ns][0], count, sizeof(userinfo_t*), cmputmpuserid); - for( i = 0 ; i < count ; ++i ) - ((userinfo_t*)SHM->sorted[ns][0][i])->idoffset = i; - memcpy(SHM->sorted[ns][1],SHM->sorted[ns][0], sizeof(userinfo_t*) * count); - memcpy(SHM->sorted[ns][2],SHM->sorted[ns][0], sizeof(userinfo_t*) * count); - memcpy(SHM->sorted[ns][3],SHM->sorted[ns][0], sizeof(userinfo_t*) * count); - memcpy(SHM->sorted[ns][4],SHM->sorted[ns][0], sizeof(userinfo_t*) * count); - memcpy(SHM->sorted[ns][5],SHM->sorted[ns][0], sizeof(userinfo_t*) * count); - memcpy(SHM->sorted[ns][6],SHM->sorted[ns][0], sizeof(userinfo_t*) * count); - memcpy(SHM->sorted[ns][7],SHM->sorted[ns][0], sizeof(userinfo_t*) * count); + qsort(SHM->sorted[ns][0], count, sizeof(userinfo_t *), cmputmpuserid); + for (i = 0; i < count; ++i) + ((userinfo_t *) SHM->sorted[ns][0][i])->idoffset = i; + memcpy(SHM->sorted[ns][1], SHM->sorted[ns][0], sizeof(userinfo_t *) * count); + memcpy(SHM->sorted[ns][2], SHM->sorted[ns][0], sizeof(userinfo_t *) * count); + memcpy(SHM->sorted[ns][3], SHM->sorted[ns][0], sizeof(userinfo_t *) * count); + memcpy(SHM->sorted[ns][4], SHM->sorted[ns][0], sizeof(userinfo_t *) * count); + memcpy(SHM->sorted[ns][5], SHM->sorted[ns][0], sizeof(userinfo_t *) * count); + memcpy(SHM->sorted[ns][6], SHM->sorted[ns][0], sizeof(userinfo_t *) * count); + memcpy(SHM->sorted[ns][7], SHM->sorted[ns][0], sizeof(userinfo_t *) * count); qsort(SHM->sorted[ns][1], count, sizeof(userinfo_t *), cmputmpmode); qsort(SHM->sorted[ns][2], count, sizeof(userinfo_t *), cmputmpidle); qsort(SHM->sorted[ns][3], count, sizeof(userinfo_t *), cmputmpfrom); @@ -368,29 +431,31 @@ void sort_utmp() //qsort(SHM->sorted[ns][5], count, sizeof(userinfo_t *), cmputmpsex); qsort(SHM->sorted[ns][6], count, sizeof(userinfo_t *), cmputmpuid); qsort(SHM->sorted[ns][7], count, sizeof(userinfo_t *), cmputmppid); - SHM->currsorted=ns; - SHM->UTMPbusystate=0; + SHM->currsorted = ns; + SHM->UTMPbusystate = 0; memset(nusers, 0, sizeof(nusers)); - for( i = 0 ; i < count ; ++i ){ + for (i = 0; i < count; ++i) { uentp = SHM->sorted[ns][0][i]; - if( uentp && uentp->pid && - 0 < uentp->brc_id && uentp->brc_id < MAX_BOARD ) - ++nusers[ uentp->brc_id - 1 ]; + if (uentp && uentp->pid && + 0 < uentp->brc_id && uentp->brc_id < MAX_BOARD) + ++nusers[uentp->brc_id - 1]; } - for( i = 0 ; i < SHM->Bnumber ; ++i ) - if( SHM->bcache[i].brdname[0] != 0 ) + for (i = 0; i < SHM->Bnumber; ++i) + if (SHM->bcache[i].brdname[0] != 0) SHM->bcache[i].nuser = nusers[i]; } -// Ptt:³oÃä¥[¤JhashÆ[©À §äªÅªºutmp -void getnewutmpent(userinfo_t *up) { - register int i, p ; +//Ptt:³o à ä¥[¤Jhash Æ[©À§äªÅªºutmp + void getnewutmpent(userinfo_t * up) + { + register int i, p; register userinfo_t *uentp; - for(i = 0, p=StringHash(up->userid)%USHM_SIZE; i < USHM_SIZE; i++, p++) { - if(p==USHM_SIZE) p=0; + for (i = 0, p = StringHash(up->userid) % USHM_SIZE; i < USHM_SIZE; i++, p++) { + if (p == USHM_SIZE) + p = 0; uentp = &(SHM->uinfo[p]); - if(!(uentp->pid)) { + if (!(uentp->pid)) { memcpy(uentp, up, sizeof(userinfo_t)); currutmp = uentp; sort_utmp(); @@ -400,75 +465,75 @@ void getnewutmpent(userinfo_t *up) { exit(1); } -int apply_ulist(int (*fptr)(userinfo_t *)) { +int +apply_ulist(int (*fptr) (userinfo_t *)) +{ register userinfo_t *uentp; - register int i, state; + register int i, state; - for(i = 0; i < USHM_SIZE; i++) { + for (i = 0; i < USHM_SIZE; i++) { uentp = &(SHM->uinfo[i]); - if(uentp->pid && (PERM_HIDE(currutmp) || !PERM_HIDE(uentp))) - if((state = (*fptr) (uentp))) + if (uentp->pid && (PERM_HIDE(currutmp) || !PERM_HIDE(uentp))) + if ((state = (*fptr) (uentp))) return state; } return 0; } -userinfo_t *search_ulist(int uid) { - return search_ulistn(uid,1); +userinfo_t * +search_ulist(int uid) +{ + return search_ulistn(uid, 1); } -#if !defined(_BBS_UTIL_C_) -userinfo_t *search_ulist_pid(int pid) { - register int i=0, j, start = 0, end = SHM->UTMPnumber - 1; +#if !defined(_BBS_UTIL_C_) +userinfo_t * +search_ulist_pid(int pid) +{ + register int i = 0, j, start = 0, end = SHM->UTMPnumber - 1; register userinfo_t **ulist; - if( end == -1 ) + if (end == -1) return NULL; - ulist=SHM->sorted[SHM->currsorted][7]; - for(i=((start+end)/2); ;i=(start+end)/2) - { - j=pid-ulist[i]->pid; - if(!j) - { - return (userinfo_t *) (ulist[i]); - } - if(end==start) - { - break; - } - else if(i==start) - { - i=end; - start=end; - } - else if(j>0) start = i; - else end = i; - } + ulist = SHM->sorted[SHM->currsorted][7]; + for (i = ((start + end) / 2);; i = (start + end) / 2) { + j = pid - ulist[i]->pid; + if (!j) { + return (userinfo_t *) (ulist[i]); + } + if (end == start) { + break; + } else if (i == start) { + i = end; + start = end; + } else if (j > 0) + start = i; + else + end = i; + } return 0; } -userinfo_t *search_ulistn(int uid, int unum) +userinfo_t * +search_ulistn(int uid, int unum) { - register int i = 0, j, start = 0, end = SHM->UTMPnumber - 1; + register int i = 0, j, start = 0, end = SHM->UTMPnumber - 1; register userinfo_t **ulist; - if( end == -1 ) + if (end == -1) return NULL; - ulist=SHM->sorted[SHM->currsorted][6]; - for( i = ((start + end) / 2) ; ; i = (start + end) / 2 ){ + ulist = SHM->sorted[SHM->currsorted][6]; + for (i = ((start + end) / 2);; i = (start + end) / 2) { j = uid - ulist[i]->uid; - if( j == 0 ){ - for( ; i > 0 && uid == ulist[i - 1]->uid ; --i ) - ; /* «ü¨ì²Ä¤@µ§ */ - if( ulist[i + unum - 1]!=NULL && uid==ulist[i + unum - 1]->uid ) - return (userinfo_t *)(ulist[i + unum - 1]); - break; /* ¶W¹L½d³ò */ + if (j == 0) { + for (; i > 0 && uid == ulist[i - 1]->uid; --i); /* «ü¨ì²Ä¤@µ§ */ + if (ulist[i + unum - 1] != NULL && uid == ulist[i + unum - 1]->uid) + return (userinfo_t *) (ulist[i + unum - 1]); + break; /* ¶W¹L½d³ò */ } - if(end==start){ + if (end == start) { break; - } - else if(i == start){ + } else if (i == start) { i = end; start = end; - } - else if( j > 0 ) + } else if (j > 0) start = i; else end = i; @@ -476,44 +541,43 @@ userinfo_t *search_ulistn(int uid, int unum) return 0; } -int count_logins(int uid, int show) { - register int i=0, j, start = 0, end = SHM->UTMPnumber - 1, count; +int +count_logins(int uid, int show) +{ + register int i = 0, j, start = 0, end = SHM->UTMPnumber - 1, count; register userinfo_t **ulist; - if( end == -1 ) + if (end == -1) return NULL; - ulist=SHM->sorted[SHM->currsorted][6]; - for(i=((start+end)/2); ;i=(start+end)/2) - { - j = uid-ulist[i]->uid; - if(!j) - { - for(;i>0 && uid==ulist[i-1]->uid;i--);/* «ü¨ì²Ä¤@µ§ */ - for(count=0;uid==ulist[i+count]->uid;count++) - { - if(show) - prints("(%d) ¥Ø«eª¬ºA¬°: %-17.16s(¨Ó¦Û %s)\n", - count+1, modestring(ulist[i+count], 0), - ulist[i+count]->from); - } - return count; - } - if(end==start) - { - break; - } - else if(i==start) - { - i=end; - start=end; - } - else if(j>0) start = i; - else end = i; - } + ulist = SHM->sorted[SHM->currsorted][6]; + for (i = ((start + end) / 2);; i = (start + end) / 2) { + j = uid - ulist[i]->uid; + if (!j) { + for (; i > 0 && uid == ulist[i - 1]->uid; i--); /* «ü¨ì²Ä¤@µ§ */ + for (count = 0; uid == ulist[i + count]->uid; count++) { + if (show) + prints("(%d) ¥Ø«eª¬ºA¬°: %-17.16s(¨Ó¦Û %s)\n", + count + 1, modestring(ulist[i + count], 0), + ulist[i + count]->from); + } + return count; + } + if (end == start) { + break; + } else if (i == start) { + i = end; + start = end; + } else if (j > 0) + start = i; + else + end = i; + } return 0; } -void purge_utmp(userinfo_t *uentp) { +void +purge_utmp(userinfo_t * uentp) +{ logout_friend_online(uentp); memset(uentp, 0, sizeof(userinfo_t)); } @@ -523,78 +587,89 @@ void purge_utmp(userinfo_t *uentp) { /*-------------------------------------------------------*/ /* .BOARDS cache */ /*-------------------------------------------------------*/ -void touchdircache(int bid) +void +touchdircache(int bid) { - int *i= (int *)&SHM->dircache[bid - 1][0].filename[0]; - *i=0; -} - -void load_fileheader_cache(int bid, char *direct) + int *i = (int *)&SHM->dircache[bid - 1][0].filename[0]; + *i = 0; +} + +void +load_fileheader_cache(int bid, char *direct) { - int num=getbtotal(bid); - int n = num-DIRCACHESIZE+1; - if( SHM->Bbusystate != 1 && now - SHM->busystate_b[bid - 1] >= 10 ){ - SHM->busystate_b[bid-1] = now; - get_records(direct, SHM->dircache[bid - 1] , - sizeof(fileheader_t),n<1?1:n, DIRCACHESIZE); - SHM->busystate_b[bid-1] = 0; - } - else{ + int num = getbtotal(bid); + int n = num - DIRCACHESIZE + 1; + if (SHM->Bbusystate != 1 && now - SHM->busystate_b[bid - 1] >= 10) { + SHM->busystate_b[bid - 1] = now; + get_records(direct, SHM->dircache[bid - 1], + sizeof(fileheader_t), n < 1 ? 1 : n, DIRCACHESIZE); + SHM->busystate_b[bid - 1] = 0; + } else { safe_sleep(1); } } -int get_fileheader_cache(int bid, char *direct, fileheader_t *headers, - int recbase, int nlines) +int +get_fileheader_cache(int bid, char *direct, fileheader_t * headers, + int recbase, int nlines) { - int ret, n,num; + int ret, n, num; - num=getbtotal(bid); + num = getbtotal(bid); - ret = num-recbase+1, - n = (num - DIRCACHESIZE+1); + ret = num - recbase + 1, + n = (num - DIRCACHESIZE + 1); - if(SHM->dircache[bid - 1][0].filename[0]=='\0') - load_fileheader_cache(bid, direct); - if (n<1) - n=recbase-1; + if (SHM->dircache[bid - 1][0].filename[0] == '\0') + load_fileheader_cache(bid, direct); + if (n < 1) + n = recbase - 1; else - n=recbase-n; - if(n<0) n=0; - if (ret>nlines) ret=nlines; - memcpy(headers, &(SHM->dircache[bid - 1][n]),sizeof(fileheader_t)*ret); + n = recbase - n; + if (n < 0) + n = 0; + if (ret > nlines) + ret = nlines; + memcpy(headers, &(SHM->dircache[bid - 1][n]), sizeof(fileheader_t) * ret); return ret; } -static int cmpboardname(boardheader_t **brd, boardheader_t **tmp) { +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() +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() { - int i; - /*critical section ¤£¯à³æ¿W©I¥s ©I¥sreload_bcache or reset_board */ - for(i=0;i<SHM->Bnumber;i++){ - SHM->bsorted[1][i]=SHM->bsorted[0][i]=&bcache[i]; - } - qsort(SHM->bsorted[0], SHM->Bnumber, sizeof(boardheader_t *), - (QCAST)cmpboardname); - qsort(SHM->bsorted[1], SHM->Bnumber, sizeof(boardheader_t *), - (QCAST)cmpboardclass); -} -static void reload_bcache() { - if( SHM->Bbusystate ){ + int i; + /* critical section ¤£¯à³æ¿W©I¥s ©I¥sreload_bcache or reset_board */ + for (i = 0; i < SHM->Bnumber; i++) { + SHM->bsorted[1][i] = SHM->bsorted[0][i] = &bcache[i]; + } + qsort(SHM->bsorted[0], SHM->Bnumber, sizeof(boardheader_t *), + (QCAST) cmpboardname); + qsort(SHM->bsorted[1], SHM->Bnumber, sizeof(boardheader_t *), + (QCAST) cmpboardclass); +} +static void +reload_bcache() +{ + if (SHM->Bbusystate) { safe_sleep(1); } #if !defined(_BBS_UTIL_C_) else { - int fd,i; + int fd, i; SHM->Bbusystate = 1; - if((fd = open(fn_board, O_RDONLY)) > 0) { + if ((fd = open(fn_board, O_RDONLY)) > 0) { SHM->Bnumber = read(fd, bcache, MAX_BOARD * sizeof(boardheader_t)) / sizeof(boardheader_t); @@ -604,177 +679,189 @@ static void reload_bcache() { /* µ¥©Ò¦³ boards ¸ê®Æ§ó·s«á¦A³]©w uptime */ SHM->Buptime = SHM->Btouchtime; log_usies("CACHE", "reload bcache"); - sort_bcache(); - for( i = 0 ; i < SHM->Bnumber ; ++i ){ - bcache[i].firstchild[0]=NULL; - bcache[i].firstchild[1]=NULL; + sort_bcache(); + for (i = 0; i < SHM->Bnumber; ++i) { + bcache[i].firstchild[0] = NULL; + bcache[i].firstchild[1] = NULL; } SHM->Bbusystate = 0; } #endif } -void resolve_boards() { - while( SHM->Buptime < SHM->Btouchtime ){ +void +resolve_boards() +{ + while (SHM->Buptime < SHM->Btouchtime) { reload_bcache(); } numboards = SHM->Bnumber; } -void touch_boards() { - SHM->Btouchtime=now; +void +touch_boards() +{ + SHM->Btouchtime = now; numboards = -1; - resolve_boards(); + resolve_boards(); } -void addbrd_touchcache() +void +addbrd_touchcache() { SHM->Bnumber++; - numboards=SHM->Bnumber; - reset_board(numboards); + numboards = SHM->Bnumber; + reset_board(numboards); } #if !defined(_BBS_UTIL_C_) -void reset_board(int bid) { /* Ptt: ³o¼Ë´N¤£¥Î¦Ñ¬Otouch board¤F */ - int fd,i,nuser; - boardheader_t *bhdr; - +void +reset_board(int bid) +{ /* Ptt: ³o¼Ë´N¤£¥Î¦Ñ¬Otouch board¤F */ + int fd, i, nuser; + boardheader_t *bhdr; - if(--bid < 0) + + if (--bid < 0) return; - if( SHM->Bbusystate || now - SHM->busystate_b[bid - 1] < 10 ){ + if (SHM->Bbusystate || now - SHM->busystate_b[bid - 1] < 10) { safe_sleep(1); } else { - SHM->busystate_b[bid-1] = now; - nuser = bcache[bid-1].nuser; + SHM->busystate_b[bid - 1] = now; + nuser = bcache[bid - 1].nuser; bhdr = bcache; - bhdr += bid; - if((fd = open(fn_board, O_RDONLY)) > 0) { - lseek(fd, (off_t)(bid * sizeof(boardheader_t)), SEEK_SET); + bhdr += bid; + if ((fd = open(fn_board, O_RDONLY)) > 0) { + lseek(fd, (off_t) (bid * sizeof(boardheader_t)), SEEK_SET); read(fd, bhdr, sizeof(boardheader_t)); close(fd); } - sort_bcache(); - for(i=0;i<SHM->Bnumber;i++) - { - bcache[i].firstchild[0]=NULL; - bcache[i].firstchild[1]=NULL; - } - nuser = bcache[bid-1].nuser; - SHM->busystate_b[bid-1] = 0; + sort_bcache(); + for (i = 0; i < SHM->Bnumber; i++) { + bcache[i].firstchild[0] = NULL; + bcache[i].firstchild[1] = NULL; + } + nuser = bcache[bid - 1].nuser; + SHM->busystate_b[bid - 1] = 0; } -} +} -int apply_boards(int (*func)(boardheader_t *)) { - register int i; +int +apply_boards(int (*func) (boardheader_t *)) +{ + register int i; register boardheader_t *bhdr; - - for(i = 0, bhdr = bcache; i < numboards; i++, bhdr++) { - if(!(bhdr->brdattr & BRD_GROUPBOARD) && Ben_Perm(bhdr) && - (*func)(bhdr) == QUIT) + + for (i = 0, bhdr = bcache; i < numboards; i++, bhdr++) { + if (!(bhdr->brdattr & BRD_GROUPBOARD) && Ben_Perm(bhdr) && + (*func) (bhdr) == QUIT) return QUIT; } return 0; } #endif -boardheader_t *getbcache(int bid) { /* Ptt§ï¼g */ +boardheader_t * +getbcache(int bid) +{ /* Ptt§ï¼g */ return bcache + bid - 1; } -int getbtotal(int bid) +int +getbtotal(int bid) { return SHM->total[bid - 1]; } -void setbtotal(int bid) { - boardheader_t *bh = getbcache(bid); - struct stat st; - char genbuf[256]; - int num,fd; +void +setbtotal(int bid) +{ + boardheader_t *bh = getbcache(bid); + struct stat st; + char genbuf[256]; + int num, fd; sprintf(genbuf, "boards/%c/%s/.DIR", bh->brdname[0], bh->brdname); - if((fd = open(genbuf, O_RDWR)) < 0) - return; /* .DIR±¾¤F */ - fstat(fd, &st); - num = st.st_size / sizeof(fileheader_t); + if ((fd = open(genbuf, O_RDWR)) < 0) + return; /* .DIR±¾¤F */ + fstat(fd, &st); + num = st.st_size / sizeof(fileheader_t); SHM->total[bid - 1] = num; - if(num>0) - { - lseek(fd, (off_t) (num - 1) * sizeof(fileheader_t), SEEK_SET); - if(read(fd, genbuf, FNLEN)>=0) - { - SHM->lastposttime[bid - 1]=(time_t) atoi(&genbuf[2]); + if (num > 0) { + lseek(fd, (off_t) (num - 1) * sizeof(fileheader_t), SEEK_SET); + if (read(fd, genbuf, FNLEN) >= 0) { + SHM->lastposttime[bid - 1] = (time_t) atoi(&genbuf[2]); } - } - else - SHM->lastposttime[bid - 1] = 0; + } else + SHM->lastposttime[bid - 1] = 0; close(fd); - if(num) - touchdircache(bid); + if (num) + touchdircache(bid); } -void touchbpostnum(int bid, int delta) +void +touchbpostnum(int bid, int delta) { - int *total = &SHM->total[bid - 1]; + int *total = &SHM->total[bid - 1]; if (*total) *total += delta; } -int getbnum(char *bname) { - register int i=0, j, start = 0, end = SHM->Bnumber - 1; +int +getbnum(char *bname) +{ + register int i = 0, j, start = 0, end = SHM->Bnumber - 1; register boardheader_t **bhdr; - bhdr=SHM->bsorted[0]; - for(i=((start+end)/2); ;i=(start+end)/2) - { - if(! (j=strcasecmp(bname,bhdr[i]->brdname))) - return (int) (bhdr[i] - bcache +1); - if(end==start) - { - break; - } - else if(i==start) - { - i=end; - start=end; - } - else if(j>0) start = i; - else end = i; - } + bhdr = SHM->bsorted[0]; + for (i = ((start + end) / 2);; i = (start + end) / 2) { + if (!(j = strcasecmp(bname, bhdr[i]->brdname))) + return (int)(bhdr[i] - bcache + 1); + if (end == start) { + break; + } else if (i == start) { + i = end; + start = end; + } else if (j > 0) + start = i; + else + end = i; + } return 0; } #if !defined(_BBS_UTIL_C_) -int haspostperm(char *bname) { - register int i; - char buf[200]; +int +haspostperm(char *bname) +{ + register int i; + char buf[200]; setbfile(buf, bname, fn_water); - if(belong(buf, cuser.userid)) + if (belong(buf, cuser.userid)) return 0; - if(!strcasecmp(bname, DEFAULT_BOARD)) + if (!strcasecmp(bname, DEFAULT_BOARD)) return 1; if (!strcasecmp(bname, "PttLaw")) - return 1; + return 1; - if(!HAS_PERM(PERM_POST)) + if (!HAS_PERM(PERM_POST)) return 0; - - if(!(i = getbnum(bname))) + + if (!(i = getbnum(bname))) return 0; /* ¯µ±K¬ÝªO¯S§O³B²z */ - if(bcache[i - 1].brdattr & BRD_HIDE) + if (bcache[i - 1].brdattr & BRD_HIDE) return 1; i = bcache[i - 1].level; if (HAS_PERM(PERM_VIOLATELAW) && (i & PERM_VIOLATELAW)) - return 1; + return 1; else if (HAS_PERM(PERM_VIOLATELAW)) - return 0; + return 0; return HAS_PERM(i & ~PERM_POST); } @@ -784,15 +871,16 @@ int haspostperm(char *bname) { /* PTT cache */ /*-------------------------------------------------------*/ /* cachefor °ÊºA¬ÝªO© */ -void reload_pttcache() +void +reload_pttcache() { - if( SHM->Pbusystate ) + if (SHM->Pbusystate) safe_sleep(1); - else { /* jochang: temporary workaround */ - fileheader_t item, subitem; - char pbuf[256], buf[256], *chr; - FILE *fp, *fp1, *fp2; - int id, section = 0; + else { /* jochang: temporary workaround */ + fileheader_t item, subitem; + char pbuf[256], buf[256], *chr; + FILE *fp, *fp1, *fp2; + int id, section = 0; SHM->Pbusystate = 1; SHM->max_film = 0; @@ -800,53 +888,53 @@ void reload_pttcache() setapath(pbuf, "Note"); setadir(buf, pbuf); id = 0; - if((fp = fopen(buf, "r"))) { - while(fread(&item, sizeof(item), 1, fp)) { - if(item.title[3]=='<' && item.title[8]=='>') { - sprintf(buf,"%s/%s", pbuf, item.filename); + if ((fp = fopen(buf, "r"))) { + while (fread(&item, sizeof(item), 1, fp)) { + if (item.title[3] == '<' && item.title[8] == '>') { + sprintf(buf, "%s/%s", pbuf, item.filename); setadir(buf, buf); - if(!(fp1 = fopen(buf, "r"))) + if (!(fp1 = fopen(buf, "r"))) continue; SHM->next_refresh[section] = SHM->n_notes[section] = id; - section ++; - while(fread(&subitem, sizeof(subitem), 1, fp1)) { - sprintf(buf,"%s/%s/%s", pbuf, item.filename , + section++; + while (fread(&subitem, sizeof(subitem), 1, fp1)) { + sprintf(buf, "%s/%s/%s", pbuf, item.filename, subitem.filename); - if(!(fp2=fopen(buf,"r"))) + if (!(fp2 = fopen(buf, "r"))) continue; - fread(SHM->notes[id],sizeof(char), 200*11, fp2); - SHM->notes[id][200*11 - 1]=0; + fread(SHM->notes[id], sizeof(char), 200 * 11, fp2); + SHM->notes[id][200 * 11 - 1] = 0; id++; fclose(fp2); - if(id >= MAX_MOVIE) - break; + if (id >= MAX_MOVIE) + break; } - fclose(fp1); - if(id >= MAX_MOVIE || section >= MAX_MOVIE_SECTION) - break; + fclose(fp1); + if (id >= MAX_MOVIE || section >= MAX_MOVIE_SECTION) + break; } } fclose(fp); } SHM->next_refresh[section] = -1; - SHM->n_notes[section] = SHM->max_film = id-1; + SHM->n_notes[section] = SHM->max_film = id - 1; SHM->max_history = SHM->max_film - 2; - if(SHM->max_history > MAX_HISTORY - 1) + if (SHM->max_history > MAX_HISTORY - 1) SHM->max_history = MAX_HISTORY - 1; - if(SHM->max_history <0) SHM->max_history=0; + if (SHM->max_history < 0) + SHM->max_history = 0; - fp = fopen("etc/today_is","r"); - if(fp) { - fgets(SHM->today_is,15,fp); - if((chr = strchr(SHM->today_is,'\n'))) + fp = fopen("etc/today_is", "r"); + if (fp) { + fgets(SHM->today_is, 15, fp); + if ((chr = strchr(SHM->today_is, '\n'))) *chr = 0; SHM->today_is[15] = 0; fclose(fp); } - /* µ¥©Ò¦³¸ê®Æ§ó·s«á¦A³]©w uptime */ - SHM->Puptime = SHM->Ptouchtime ; + SHM->Puptime = SHM->Ptouchtime; #if !defined(_BBS_UTIL_C_) log_usies("CACHE", "reload pttcache"); #endif @@ -854,17 +942,20 @@ void reload_pttcache() } } -void resolve_garbage() { - int count=0; - - while(SHM->Puptime < SHM->Ptouchtime) { /* ¤£¥Îwhileµ¥ */ +void +resolve_garbage() +{ + int count = 0; + + while (SHM->Puptime < SHM->Ptouchtime) { /* ¤£¥Îwhileµ¥ */ reload_pttcache(); - if(count ++ > 10 && SHM->Pbusystate) { -/* Ptt: ³oÃä·|¦³°ÝÃD load¶W¹L10 ¬í·|©Ò¦³¶iloopªºprocess³£Åý busystate = 0 - ³o¼Ë·|©Ò¦³prcosee³£·|¦bload °ÊºA¬ÝªO ·|³y¦¨load¤j¼W - ¦ý¨S¦³¥Î³oÓfunctionªº¸Ü ¸U¤@load passwdÀɪºprocess¦º¤F ¤S¨S¦³¤H§â¥L - ¸Ñ¶} ¦P¼Ëªº°ÝÃDµo¥Í¦breload passwd -*/ + if (count++ > 10 && SHM->Pbusystate) { + /* + * Ptt: ³oÃä·|¦³°ÝÃD load¶W¹L10 ¬í·|©Ò¦³¶iloopªºprocess + * tate = 0 ³o¼Ë·|©Ò¦³prcosee³£·|¦bload °ÊºA¬ÝªO ·|³y¦¨load¤j¼W + * ¦ý¨S¦³¥Î³oÓfunctionªº¸Ü ¸U¤@load passwdÀɪºprocess¦º¤F + * ¤S¨S¦³¤H§â¥L ¸Ñ¶} ¦P¼Ëªº°ÝÃDµo¥Í¦breload passwd + */ SHM->Pbusystate = 0; #ifndef _BBS_UTIL_C_ log_usies("CACHE", "refork Ptt dead lock"); @@ -877,36 +968,37 @@ void resolve_garbage() { /* PTT's cache */ /*-------------------------------------------------------*/ /* cachefor from host »P³Ì¦h¤W½u¤H¼Æ */ -static void reload_fcache() { - if( SHM->Fbusystate ) +static void +reload_fcache() +{ + if (SHM->Fbusystate) safe_sleep(1); else { - FILE *fp; + FILE *fp; SHM->Fbusystate = 1; bzero(SHM->domain, sizeof(SHM->domain)); - if((fp = fopen("etc/domain_name_query","r"))) { - char buf[256],*po; - - SHM->top=0; - while(fgets(buf, sizeof(buf),fp)) { - if(buf[0] && buf[0] != '#' && buf[0] != ' ' && - buf[0] != '\n') { - sscanf(buf,"%s",SHM->domain[SHM->top]); + if ((fp = fopen("etc/domain_name_query", "r"))) { + char buf[256], *po; + + SHM->top = 0; + while (fgets(buf, sizeof(buf), fp)) { + if (buf[0] && buf[0] != '#' && buf[0] != ' ' && + buf[0] != '\n') { + sscanf(buf, "%s", SHM->domain[SHM->top]); po = buf + strlen(SHM->domain[SHM->top]); - while(*po == ' ') + while (*po == ' ') po++; - strncpy(SHM->replace[SHM->top],po,49); + strncpy(SHM->replace[SHM->top], po, 49); SHM->replace[SHM->top] - [strlen(SHM->replace[SHM->top])-1] = 0; + [strlen(SHM->replace[SHM->top]) - 1] = 0; (SHM->top)++; - if(SHM->top == MAX_FROM) + if (SHM->top == MAX_FROM) break; - } + } } } - - SHM->max_user=0; + SHM->max_user = 0; /* µ¥©Ò¦³¸ê®Æ§ó·s«á¦A³]©w uptime */ SHM->Fuptime = SHM->Ftouchtime; @@ -917,31 +1009,33 @@ static void reload_fcache() { } } -void resolve_fcache() +void +resolve_fcache() { - while( SHM->Fuptime < SHM->Ftouchtime ) + while (SHM->Fuptime < SHM->Ftouchtime) reload_fcache(); } -void hbflreload(int bid) +void +hbflreload(int bid) { - int hbfl[MAX_FRIEND + 1], i, num, uid; - char buf[128]; - FILE *fp; + int hbfl[MAX_FRIEND + 1], i, num, uid; + char buf[128]; + FILE *fp; memset(hbfl, 0, sizeof(hbfl)); - setbfile(buf, bcache[bid-1].brdname, fn_visable); - if( (fp = fopen(buf, "r")) != NULL ){ - for( num = 1 ; num <= MAX_FRIEND ; ++num ){ - if( fgets(buf, sizeof(buf), fp) == NULL ) + setbfile(buf, bcache[bid - 1].brdname, fn_visable); + if ((fp = fopen(buf, "r")) != NULL) { + for (num = 1; num <= MAX_FRIEND; ++num) { + if (fgets(buf, sizeof(buf), fp) == NULL) break; - for( i = 0 ; buf[i] != 0 ; ++i ) - if( buf[i] == ' ' ){ + for (i = 0; buf[i] != 0; ++i) + if (buf[i] == ' ') { buf[i] = 0; break; } - if( strcasecmp("guest", buf) == 0 || - (uid = searchuser(buf)) == 0 ) { + if (strcasecmp("guest", buf) == 0 || + (uid = searchuser(buf)) == 0) { --num; continue; } @@ -953,47 +1047,50 @@ void hbflreload(int bid) memcpy(SHM->hbfl[bid], hbfl, sizeof(hbfl)); } -int hbflcheck(int bid, int uid) +int +hbflcheck(int bid, int uid) { - int i; + int i; - if( SHM->hbfl[bid][0] < login_start_time - HBFLexpire ) + if (SHM->hbfl[bid][0] < login_start_time - HBFLexpire) hbflreload(bid); - for( i = 1 ; SHM->hbfl[bid][i] != 0 && i <= MAX_FRIEND ; ++i ){ - if( SHM->hbfl[bid][i] == uid ) + for (i = 1; SHM->hbfl[bid][i] != 0 && i <= MAX_FRIEND; ++i) { + if (SHM->hbfl[bid][i] == uid) return 0; } return 1; } #ifdef MDCACHE -char *cachepath(const char *fpath) +char * +cachepath(const char *fpath) { - static char cpath[128]; - char *ptr; + static char cpath[128]; + char *ptr; snprintf(cpath, sizeof(cpath), "cache/%s", fpath); - for( ptr = &cpath[6] ; *ptr != 0 ; ++ptr ) - if( *ptr == '/' ) + for (ptr = &cpath[6]; *ptr != 0; ++ptr) + if (*ptr == '/') *ptr = '.'; return cpath; } -int updatemdcache(const char *CPATH, const char *fpath) +int +updatemdcache(const char *CPATH, const char *fpath) { - /* save file to mdcache with *cpath and *fpath, - return: -1 if error - else the fd - */ - int len, sourcefd, targetfd; - char buf[1024], *cpath; + /* + * save file to mdcache with *cpath and *fpath, return: -1 if error + * else the fd + */ + int len, sourcefd, targetfd; + char buf[1024], *cpath; cpath = (CPATH == NULL) ? cachepath(fpath) : (char *)CPATH; - if( (sourcefd = open(fpath, O_RDONLY)) < 0 ) + if ((sourcefd = open(fpath, O_RDONLY)) < 0) return -1; - if( (targetfd = open(cpath, O_RDWR | O_CREAT | O_TRUNC, 0600)) < 0 ) + if ((targetfd = open(cpath, O_RDWR | O_CREAT | O_TRUNC, 0600)) < 0) /* md is full? */ return -1; - while( (len = read(sourcefd, buf, sizeof(buf))) > 0 ) - if( write(targetfd, buf, len) < len ){ + while ((len = read(sourcefd, buf, sizeof(buf))) > 0) + if (write(targetfd, buf, len) < len) { /* md is full? */ close(targetfd); unlink(cpath); @@ -1005,17 +1102,18 @@ int updatemdcache(const char *CPATH, const char *fpath) return targetfd; } -int mdcacheopen(char *fpath) +int +mdcacheopen(char *fpath) { - int fd; - char *cpath; - if( strncmp(fpath, "boards/", 7) && strncmp(fpath, "etc/", 4) ) + int fd; + char *cpath; + if (strncmp(fpath, "boards/", 7) && strncmp(fpath, "etc/", 4)) return open(fpath, O_RDONLY); #ifdef MDCACHEHITRATE ++GLOBE[0]; #endif - if( (fd = open((cpath = cachepath(fpath)), O_RDONLY)) < 0 ) + if ((fd = open((cpath = cachepath(fpath)), O_RDONLY)) < 0) return updatemdcache(cpath, fpath); #ifdef MDCACHEHITRATE else |