diff options
author | Robin Burchell w00t@inspircd.org <Robin Burchell w00t@inspircd.org@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-09-30 18:45:09 +0000 |
---|---|---|
committer | Robin Burchell w00t@inspircd.org <Robin Burchell w00t@inspircd.org@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-09-30 18:45:09 +0000 |
commit | d2d64e17e730848eaa7081c6bd6eddcea8973428 (patch) | |
tree | 7429c903b84f63f064fa418df93e9b1b2eeb2c7a /src | |
parent | b7561cabd317bf34301e68915ed471ad02d9e987 (diff) |
Move users to a basic class.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1187 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r-- | src/nickserv.c | 5 | ||||
-rw-r--r-- | src/users.c | 65 |
2 files changed, 41 insertions, 29 deletions
diff --git a/src/nickserv.c b/src/nickserv.c index 6fda8b1f7..abda6e10e 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -1230,6 +1230,11 @@ NickAlias *findnick(const char *nick) return NULL; } +NickAlias *findnick(const std::string &nick) +{ + return findnick(nick.c_str()); +} + /*************************************************************************/ /* Return the NickCore structure for the given nick, or NULL if the core diff --git a/src/users.c b/src/users.c index ca4bd02b4..1653d5922 100644 --- a/src/users.c +++ b/src/users.c @@ -27,38 +27,45 @@ time_t maxusertime; /*************************************************************************/ /*************************************************************************/ -/* Allocate a new User structure, fill in basic values, link it to the - * overall list, and return it. Always successful. - */ - -static User *new_user(const char *nick) +User::User(const std::string &nick) { - User *user, **list; + User **list; + // XXX: we could do well to steal CoreException from insp + if (!nick.empty()) + throw "what the craq, empty nick passed to constructor"; - user = (User *)scalloc(sizeof(User), 1); - if (!nick) - nick = ""; - strscpy(user->nick, nick, NICKMAX); - list = &userlist[HASH(user->nick)]; - user->next = *list; - if (*list) - (*list)->prev = user; - *list = user; - user->na = findnick(nick); - if (user->na) - user->na->u = user; - usercnt++; - if (usercnt > maxusercnt) { - maxusercnt = usercnt; - maxusertime = time(NULL); - if (LogMaxUsers) - alog("user: New maximum user count: %d", maxusercnt); - } - user->isSuperAdmin = 0; /* always set SuperAdmin to 0 for new users */ - user->nickTrack = NULL; /* ensure no default tracking nick */ - return user; + // XXX: we should also duplicate-check here. + + strscpy(this->nick, nick.c_str(), NICKMAX); + list = &userlist[HASH(this->nick)]; + this->next = *list; + + if (*list) + (*list)->prev = this; + + *list = this; + + this->na = findnick(nick); + + if (this->na) + this->na->u = this; + + usercnt++; + + if (usercnt > maxusercnt) + { + maxusercnt = usercnt; + maxusertime = time(NULL); + if (LogMaxUsers) + alog("user: New maximum user count: %d", maxusercnt); + } + + this->isSuperAdmin = 0; /* always set SuperAdmin to 0 for new users */ + this->nickTrack = NULL; /* ensure no default tracking nick */ } + +/*************************************************************************/ /*************************************************************************/ /* Change the nickname of a user, and move pointers as necessary. */ @@ -614,7 +621,7 @@ User *do_nick(const char *source, char *nick, char *username, char *host, return NULL; /* Allocate User structure and fill it in. */ - user = new_user(nick); + user = new User(nick); user->username = sstrdup(username); user->host = sstrdup(host); user->server = findserver(servlist, server); |