return user;
}
-
struct UserNode* addUserMask(const char *mask) {
char cmask[strlen(mask)+1];
strcpy(cmask, mask);
for(i = 0; i < strlen(mask)+1; i++) {
if(cmask[i] == '!') {
cmask[i] = 0;
- user = addUser(&cmask[0]);
+ user = addUser(cmask);
if(user == NULL) return NULL;
ii = i+1;
} else if(cmask[i] == '.' && !user) {
return user;
}
+struct UserNode* createTempUser(const char *mask) {
+ //note: it could also be a server we have to create a temponary user for...
+ char cmask[strlen(mask)+1];
+ strcpy(cmask, mask);
+ int i, ii = 0;
+ struct UserNode *user = NULL;
+ for(i = 0; i < strlen(mask)+1; i++) {
+ if(cmask[i] == '!') {
+ cmask[i] = 0;
+ struct UserNode *user = malloc(sizeof(*user));
+ if (!user)
+ {
+ perror("malloc() failed");
+ return NULL;
+ }
+ strcpy(user->nick, nick);
+ user->ident[0] = 0;
+ user->host[0] = 0;
+ user->realname[0] = 0;
+ user->flags = 0;
+ user->channel = NULL;
+ ii = i+1;
+ } else if(cmask[i] == '.' && !user) {
+ //it's a server
+ struct UserNode *user = malloc(sizeof(*user));
+ if (!user)
+ {
+ perror("malloc() failed");
+ return NULL;
+ }
+ strcpy(user->host, cmask);
+ user->ident[0] = 0;
+ user->host[0] = 0;
+ user->realname[0] = 0;
+ user->flags = USERFLAG_ISSERVER;
+ user->channel = NULL;
+ return user;
+ } else if(cmask[i] == '@') {
+ if(user == NULL) return NULL;
+ cmask[i] = 0;
+ strcpy(user->ident, &cmask[ii]);
+ ii = i+1;
+ } else if(cmask[i] == '\0') {
+ if(user == NULL) return NULL;
+ strcpy(user->host, &cmask[ii]);
+ }
+ }
+ return user;
+}
+
int renameUser(struct UserNode* user, const char *new_nick) {
if(!is_valid_nick(new_nick))
return 0;
struct ChanUser *chanUser, *next;
for(chanUser = user->channel; chanUser; chanUser = next) {
next = chanUser->next_chan;
- quitChanUser(chanUser, freeUser);
+ removeChanUserFromLists(chanUser, 1, 0, freeUser);
}
}
if(freeUser)