int userListIndex = get_nicklist_entry(*nick);
if(userListIndex == -1 || userList[userListIndex] == NULL)
return NULL;
+ SYNCHRONIZE(cache_sync);
struct UserNode *user;
for(user = userList[userListIndex]; user; user = user->next) {
- if(!stricmp(nick, user->nick))
+ if(!stricmp(nick, user->nick)) {
+ DESYNCHRONIZE(cache_sync);
return user;
+ }
}
+ DESYNCHRONIZE(cache_sync);
return NULL;
}
struct UserNode* getUserByMask(const char *mask) { //case sensitive
+ SYNCHRONIZE(cache_sync);
char cmask[strlen(mask)+1];
strcpy(cmask, mask);
int i;
if(cmask[i] == '!') {
cmask[i] = 0;
user = getUserByNick(&cmask[0]);
+ DESYNCHRONIZE(cache_sync);
return user;
} else if(cmask[i] == '.') {
//it's a server
+ DESYNCHRONIZE(cache_sync);
return NULL;
}
}
+ DESYNCHRONIZE(cache_sync);
return NULL;
}
if(!isalpha(*nick))
return getUserByNick(nick);
+ SYNCHRONIZE(cache_sync);
int userListIndex;
struct UserNode *user;
userListIndex = get_nicklist_entry(tolower(*nick));
if(userListIndex != -1 && userList[userListIndex] != NULL) {
for(user = userList[userListIndex]; user; user = user->next) {
- if(!stricmp(nick, user->nick))
+ if(!stricmp(nick, user->nick)) {
+ DESYNCHRONIZE(cache_sync);
return user;
+ }
}
}
//search in the upper case "section"
userListIndex = get_nicklist_entry(toupper(*nick));
if(userListIndex != -1 && userList[userListIndex] != NULL) {
for(user = userList[userListIndex]; user; user = user->next) {
- if(!stricmp(nick, user->nick))
+ if(!stricmp(nick, user->nick)) {
+ DESYNCHRONIZE(cache_sync);
return user;
+ }
}
}
+ DESYNCHRONIZE(cache_sync);
return NULL;
}
int countUsersWithHost(char *host) {
+ SYNCHRONIZE(cache_sync);
int i, count = 0;
struct UserNode *user;
for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN; i++) {
}
}
}
+ DESYNCHRONIZE(cache_sync);
return count;
}
char *getAuthFakehost(char *auth) {
+ SYNCHRONIZE(cache_sync);
int i;
struct UserNode *user;
for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN; i++) {
for(user = userList[i]; user; user = user->next) {
if((user->flags & USERFLAG_ISAUTHED) && !strcmp(user->auth, auth) && isFakeHost(user->host)) {
+ DESYNCHRONIZE(cache_sync);
return user->host;
}
}
}
+ DESYNCHRONIZE(cache_sync);
return NULL;
}
struct UserNode* getAllUsers(struct UserNode *last) {
+ SYNCHRONIZE(cache_sync);
if(last == NULL || last->next == NULL) {
int cindex;
if(last == NULL)
cindex = get_nicklist_entry(last->nick[0]) + 1;
while(userList[cindex] == NULL && cindex < VALID_NICK_CHARS_FIRST_LEN)
cindex++;
- if(cindex > VALID_NICK_CHARS_FIRST_LEN) return NULL;
+ DESYNCHRONIZE(cache_sync);
+ if(cindex >= VALID_NICK_CHARS_FIRST_LEN) return NULL;
return userList[cindex];
- } else
+ } else {
+ DESYNCHRONIZE(cache_sync);
return last->next;
+ }
}
struct UserNode* getUsersWithAuth(const char *auth, struct UserNode *last) {
+ SYNCHRONIZE(cache_sync);
int cindex = (last ? get_nicklist_entry(last->nick[0]) : 0);
struct UserNode *cuser = last;
while(cindex <= VALID_NICK_CHARS_FIRST_LEN) {
for(cuser = (cuser ? cuser->next : userList[cindex]); cuser; cuser = cuser->next) {
- if((cuser->flags & USERFLAG_ISAUTHED) && !strcmp(cuser->auth, auth))
+ if((cuser->flags & USERFLAG_ISAUTHED) && !strcmp(cuser->auth, auth)) {
+ DESYNCHRONIZE(cache_sync);
return cuser;
+ }
}
cindex++;
cuser = NULL;
}
+ DESYNCHRONIZE(cache_sync);
return NULL;
}
int getUserCount() {
+ SYNCHRONIZE(cache_sync);
int i, count = 0;
struct UserNode *user;
for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN; i++) {
count++;
}
}
+ DESYNCHRONIZE(cache_sync);
return count;
}