summaryrefslogtreecommitdiffstats
path: root/mbbsd/talk.c
diff options
context:
space:
mode:
authorwens <wens@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-12-05 11:17:32 +0800
committerwens <wens@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-12-05 11:17:32 +0800
commita95201ad4d7b597ec13650c28251af838892bef7 (patch)
tree83bdc62dcfd5dab3690b3fe0c96bc3eb6fabddfc /mbbsd/talk.c
parentf3cd768750fb89b3ab1e26d5b0dd42738af0a714 (diff)
downloadpttbbs-a95201ad4d7b597ec13650c28251af838892bef7.tar
pttbbs-a95201ad4d7b597ec13650c28251af838892bef7.tar.gz
pttbbs-a95201ad4d7b597ec13650c28251af838892bef7.tar.bz2
pttbbs-a95201ad4d7b597ec13650c28251af838892bef7.tar.lz
pttbbs-a95201ad4d7b597ec13650c28251af838892bef7.tar.xz
pttbbs-a95201ad4d7b597ec13650c28251af838892bef7.tar.zst
pttbbs-a95201ad4d7b597ec13650c28251af838892bef7.zip
merge ptt.linux
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2368 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/talk.c')
-rw-r--r--mbbsd/talk.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/mbbsd/talk.c b/mbbsd/talk.c
index c8bb5d50..dd1fd3d5 100644
--- a/mbbsd/talk.c
+++ b/mbbsd/talk.c
@@ -243,7 +243,7 @@ void login_friend_online(void)
}
#endif
for (i = 0; i < SHM->UTMPnumber && currutmp->friendtotal < MAX_FRIEND; i++) {
- uentp = (SHM->sorted[SHM->currsorted][0][i]);
+ uentp = (&SHM->uinfo[SHM->sorted[SHM->currsorted][0][i]]);
if (uentp && uentp->uid && (stat = set_friend_bit(currutmp, uentp))) {
stat1 = reverse_friend_stat(stat);
stat <<= 24;
@@ -1785,7 +1785,7 @@ pickup_bfriend(pickup_t * friends, int base)
int currsorted = SHM->currsorted, number = SHM->UTMPnumber;
friends = friends + base;
for (i = 0; i < number && ngets < MAX_FRIEND - base; ++i) {
- uentp = SHM->sorted[currsorted][0][i];
+ uentp = &SHM->uinfo[SHM->sorted[currsorted][0][i]];
/* TODO isvisible() 重複用到了 friend_stat() */
if (uentp && uentp->pid && uentp->brc_id == currutmp->brc_id &&
currutmp != uentp && isvisible(currutmp, uentp) &&
@@ -1806,7 +1806,8 @@ pickup(pickup_t * currpickup, int pickup_way, int *page,
int utmpnumber = SHM->UTMPnumber;
int friendtotal = currutmp->friendtotal;
- userinfo_t **utmp;
+ int *ulist;
+ userinfo_t *u;
int which, sorted_way, size = 0, friend;
if (friendtotal == 0)
@@ -1850,17 +1851,18 @@ pickup(pickup_t * currpickup, int pickup_way, int *page,
if (!(cuser.uflag & FRIEND_FLAG) && size < nPickups) {
sorted_way = ((pickup_way == 0) ? 0 : (pickup_way - 1));
- utmp = SHM->sorted[currsorted][sorted_way];
+ ulist = SHM->sorted[currsorted][sorted_way];
which = *page * nPickups - *nfriend;
if (which < 0)
which = 0;
for (; which < utmpnumber && size < nPickups; which++) {
- friend = friend_stat(currutmp, utmp[which]);
+ u = &SHM->uinfo[ulist[which]];
+ friend = friend_stat(currutmp, u);
/* TODO isvisible() 重複用到了 friend_stat() */
if ((pickup_way ||
- (currutmp != utmp[which] && !(friend & ST_FRIEND))) &&
- isvisible(currutmp, utmp[which])) {
- currpickup[size].ui = utmp[which];
+ (currutmp != u && !(friend & ST_FRIEND))) &&
+ isvisible(currutmp, u)) {
+ currpickup[size].ui = u;
currpickup[size++].friend = friend;
}
}
@@ -2267,12 +2269,11 @@ userlist(void)
if (si >= 0) {
pickup_t friends[MAX_FRIEND + 1];
int nGots, i;
- userinfo_t **utmp =
+ int *ulist =
SHM->sorted[SHM->currsorted]
[((pickup_way == 0) ? 0 : (pickup_way - 1))];
- fi = utmp[si] - &SHM->uinfo[0];
-
+ fi = ulist[si];
nGots = pickup_myfriend(friends, &myfriend,
&friendme, &badfriend);
for (i = 0; i < nGots; ++i)
@@ -2294,10 +2295,14 @@ userlist(void)
}
for( ; fi < nPickups && i < SHM->UTMPnumber ; ++i )
- if( isvisible(currutmp, utmp[i]) ){
- currpickup[fi].ui = utmp[i];
+ {
+ userinfo_t *u;
+ u = &SHM->uinfo[ulist[i]];
+ if( isvisible(currutmp, u) ){
+ currpickup[fi].ui = u;
currpickup[fi++].friend = 0;
}
+ }
skippickup = 1;
}
redrawall = redraw = 1;
@@ -2380,7 +2385,8 @@ userlist(void)
break;
}
for (i = 0; i < SHM->UTMPnumber; ++i) {
- uentp = SHM->sorted[SHM->currsorted][0][i];
+ uentp = &SHM->uinfo[
+ SHM->sorted[SHM->currsorted][0][i]];
if (uentp->pid && kill(uentp->pid, 0) != -1)
my_write(uentp->pid, genbuf,
uentp->userid, WATERBALL_PREEDIT, NULL);