#include #include #include "user.h" struct user_t *users; void user_init() { users = malloc(sizeof(struct user_t) * USERS_MAX); memset(users, 0, sizeof(struct user_t) * USERS_MAX); } static unsigned long sdbm(char *str) { unsigned long hash = 0; int c; while(c = *str++) { hash = c + (hash << 6) + (hash << 16) - hash; } return hash; } struct user_t *user_get(char *nick) { unsigned long hash = sdbm(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) { struct user_t *temp_user = malloc(sizeof(struct user_t)); user->next = temp_user; user = temp_user; } if(!user->nick) { user->hash = hash; user->nick = strdup(nick); user->lines = user->words = 0; user->next = NULL; } } void user_free() { free(users); }