/* nsmalloc: Simple pooled malloc() thing. */
#include <stdlib.h>
+#include <string.h>
#include "nsmalloc.h"
#define __NSMALLOC_C
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 */
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);
}
}
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) {