diff options
Diffstat (limited to 'user.c')
| -rw-r--r-- | user.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/user.c b/user.c index 719c60e..5d9bc15 100644 --- a/user.c +++ b/user.c @@ -88,17 +88,19 @@ skip: void user_remove(size_t pid) { + struct Peer *last; size_t i, j; for (i = 0; i < peers[pid].channels_c; ++i) channel_exit(peers[pid].channels[i], &peers[pid]); - for (i = 0; i < peers[peers_c-1].channels_c; ++i) + last = &peers[peers_c-1]; + for (i = 0; i < last->channels_c; ++i) { - for (j = 0; j < peers[peers_c-1].channels[i]->users_c; ++j) - if (peers[peers_c-1].channels[i]->users[j]->fd == peers[peers_c-1].fd) + for (j = 0; j < last->channels[i]->peers_c; ++j) + if (last->channels[i]->peers[j].p->fd == last->fd) break; - if (j == peers[peers_c-1].channels[i]->users_c) + if (j == last->channels[i]->peers_c) { warnx( "user_unlink(): %s@%s doesn't belong to %s, " @@ -110,7 +112,7 @@ user_remove(size_t pid) continue; } - peers[peers_c-1].channels[i]->users[j] = &peers[pid]; + last->channels[i]->peers[j].p = &peers[pid]; } peers[pid] = peers[--peers_c]; |