list of players, but at most one in state PS_PLAYING. getplayer()
used to get the one first in the list. However, its callers need the
one in state PS_PLAYING. In particular, typed_wu() notifies the
player obtained from getplayer(). If the player in state PS_PLAYING
isn't first, say because another one is trying to log in, the
notification gets lost. Fix by making getplayer() return the player
in state PS_PLAYING.
return lp;
}
+/*
+ * Return player in state PS_PLAYING for CNUM.
+ */
struct player *
getplayer(natid cnum)
{
- register struct emp_qelem *qp;
+ struct emp_qelem *qp;
+ struct player *pl;
- for (qp = Players.q_forw; qp != &Players; qp = qp->q_forw)
- if (((struct player *)qp)->cnum == cnum)
- return (struct player *)qp;
+ for (qp = Players.q_forw; qp != &Players; qp = qp->q_forw) {
+ pl = (struct player *)qp;
+ if (pl->cnum == cnum && pl->state == PS_PLAYING)
+ return pl;
+ }
- return 0;
+ return NULL;
}
struct player *