changeset 12:0e21568dec72

allocate a Cdb struct rather than using a single static one, note that cdb_free does _not_ call alloc_free, just releases the map, in fact alloc_free is not called anywhere!
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Mon, 03 Feb 2025 17:31:23 +0000
parents 978eaa166609
children 0a35d8de4296
files Makefile cdb.c cdb.h
diffstat 3 files changed, 35 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Fri Jan 31 17:28:35 2025 +0000
+++ b/Makefile	Mon Feb 03 17:31:23 2025 +0000
@@ -112,8 +112,8 @@
 	./compile cdbdump.c
 
 cdbget: \
-load cdbget.o cdb.a buffer.a unix.a byte.a
-	./load cdbget cdb.a buffer.a unix.a byte.a 
+load cdbget.o cdb.a alloc.a buffer.a unix.a byte.a
+	./load cdbget cdb.a alloc.a buffer.a unix.a byte.a 
 
 cdbget.o: \
 compile cdbget.c exit.h scan.h str.h buffer.h strerr.h cdb.h uint32.h
@@ -143,8 +143,8 @@
 	./compile cdbmake.c
 
 cdbstats: \
-load cdbstats.o cdb.a buffer.a unix.a byte.a
-	./load cdbstats cdb.a buffer.a unix.a byte.a 
+load cdbstats.o cdb.a alloc.a buffer.a unix.a byte.a
+	./load cdbstats cdb.a alloc.a buffer.a unix.a byte.a 
 
 cdbstats.o: \
 compile cdbstats.c uint32.h fmt.h buffer.h strerr.h seek.h cdb.h \
@@ -152,8 +152,8 @@
 	./compile cdbstats.c
 
 cdbtest: \
-load cdbtest.o cdb.a buffer.a unix.a byte.a
-	./load cdbtest cdb.a buffer.a unix.a byte.a 
+load cdbtest.o cdb.a alloc.a buffer.a unix.a byte.a
+	./load cdbtest cdb.a alloc.a buffer.a unix.a byte.a 
 
 cdbtest.o: \
 compile cdbtest.c uint32.h fmt.h buffer.h strerr.h seek.h cdb.h \
@@ -180,7 +180,7 @@
 
 debug:
 	sed "1s@FIXME@${HOME}@" conf-home.ac > conf-home
-	sed '1s/CFLAGS/-O -dgdb/' conf-cc.ac > conf-cc
+	sed '1s/CFLAGS/-O -ggdb/' conf-cc.ac > conf-cc
 	sed '1s/LDFLAGS//' conf-ld.ac > conf-ld
 	chmod +x conf-??
 
@@ -343,5 +343,5 @@
 	error_str.o seek_set.o seek_cur.o
 
 libcdb.a: \
-cdb.o error.o open_read.o seek_cur.o open_trunc.o seek_set.o byte_copy.o byte_diff.o error_str.o uint32_unpack.o cdb_hash.o
-	./makelib libcdb.a cdb.o error.o open_read.o seek_cur.o open_trunc.o seek_set.o byte_copy.o byte_diff.o error_str.o uint32_unpack.o cdb_hash.o
+cdb.o error.o open_read.o seek_cur.o open_trunc.o seek_set.o byte_copy.o byte_diff.o error_str.o uint32_unpack.o cdb_hash.o alloc.o
+	./makelib libcdb.a alloc.o cdb.o error.o open_read.o seek_cur.o open_trunc.o seek_set.o byte_copy.o byte_diff.o error_str.o uint32_unpack.o cdb_hash.o
--- a/cdb.c	Fri Jan 31 17:28:35 2025 +0000
+++ b/cdb.c	Mon Feb 03 17:31:23 2025 +0000
@@ -7,17 +7,18 @@
 #include "error.h"
 #include "seek.h"
 #include "byte.h"
+#include "alloc.h"
 #include "cdb.h"
 
 
-static Cdb c;
+/*static Cdb c;*/
 
 Cdb* cdb_new(void)
 {
-  return &c;
+  return (Cdb *)(alloc(sizeof(Cdb)));
 }
 
-void cdb_free(Cdb *c)
+void cdb_clear(Cdb *c)
 {
   if (c->map) {
     munmap(c->map,c->size);
@@ -25,21 +26,21 @@
   }
 }
 
-uint32 cdb_len() {
-  return c.dlen;
-}
+/* uint32 cdb_len() { */
+/*   return c.dlen; */
+/* } */
 
-uint32 cdb_pos() {
-  return c.dpos;
-}
+/* uint32 cdb_pos() { */
+/*   return c.dpos; */
+/* } */
 
-char *cdb_mmap() {
-  return c.map;
-}
+/* char *cdb_mmap() { */
+/*   return c.map; */
+/* } */
 
-uint32 cdb_msize() {
-  return c.size;
-}
+/* uint32 cdb_msize() { */
+/*   return c.size; */
+/* } */
 
 void cdb_findstart(Cdb *c)
 {
@@ -51,7 +52,7 @@
   struct stat st;
   char *x;
 
-  cdb_free(c);
+  cdb_clear(c);
   cdb_findstart(c);
   c->fd = fd;
 
--- a/cdb.h	Fri Jan 31 17:28:35 2025 +0000
+++ b/cdb.h	Mon Feb 03 17:31:23 2025 +0000
@@ -26,7 +26,7 @@
 
 extern Cdb* cdb_new(void);
 
-extern void cdb_free(Cdb *);
+extern void cdb_clear(Cdb *);
 extern void cdb_init(Cdb *,int fd);
 
 extern int cdb_read(Cdb *,char *,unsigned int,uint32);
@@ -35,12 +35,15 @@
 extern int cdb_findnext(Cdb *,char *,unsigned int);
 extern int cdb_find(Cdb *,char *,unsigned int);
 
-extern uint32 cdb_pos();
-extern uint32 cdb_len();
+/*extern uint32 cdb_pos();
+extern uint32 cdb_len();*/
+#define cdb_pos(c) ((c)->dpos)
+#define cdb_len(c) ((c)->dlen)
 
-extern char *cdb_mmap();
-extern uint32 cdb_msize();
-
+/*extern char *cdb_mmap();
+extern uint32 cdb_msize();*/
+#define cdb_mmap(c) ((c)->map)
+#define cdb_msize(c) ((c)->size)
 
 #define cdb_datapos(c) ((c)->dpos)
 #define cdb_datalen(c) ((c)->dlen)