fixed a core bug (user got lost in the channel userlist on nick change)
authorpk910 <philipp@zoelle1.de>
Tue, 4 Oct 2011 16:15:33 +0000 (18:15 +0200)
committerpk910 <philipp@zoelle1.de>
Tue, 4 Oct 2011 16:15:33 +0000 (18:15 +0200)
src/UserNode.c

index f23548b57e22a485f62e7dd9396530e4478b7004..72636797703fa7fb99da9ea38f78672b5896b527 100644 (file)
@@ -294,8 +294,23 @@ int renameUser(struct UserNode* user, const char *new_nick) {
         strcpy(user->nick, new_nick);
         return 1;
     }
-    int userListIndex = get_nicklist_entry(*new_nick);
-    delUser(user, 0);
+    //delUser(user, 0); //EPIC FAIL! This deletes the user from the channel Userlist -.-
+    //manually remove the user from the old userList
+    int userListIndex = get_nicklist_entry(user->nick[0]);
+    if(userListIndex != -1) {
+        struct UserNode *cuser, *last_user = NULL;
+        for(cuser = userList[userListIndex]; cuser; cuser = cuser->next) {
+            if(cuser == user) {
+                if(last_user)
+                    last_user->next = user->next;
+                else
+                    userList[userListIndex] = user->next;
+                break;
+            } else
+                last_user = cuser;
+        }
+    }
+    userListIndex = get_nicklist_entry(*new_nick);
     strcpy(user->nick, new_nick);
     user->next = userList[userListIndex];
     userList[userListIndex] = user;