]>
jfr.im git - irc/quakenet/newserv.git/blob - core/nsmalloc.c
770384bc2a4f6871330eb08a048f8ca8d92ec7ac
1 /* nsmalloc: Simple pooled malloc() thing. */
6 #include "../core/error.h"
8 void *nsmalloc(unsigned int poolid
, size_t size
);
9 void nsfree(unsigned int poolid
, void *ptr
);
10 void nsfreeall(unsigned int poolid
);
17 struct nsminfo
*pools
[MAXPOOL
];
19 void *nsmalloc(unsigned int poolid
, size_t size
) {
22 if (poolid
>= MAXPOOL
)
25 /* Allocate enough for the structure and the required data */
26 nsmp
=(struct nsminfo
*)malloc(sizeof(struct nsminfo
)+size
);
31 nsmp
->next
=pools
[poolid
];
34 return (void *)nsmp
->data
;
37 void nsfree(unsigned int poolid
, void *ptr
) {
38 struct nsminfo
*nsmp
, **nsmh
;
40 if (poolid
>= MAXPOOL
)
43 for (nsmh
=&(pools
[poolid
]);*nsmh
;nsmh
=&((*nsmh
)->next
)) {
44 if ((void *)&((*nsmh
)->data
) == ptr
) {
52 Error("core",ERR_WARNING
,"Attempt to free unknown pointer %p in pool %d\n",ptr
,poolid
);
55 void nsfreeall(unsigned int poolid
) {
56 struct nsminfo
*nsmp
, *nnsmp
;
58 if (poolid
>= MAXPOOL
)
61 for (nsmp
=pools
[poolid
];nsmp
;nsmp
=nnsmp
) {