+ return user;
+}
+
+struct UserNode* addUserMask(const char *mask) {
+ 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;
+ user = addUser(cmask);
+ if(user == NULL) return NULL;
+ ii = i+1;
+ } else if(cmask[i] == '.' && !user) {
+ //it's a server
+ return NULL;
+ } 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;
+}
+
+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;
+ user = malloc(sizeof(*user));
+ if (!user)
+ {
+ perror("malloc() failed");
+ return NULL;
+ }
+ strcpy(user->nick, cmask);
+ user->created = time(0);
+ 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
+ user = malloc(sizeof(*user));
+ if (!user)
+ {
+ perror("malloc() failed");
+ return NULL;
+ }
+ strcpy(user->host, cmask);
+ user->created = time(0);
+ 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) {
+ //nick only
+ user = malloc(sizeof(*user));
+ if (!user)
+ {
+ perror("malloc() failed");
+ return NULL;
+ }
+ strcpy(user->nick, cmask);
+ user->created = time(0);
+ user->ident[0] = 0;
+ user->host[0] = 0;
+ user->realname[0] = 0;
+ user->flags = 0;
+ user->channel = NULL;
+ return user;
+ }
+ strcpy(user->host, &cmask[ii]);
+ }
+ }
+ return user;