all repos — cgit @ f75900b04f73725c00abb46405b51ade59313ecc

a hyperfast web frontend for git written in c

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>
John Keeping john@keeping.me.uk
Sat, 18 May 2013 18:28:14 +0100
commit

f75900b04f73725c00abb46405b51ade59313ecc

parent

7966fd9b8e32562196b52abd32f6ba1e15228b81

1 files changed, 10 insertions(+), 4 deletions(-)

jump to
M cache.ccache.c

@@ -316,6 +316,7 @@ int i;

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 @@ strbuf_addstr(&lockname, ".lock");

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 @@ if (strlen(ent->d_name) != 8)

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 @@ (uintmax_t)slot.cache_st.st_size,

slot.buf); close_slot(&slot); } - slot.cache_name = strbuf_detach(&fullname, NULL); closedir(dir); + strbuf_release(&fullname); return 0; }