]> jfr.im git - irc/quakenet/newserv.git/blobdiff - core/nsmalloc.c
fix last 2 warnings
[irc/quakenet/newserv.git] / core / nsmalloc.c
index e4b0333417c2a17fe667b0d072517b04dbee428c..901987cc67fa6f5eae6b276496177711d624038d 100644 (file)
@@ -7,28 +7,12 @@
 #undef __NSMALLOC_H
 #include "nsmalloc.h"
 
+#include "../core/hooks.h"
 #include "../core/error.h"
 
-void *nsmalloc(unsigned int poolid, size_t size);
-void nsfree(unsigned int poolid, void *ptr);
-void nsfreeall(unsigned int poolid);
+struct nsmpool nsmpools[MAXPOOL];
 
-struct nsminfo {
-  struct nsminfo *next;
-  struct nsminfo *prev;
-
-  size_t size;
-  char data[];
-};
-
-struct nsmpool {
-  struct nsminfo first;
-
-  unsigned long count;
-  size_t size;
-};
-
-struct nsmpool pools[MAXPOOL];
+#ifndef USE_NSMALLOC_VALGRIND
 
 void *nsmalloc(unsigned int poolid, size_t size) {
   struct nsminfo *nsmp;
@@ -43,14 +27,14 @@ void *nsmalloc(unsigned int poolid, size_t size) {
     return NULL;
   
   nsmp->size=size;
-  pools[poolid].size+=size;
-  pools[poolid].count++;
+  nsmpools[poolid].size+=size;
+  nsmpools[poolid].count++;
 
-  nsmp->next=pools[poolid].first.next;
-  nsmp->prev=&pools[poolid].first;
-  if (pools[poolid].first.next)
-    pools[poolid].first.next->prev=nsmp;
-  pools[poolid].first.next=nsmp;
+  nsmp->next=nsmpools[poolid].first.next;
+  nsmp->prev=&nsmpools[poolid].first;
+  if (nsmpools[poolid].first.next)
+    nsmpools[poolid].first.next->prev=nsmp;
+  nsmpools[poolid].first.next=nsmp;
 
   return (void *)nsmp->data;
 }
@@ -59,7 +43,7 @@ void *nsmalloc(unsigned int poolid, size_t size) {
 void nsfree(unsigned int poolid, void *ptr) {
   struct nsminfo *nsmp;
   
-  if (poolid >= MAXPOOL)
+  if (!ptr || poolid >= MAXPOOL)
     return;
 
   /* evil */
@@ -70,8 +54,8 @@ void nsfree(unsigned int poolid, void *ptr) {
   if (nsmp->next)
     nsmp->next->prev=nsmp->prev;
 
-  pools[poolid].size-=nsmp->size;
-  pools[poolid].count--;
+  nsmpools[poolid].size-=nsmp->size;
+  nsmpools[poolid].count--;
 
   free(nsmp);
   return;
@@ -101,7 +85,7 @@ void *nsrealloc(unsigned int poolid, void *ptr, size_t size) {
   if (!nsmpn)
     return NULL;
 
-  pools[poolid].size+=size-nsmpn->size;
+  nsmpools[poolid].size+=size-nsmpn->size;
   nsmpn->size=size;
 
   /* always set as we have a sentinel */
@@ -119,35 +103,56 @@ void nsfreeall(unsigned int poolid) {
   if (poolid >= MAXPOOL)
     return;
  
-  for (nsmp=pools[poolid].first.next;nsmp;nsmp=nnsmp) {
+  for (nsmp=nsmpools[poolid].first.next;nsmp;nsmp=nnsmp) {
     nnsmp=nsmp->next;
     free(nsmp);
   }
   
-  pools[poolid].first.next=NULL;
-  pools[poolid].size=0;
-  pools[poolid].count=0;
+  nsmpools[poolid].first.next=NULL;
+  nsmpools[poolid].size=0;
+  nsmpools[poolid].count=0;
+}
+
+void nscheckfreeall(unsigned int poolid) {
+  if (poolid >= MAXPOOL)
+    return;
+  if (nsmpools[poolid].first.next) {
+    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);
+  }
 }
 
-void nsexit() {
+void nsexit(void) {
   unsigned int i;
   
-  for (i=0;i<MAXPOOL;i++) {
-    if (pools[i].first.next) {
-      Error("core",ERR_INFO,"nsmalloc: Blocks still allocated in pool #%d (%lub, %lu items)\n",i,pools[i].size, pools[i].count);
-      nsfreeall(i);
-    }
-  }
+  for (i=0;i<MAXPOOL;i++)
+    nsfreeall(i);
 }
 
-int nspoolstats(unsigned int poolid, size_t *size, unsigned long *count, char **poolname, size_t *realsize) {
-  if (poolid >= MAXPOOL)
-    return 0;
+#else
+
+void *nsmalloc(unsigned int poolid, size_t size) {
+  return malloc(size);
+}
+
+void *nsrealloc(unsigned int poolid, void *ptr, size_t size) {
+  return realloc(ptr, size);
+}
+
+void nsfree(unsigned int poolid, void *ptr) {
+  if(ptr)
+    free(ptr);
+}
 
-  *size = pools[poolid].size;
-  *realsize = pools[poolid].size + pools[poolid].count * sizeof(struct nsminfo) + sizeof(struct nsmpool);
-  *count = pools[poolid].count;
-  *poolname = poolnames[poolid];
+void nsfreeall(unsigned int poolid) {
+}
 
-  return 1;
+void nsexit(void) {
 }
+
+void nscheckfreeall(unsigned int poolid) {
+}
+
+#endif
+