]> granicus.if.org Git - cgit/commitdiff
cache.c: fix cache_ls
authorJohn Keeping <john@keeping.me.uk>
Sat, 18 May 2013 17:28:14 +0000 (18:28 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Sat, 18 May 2013 17:45:28 +0000 (19:45 +0200)
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>
cache.c

diff --git a/cache.c b/cache.c
index c1d777bc0793c081cec662cc26fa36ea59e563bf..74a1795a884051d480806323023209b88aa33b5c 100644 (file)
--- 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;
 }