]> jfr.im git - irc/quakenet/newserv.git/blobdiff - nick/nick.c
Make valgrind a bit happier.
[irc/quakenet/newserv.git] / nick / nick.c
index 0c41709a11aa682e2ed2e68b281629f327d2b66b..12efd036e37f76bd2280688bc6ab34d011a4f754 100644 (file)
@@ -12,6 +12,8 @@
 #include "../server/server.h"
 #include "../parser/parser.h"
 #include "../lib/version.h"
+#include "../core/nsmalloc.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
@@ -42,7 +44,6 @@ nick **servernicks[MAXSERVERS];
 sstring *nickextnames[MAXNICKEXTS];
 sstring *nodeextnames[PATRICIA_MAXSLOTS];
 patricia_tree_t *iptree;
-sstring *authnameextnames[MAXAUTHNAMEEXTS];
 
 void nickstats(int hooknum, void *arg);
 
@@ -72,6 +73,24 @@ void _init() {
   iptree = patricia_new_tree(PATRICIA_MAXBITS);
 }
 
+void _fini() {
+  nsfreeall(POOL_NICK);
+  
+  /* Free the hooks */
+  deregisterhook(HOOK_SERVER_NEWSERVER,&handleserverchange);
+  deregisterhook(HOOK_SERVER_LOSTSERVER,&handleserverchange);
+  deregisterhook(HOOK_CORE_STATSREQUEST,&nickstats);
+  
+  /* And our server handlers */
+  deregisterserverhandler("N",&handlenickmsg);
+  deregisterserverhandler("D",&handlekillmsg);
+  deregisterserverhandler("Q",&handlequitmsg);
+  deregisterserverhandler("M",&handleusermodemsg);
+  deregisterserverhandler("W",&handlewhoismsg);
+  deregisterserverhandler("AC",&handleaccountmsg);
+  deregisterserverhandler("R",&handlestatsmsg);  
+}
+
 /*
  * This function handles servers appearing and disappearing.
  *  For a new server, the client table is allocated.
@@ -79,14 +98,14 @@ void _init() {
  */
 
 void handleserverchange(int hooknum, void *arg) {
-  int servernum;
+  long servernum;
   int i;
   
-  servernum=(int)arg;
+  servernum=(long)arg;
   
   switch(hooknum) {
     case HOOK_SERVER_NEWSERVER:
-      servernicks[servernum]=(nick **)malloc((serverlist[servernum].maxusernum+1)*sizeof(nick **));
+      servernicks[servernum]=(nick **)nsmalloc(POOL_NICK,(serverlist[servernum].maxusernum+1)*sizeof(nick **));
       memset(servernicks[servernum],0,(serverlist[servernum].maxusernum+1)*sizeof(nick **));
       break;
       
@@ -210,14 +229,14 @@ void nickstats(int hooknum, void *arg) {
     }
   }
     
-  if ((int)arg>5) {
+  if ((long)arg>5) {
     /* Full stats */
     sprintf(buf,"Nick    : %6d nicks    (HASH: %6d/%6d, chain %3d)",total,buckets,NICKHASHSIZE,maxchain);
-  } else if ((int)arg>2) {
+  } else if ((long)arg>2) {
     sprintf(buf,"Nick    : %6d users on network.",total);
   }
   
-  if ((int)arg>2) {
+  if ((long)arg>2) {
     triggerhook(HOOK_CORE_STATSREPLY,buf);
   }
 }
@@ -267,51 +286,6 @@ void releasenickext(int index) {
   }
 }
 
-int registerauthnameext(const char *name) {
-  int i;
-  
-  if (findauthnameext(name)!=-1) {
-    Error("nick",ERR_WARNING,"Tried to register duplicate authname extension %s",name);
-    return -1;
-  }
-  
-  for (i=0;i<MAXAUTHNAMEEXTS;i++) {
-    if (authnameextnames[i]==NULL) {
-      authnameextnames[i]=getsstring(name,100);
-      return i;
-    }
-  }
-  
-  Error("nick",ERR_WARNING,"Tried to register too many authname extensions: %s",name);
-  return -1;
-}
-
-int findauthnameext(const char *name) {
-  int i;
-  
-  for (i=0;i<MAXAUTHNAMEEXTS;i++) {
-    if (authnameextnames[i]!=NULL && !ircd_strcmp(name,authnameextnames[i]->content)) {
-      return i;
-    }
-  }
-  
-  return -1;
-}
-
-void releaseauthnameext(int index) {
-  int i;
-  authname *anp;
-  
-  freesstring(authnameextnames[index]);
-  authnameextnames[index]=NULL;
-  
-  for (i=0;i<AUTHNAMEHASHSIZE;i++) {
-    for (anp=authnametable[i];anp;anp=anp->next) {
-      anp->exts[index]=NULL;
-    }
-  }
-}
-
 /* visiblehostmask
  *  Produces the "apparent" hostmask as seen by network users.
  */