Merge branch 'development'
[NeonServV5.git] / src / ChanUser.c
index b9ffde32ca1d76bcf07b57d134fdb5d09560ece2..e18ce4dd57590d7a718f13cebfda8edfadd02243 100644 (file)
@@ -1,4 +1,4 @@
-/* ChanUser.c - NeonServ v5.3
+/* ChanUser.c - NeonServ v5.6
  * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
 #include "ChanNode.h"
 #include "ModeNode.h"
 #include "UserNode.h"
+#include "log.h"
 
 struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) {
-    struct ChanUser *chanuser = malloc(sizeof(*chan));
+    struct ChanUser *chanuser = malloc(sizeof(*chanuser));
     if (!chanuser)
     {
-        perror("malloc() failed");
+        printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__);
         return NULL;
     }
     chanuser->flags = 0;
     chanuser->user = user;
     chanuser->chan = chan;
+    chanuser->visCount = 0;
     
     chanuser->changeTime = 0;
     chanuser->spamnode = NULL;
@@ -49,15 +51,16 @@ struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) {
 }
 
 struct ChanUser* addInvisibleChanUser(struct ChanNode *chan, struct UserNode *user) {
-    struct ChanUser *chanuser = malloc(sizeof(*chan));
+    struct ChanUser *chanuser = malloc(sizeof(*chanuser));
     if (!chanuser)
     {
-        perror("malloc() failed");
+        printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__);
         return NULL;
     }
     chanuser->flags = CHANUSERFLAG_INVISIBLE;
     chanuser->user = user;
     chanuser->chan = chan;
+    chanuser->visCount = 0;
     
     chanuser->changeTime = 0;
     chanuser->spamnode = NULL;
@@ -121,18 +124,16 @@ void delChanUser(struct ChanUser *chanuser, int do_freeChanUser) {
     SYNCHRONIZE(cache_sync);
     struct ChanUser *cchanuser, *last;
     //remove it from the user's channel-list
-    if(!(chanuser->flags & CHANUSERFLAG_INVISIBLE)) {
-        last = NULL;
-        for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
-            if(cchanuser == chanuser) {
-                if(last) 
-                    last->next_chan = chanuser->next_chan;
-                else
-                    chanuser->user->channel = chanuser->next_chan;
-                break;
-            } else
-                last = cchanuser;
-        }
+    last = NULL;
+    for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
+        if(cchanuser == chanuser) {
+            if(last) 
+                last->next_chan = chanuser->next_chan;
+            else
+                chanuser->user->channel = chanuser->next_chan;
+            break;
+        } else
+            last = cchanuser;
     }
 
     //remove it from the channel's user-list