]> mj.ucw.cz Git - libucw.git/blobdiff - lib/pool.c
Added one more check.
[libucw.git] / lib / pool.c
index 623f0517490e09c8e57bddc40b49e7f9578ec8d2..d581466ba210c87b8a3cb92dea9778a9f78cf259 100644 (file)
@@ -1,22 +1,25 @@
 /*
  *     Sherlock Library -- Memory Pools (One-Time Allocation)
  *
- *     (c) 1997--1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
+ *     (c) 1997--2001 Martin Mares <mj@ucw.cz>
+ *
+ *     This software may be freely distributed and used according to the terms
+ *     of the GNU Lesser General Public License.
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-
 #include "lib/lib.h"
 #include "lib/pools.h"
 
+#include <stdlib.h>
+#include <string.h>
+
 struct memchunk {
   struct memchunk *next;
   byte data[0];
 };
 
 struct mempool *
-new_pool(uns size)
+mp_new(uns size)
 {
   struct mempool *p = xmalloc(sizeof(struct mempool));
 
@@ -30,25 +33,25 @@ new_pool(uns size)
 }
 
 void
-free_pool(struct mempool *p)
+mp_delete(struct mempool *p)
 {
   struct memchunk *c, *d;
 
   for(d=p->first; d; d = c)
     {
       c = d->next;
-      free(d);
+      xfree(d);
     }
   for(d=p->first_large; d; d = c)
     {
       c = d->next;
-      free(d);
+      xfree(d);
     }
-  free(p);
+  xfree(p);
 }
 
 void
-flush_pool(struct mempool *p)
+mp_flush(struct mempool *p)
 {
   struct memchunk *c;
 
@@ -57,12 +60,12 @@ flush_pool(struct mempool *p)
   while (c = p->first_large)
     {
       p->first_large = c->next;
-      free(c);
+      xfree(c);
     }
 }
 
 void *
-pool_alloc(struct mempool *p, uns s)
+mp_alloc(struct mempool *p, uns s)
 {
   if (s <= p->threshold)
     {
@@ -98,3 +101,20 @@ pool_alloc(struct mempool *p, uns s)
       return c->data;
     }
 }
+
+void *
+mp_alloc_zero(struct mempool *p, uns s)
+{
+  void *x = mp_alloc(p, s);
+  bzero(x, s);
+  return x;
+}
+
+char *
+mp_strdup(struct mempool *p, char *s)
+{
+  uns l = strlen(s) + 1;
+  char *t = mp_alloc_fast_noalign(p, l);
+  memcpy(t, s, l);
+  return t;
+}