summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Keeping <john@keeping.me.uk>2013-05-18 18:28:14 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2013-05-18 19:45:28 +0200
commitf75900b04f73725c00abb46405b51ade59313ecc (patch)
tree9c7e90aabe09418b43fbb41c99bb4965d1e7e14e
parent7966fd9b8e32562196b52abd32f6ba1e15228b81 (diff)
cache.c: fix cache_ls
Commit fb3655d (use struct strbuf instead of static buffers, 2013-04-06)
broke the logic in cache.c::cache_ls by failing to set slot->cache_name
before calling open_slot.

While fixing this, also free the strbufs added by that commit once we're
done with them.

Signed-off-by: John Keeping <john@keeping.me.uk>
-rw-r--r--cache.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/cache.c b/cache.c
index c1d777b..74a1795 100644
--- a/cache.c
+++ b/cache.c
@@ -316,6 +316,7 @@ int cache_process(int size, const char *path, const char *key, int ttl,
 	struct strbuf filename = STRBUF_INIT;
 	struct strbuf lockname = STRBUF_INIT;
 	struct cache_slot slot;
+	int result;
 
 	/* If the cache is disabled, just generate the content */
 	if (size <= 0) {
@@ -343,11 +344,15 @@ int cache_process(int size, const char *path, const char *key, int ttl,
 	slot.fn = fn;
 	slot.cbdata = cbdata;
 	slot.ttl = ttl;
-	slot.cache_name = strbuf_detach(&filename, NULL);
-	slot.lock_name = strbuf_detach(&lockname, NULL);
+	slot.cache_name = filename.buf;
+	slot.lock_name = lockname.buf;
 	slot.key = key;
 	slot.keylen = strlen(key);
-	return process_slot(&slot);
+	result = process_slot(&slot);
+
+	strbuf_release(&filename);
+	strbuf_release(&lockname);
+	return result;
 }
 
 /* Return a strftime formatted date/time
@@ -393,6 +398,7 @@ int cache_ls(const char *path)
 			continue;
 		strbuf_setlen(&fullname, prefixlen);
 		strbuf_addstr(&fullname, ent->d_name);
+		slot.cache_name = fullname.buf;
 		if ((err = open_slot(&slot)) != 0) {
 			cache_log("[cgit] unable to open path %s: %s (%d)\n",
 				  fullname.buf, strerror(err), err);
@@ -406,8 +412,8 @@ int cache_ls(const char *path)
 		       slot.buf);
 		close_slot(&slot);
 	}
-	slot.cache_name = strbuf_detach(&fullname, NULL);
 	closedir(dir);
+	strbuf_release(&fullname);
 	return 0;
 }