diff options
Diffstat (limited to 'user.c')
-rw-r--r-- | user.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -24,12 +24,17 @@ struct user_t *user_get(char *nick) { int index = hash % USERS_MAX; struct user_t *user = &users[index]; - while(user->next && user->hash != hash) user = user->next; - if(user->hash != hash) { + /* If hash doesn't match and there exists another user, fetch it. */ + while(user->hash != hash && user->next) user = user->next; + /* If hash still doesn't match and the user exists, add a new user. */ + if(user->hash != hash && user->nick) { struct user_t *temp_user = malloc(sizeof(struct user_t)); user->next = temp_user; user = temp_user; + /* Initialize nick to NULL so the user can be correctly added. */ + user->nick = NULL; } + /* Add the new user data to the current pointer if none was found. */ if(!user->nick) { user->hash = hash; user->nick = strdup(nick); @@ -39,5 +44,15 @@ struct user_t *user_get(char *nick) { } void user_free() { + struct user_t *user; + for(int i = 0; i < USERS_MAX; i++) { + user = users[i].next; + while(user) { + struct user_t *temp = user->next; + free(user->nick); + free(user); + user = temp; + } + } free(users); } |