about summary refs log tree commit diff
path: root/user.c
diff options
context:
space:
mode:
Diffstat (limited to 'user.c')
-rw-r--r--user.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/user.c b/user.c
index e37452b..f856f6c 100644
--- a/user.c
+++ b/user.c
@@ -16,8 +16,11 @@
 
 #include "ircd.h"
 
+#include <stddef.h>
 #include <string.h>
 
+#include <err.h>
+
 
 const char *
 getnick(const struct Peer *peer)
@@ -40,3 +43,31 @@ user_reg(struct Peer *peer, const char *nick, const char *user, const char *real
 		reply(peer, 1);
 	}
 }
+
+void
+user_remove(size_t pid)
+{
+	size_t i, j;
+
+	for (i = 0; i < peers[peers_c-1].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)
+				break;
+		if (j == peers[peers_c-1].channels[i]->users_c)
+		{
+			warnx(
+				"user_unlink(): %s@%s doesn't belong to %s, "
+				"though they believe in the opposite",
+				getnick(&peers[peers_c-1]),
+				peers[peers_c-1].host,
+				peers[peers_c-1].channels[i]->name
+			);
+			continue;
+		}
+
+		peers[peers_c-1].channels[i]->users[j] = &peers[pid];
+	}
+
+	peers[pid] = peers[--peers_c];
+}