]> gitweb.ps.run Git - ps-cgit/blobdiff - cache.c
ui-snapshot: set unused cgit_filter fields to zero
[ps-cgit] / cache.c
diff --git a/cache.c b/cache.c
index c1d777bc0793c081cec662cc26fa36ea59e563bf..fa83ddc33c15d71e6e6372bd6713bbfd9c4ecaa6 100644 (file)
--- a/cache.c
+++ b/cache.c
@@ -1,6 +1,6 @@
 /* cache.c: cache management
  *
- * Copyright (C) 2006 Lars Hjemli
+ * Copyright (C) 2006-2014 cgit Development Team <cgit@lists.zx2c4.com>
  *
  * Licensed under GNU General Public License v2
  *   (see COPYING for full license text)
@@ -15,6 +15,7 @@
 
 #include "cgit.h"
 #include "cache.h"
+#include "html.h"
 
 #define CACHE_BUFSIZE (1024 * 4)
 
@@ -316,6 +317,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 +345,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
@@ -370,7 +376,7 @@ int cache_ls(const char *path)
        DIR *dir;
        struct dirent *ent;
        int err = 0;
-       struct cache_slot slot;
+       struct cache_slot slot = { 0 };
        struct strbuf fullname = STRBUF_INIT;
        size_t prefixlen;
 
@@ -393,21 +399,22 @@ 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);
                        continue;
                }
-               printf("%s %s %10"PRIuMAX" %s\n",
-                      fullname.buf,
-                      sprintftime("%Y-%m-%d %H:%M:%S",
-                                  slot.cache_st.st_mtime),
-                      (uintmax_t)slot.cache_st.st_size,
-                      slot.buf);
+               htmlf("%s %s %10"PRIuMAX" %s\n",
+                     fullname.buf,
+                     sprintftime("%Y-%m-%d %H:%M:%S",
+                                 slot.cache_st.st_mtime),
+                     (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;
 }