/* 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)
#include "cgit.h"
#include "cache.h"
+#include "html.h"
#define CACHE_BUFSIZE (1024 * 4)
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) {
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
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;
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;
}