]> jfr.im git - irc/quakenet/newserv.git/blobdiff - core/nsmalloc.c
gline->glines2, trusts_search->trusts2_search, trusts_newsearch->trusts2_newsearch
[irc/quakenet/newserv.git] / core / nsmalloc.c
index 990fa4066436f0b1cd5e66962c2e6ace22916a4f..0575c55c05f913f9ab21388876d6c2719d5b50d4 100644 (file)
@@ -1,6 +1,7 @@
 /* nsmalloc: Simple pooled malloc() thing. */
 
 #include <stdlib.h>
+#include <string.h>
 
 #include "nsmalloc.h"
 #define __NSMALLOC_C
@@ -39,11 +40,24 @@ void *nsmalloc(unsigned int poolid, size_t size) {
   return (void *)nsmp->data;
 }
 
+void *nscalloc(unsigned int poolid, size_t nmemb, size_t size) {
+  size_t total = nmemb * size;
+  void *m;
+
+  m = nsmalloc(poolid, total);
+  if(!m)
+    return NULL;
+
+  memset(m, 0, total);
+
+  return m;
+}
+
 /* we dump core on ptr == NULL */
 void nsfree(unsigned int poolid, void *ptr) {
   struct nsminfo *nsmp;
   
-  if (poolid >= MAXPOOL)
+  if (!ptr || poolid >= MAXPOOL)
     return;
 
   /* evil */
@@ -118,7 +132,7 @@ void nscheckfreeall(unsigned int poolid) {
     return;
  
   if (nsmpools[poolid].first.next) {
-    Error("core",ERR_INFO,"nsmalloc: Blocks still allocated in pool #%d (%s): %lub, %lu items",poolid,nsmpoolnames[poolid]?nsmpoolnames[poolid]:"??",nsmpools[poolid].size,nsmpools[poolid].count);
+    Error("core",ERR_INFO,"nsmalloc: Blocks still allocated in pool #%d (%s): %zub, %lu items",poolid,nsmpoolnames[poolid]?nsmpoolnames[poolid]:"??",nsmpools[poolid].size,nsmpools[poolid].count);
     nsfreeall(poolid);
   }
 }
@@ -127,7 +141,7 @@ void nsexit(void) {
   unsigned int i;
   
   for (i=0;i<MAXPOOL;i++)
-    nscheckfreeall(i);
+    nsfreeall(i);
 }
 
 #else
@@ -136,12 +150,17 @@ void *nsmalloc(unsigned int poolid, size_t size) {
   return malloc(size);
 }
 
+void *nscalloc(unsigned int poolid, size_t nmemb, size_t size) {
+  return calloc(nmemb, size);
+}
+
 void *nsrealloc(unsigned int poolid, void *ptr, size_t size) {
   return realloc(ptr, size);
 }
 
 void nsfree(unsigned int poolid, void *ptr) {
-  free(ptr);
+  if(ptr)
+    free(ptr);
 }
 
 void nsfreeall(unsigned int poolid) {