summary refs log tree commit diff
path: root/bin/edi/log.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2018-11-21 22:32:22 -0500
committerJune McEnroe <june@causal.agency>2018-11-21 22:36:37 -0500
commit0e92d6e6eaebfdebb4ed59bd411dd8b337357251 (patch)
tree30988cec35bc002ba08df252f8443dea6de6060d /bin/edi/log.c
parentFree buffer block if empty when allocating new block (diff)
downloadsrc-0e92d6e6eaebfdebb4ed59bd411dd8b337357251.tar.gz
src-0e92d6e6eaebfdebb4ed59bd411dd8b337357251.zip
Read files in edi
Diffstat (limited to '')
-rw-r--r--bin/edi/log.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/bin/edi/log.c b/bin/edi/log.c
index c91f5fd9..267833ec 100644
--- a/bin/edi/log.c
+++ b/bin/edi/log.c
@@ -23,25 +23,19 @@
 #include "edi.h"
 
 struct Log logAlloc(size_t cap) {
-	assert(cap);
 	struct State *states = malloc(sizeof(*states) * cap);
 	if (!states) err(EX_OSERR, "malloc");
-	states[0] = (struct State) {
-		.table = TableEmpty,
-		.prev = 0,
-		.next = 0,
-	};
 	return (struct Log) {
 		.cap = cap,
-		.len = 1,
-		.idx = 0,
+		.len = 0,
+		.state = 0,
 		.states = states,
 	};
 }
 
 void logFree(struct Log *log) {
 	for (size_t i = 0; i < log->len; ++i) {
-		free(log->states[i].table.slices);
+		tableFree(&log->states[i].table);
 	}
 	free(log->states);
 }
@@ -55,9 +49,9 @@ void logPush(struct Log *log, struct Table table) {
 	size_t next = log->len++;
 	log->states[next] = (struct State) {
 		.table = table,
-		.prev = log->idx,
+		.prev = log->state,
 		.next = next,
 	};
-	log->states[log->idx].next = next;
-	log->idx = next;
+	log->states[log->state].next = next;
+	log->state = next;
 }