diff options
| author | John Keeping <john@keeping.me.uk> | 2013-05-18 18:28:14 +0100 | 
|---|---|---|
| committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2013-05-18 19:45:28 +0200 | 
| commit | f75900b04f73725c00abb46405b51ade59313ecc (patch) | |
| tree | 9c7e90aabe09418b43fbb41c99bb4965d1e7e14e | |
| parent | t0109: "function" is a bash-ism (diff) | |
| download | cgit-f75900b04f73725c00abb46405b51ade59313ecc.tar.gz cgit-f75900b04f73725c00abb46405b51ade59313ecc.tar.bz2 cgit-f75900b04f73725c00abb46405b51ade59313ecc.zip | |
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.c | 14 | 
1 files changed, 10 insertions, 4 deletions
| @@ -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;  } | 
