]> jfr.im git - irc/quakenet/newserv.git/blobdiff - core/nsmalloc.h
fixes for clang
[irc/quakenet/newserv.git] / core / nsmalloc.h
index f6e8e906cd857c92d0b16b4f897d9d594250ee24..b62e6353d944446d3ac40a630583614cab325f8e 100644 (file)
@@ -1,20 +1,74 @@
 /* nsmalloc: Simple pooled malloc() thing. */
 
+#ifndef __NSMALLOC_H
+#define __NSMALLOC_H
+
+#ifdef __NSMALLOC_C
+#define pool(x) #x
+#define beginpools() char *nsmpoolnames[MAXPOOL] =
+#define endpools();
+#else
+#define pool(x) POOL_ ## x
+#define beginpools(x) typedef enum nsmallocpools
+#define endpools() nsmallocpools; extern char *nsmpoolnames[MAXPOOL];
+
 #include <stdlib.h>
 
 void *nsmalloc(unsigned int poolid, size_t size);
 void nsfree(unsigned int poolid, void *ptr);
 void nsfreeall(unsigned int poolid);
 void nsexit(void);
+void *nsrealloc(unsigned int poolid, void *ptr, size_t size);
+void nscheckfreeall(unsigned int poolid);
+void *nscalloc(unsigned int poolid, size_t nmemb, size_t size);
 
 #define MAXPOOL                100
 
+struct nsminfo {
+  struct nsminfo *next;
+  struct nsminfo *prev;
+
+  size_t size;
+  char data[];
+};
+
+struct nsmpool {
+  unsigned long count;
+  size_t size;
+  struct nsminfo first;
+};
+
+extern struct nsmpool nsmpools[MAXPOOL];
+
+#endif
+
 /* Pools here in the order they were created */
-#define POOL_AUTHEXT           0
-#define POOL_CHANINDEX         1
-#define POOL_BANS              2
-#define POOL_CHANNEL           3
-#define POOL_NICK              4
-#define POOL_CHANSERVDB                5
-#define POOL_SSTRING           6
-#define POOL_AUTHTRACKER       7
+
+beginpools() {
+  pool(AUTHEXT),
+  pool(CHANINDEX),
+  pool(BANS),
+  pool(CHANNEL),
+  pool(NICK),
+  pool(CHANSERVDB),
+  pool(SSTRING),
+  pool(AUTHTRACKER),
+  pool(PROXYSCAN),
+  pool(LUA),
+  pool(TROJANSCAN),
+  pool(NTERFACER),
+  pool(SQLITE),
+  pool(PQSQL),
+  pool(PATRICIA),
+  pool(PATRICIANICK),
+  pool(GLINE),
+  pool(TRUSTS),
+  pool(SPAMSCAN2),
+  pool(ACHIEVEMENTS)
+} endpools()
+
+#undef pool
+#undef beginpools
+#undef endpools
+
+#endif