changeset 16:70f4df5a7283

add cdb_write, log basic mmap outcomes
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Thu, 27 Feb 2025 18:26:29 +0000
parents 4cc3224ebf41
children d9c11148df3b
files Makefile cdb.c cdb.h
diffstat 3 files changed, 52 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Thu Feb 27 18:24:24 2025 +0000
+++ b/Makefile	Thu Feb 27 18:26:29 2025 +0000
@@ -87,8 +87,8 @@
 	./compile byte_diff.c
 
 cdb.a: \
-makelib cdb.o cdb_hash.o cdb_make.o
-	./makelib cdb.a cdb.o cdb_hash.o cdb_make.o
+makelib cdb.o cdb_hash.o cdb_make.o buffer.o buffer_1s.o buffer_put.o str_len.o strerr_sys.o strerr_die.o buffer_2.o
+	./makelib cdb.a cdb.o cdb_hash.o cdb_make.o buffer.o buffer_1s.o buffer_put.o str_len.o strerr_sys.o strerr_die.o buffer_2.o
 
 cdb.o: \
 compile cdb.c readwrite.h error.h seek.h byte.h cdb.h uint32.h
@@ -174,7 +174,7 @@
 compile: \
 warn-auto.sh conf-cc
 	( cat warn-auto.sh; \
-	echo exec "`head -1 conf-cc`" '-c $${1+"$$@"}' \
+	echo exec env LC_NUMERIC=en_GB.UTF-8 "`head -1 conf-cc`" '-c $${1+"$$@"}' \
 	) > compile
 	chmod 755 compile
 
@@ -351,5 +351,7 @@
 	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 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
+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 buffer.o buffer_1s.o buffer_put.o str_len.o strerr_sys.o strerr_die.o buffer_2.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 buffer.o buffer_1s.o buffer_put.o str_len.o strerr_sys.o strerr_die.o buffer_2.o
+
+
--- a/cdb.c	Thu Feb 27 18:24:24 2025 +0000
+++ b/cdb.c	Thu Feb 27 18:26:29 2025 +0000
@@ -3,16 +3,21 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/mman.h>
+#include <stdio.h>
 #include "readwrite.h"
+#include "strerr.h"
 #include "error.h"
 #include "seek.h"
 #include "byte.h"
 #include "alloc.h"
+#include "buffer.h"
 #include "cdb.h"
 
 
 /*static Cdb c;*/
 
+static char _buf[32];
+
 Cdb* cdb_new(void)
 {
   return (Cdb *)(alloc(sizeof(Cdb)));
@@ -58,7 +63,11 @@
 
   if (fstat(fd,&st) == 0)
     if (st.st_size <= 0xffffffff) {
+      sprintf(_buf,"%'u",st.st_size);
+      strerr_warn3("cdb_init ","fd size: ",_buf,0);
       x = mmap(0,st.st_size,PROT_READ,MAP_SHARED,fd,0);
+      sprintf(_buf,"%x",x);
+      strerr_warn3("cdb_init ","mmap addr: ",_buf,0);
       if (x + 1) {
 	c->size = st.st_size;
 	c->map = x;
@@ -66,6 +75,17 @@
     }
 }
 
+void cdb_init_nomap(Cdb *c,int fd)
+{
+  struct stat st;
+  char *x;
+
+  cdb_clear(c);
+  cdb_findstart(c);
+  c->fd = fd;
+}
+
+
 int cdb_read(Cdb *c,char *buf,unsigned int len,uint32 pos)
 {
   if (c->map) {
@@ -159,3 +179,25 @@
   cdb_findstart(c);
   return cdb_findnext(c,key,len);
 }
+
+char wbuf[1024];
+
+int cdb_write(Cdb *c,int fd)
+{
+  uint32 pos;
+  uint32 len;
+  int r;
+
+  pos = cdb_datapos(c);
+  len = cdb_datalen(c);
+
+  while (len > 0) {
+    r = sizeof wbuf;
+    if (r > len) r = len;
+    if (cdb_read(c,wbuf,r,pos) == -1) return -1;
+    if (buffer_put(buffer_1small,wbuf,r) == -1) return -2;
+    pos += r;
+    len -= r;
+  }
+  if (buffer_flush(buffer_1small) == -1) return -2;
+}
--- a/cdb.h	Thu Feb 27 18:24:24 2025 +0000
+++ b/cdb.h	Thu Feb 27 18:26:29 2025 +0000
@@ -28,6 +28,7 @@
 
 extern void cdb_clear(Cdb *);
 extern void cdb_init(Cdb *,int fd);
+extern void cdb_init_nomap(Cdb *,int fd);
 
 extern int cdb_read(Cdb *,char *,unsigned int,uint32);
 
@@ -35,6 +36,8 @@
 extern int cdb_findnext(Cdb *,char *,unsigned int);
 extern int cdb_find(Cdb *,char *,unsigned int);
 
+extern int cdb_write(Cdb *c,int fd);
+
 /*extern uint32 cdb_pos();
 extern uint32 cdb_len();*/
 #define cdb_pos(c) ((c)->dpos)