X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/db9a70b159a107da29f88865d63ba14dd127556f..6edc84bc44d55d7f90a40238ae2107913e15f54b:/cache.c?ds=inline diff --git a/cache.c b/cache.c index 900b161..b169d20 100644 --- a/cache.c +++ b/cache.c @@ -13,12 +13,12 @@ * */ -#ifdef HAVE_LINUX_SENDFILE -#include -#endif #include "cgit.h" #include "cache.h" #include "html.h" +#ifdef HAVE_LINUX_SENDFILE +#include +#endif #define CACHE_BUFSIZE (1024 * 4) @@ -215,19 +215,25 @@ static int fill_slot(struct cache_slot *slot) return errno; /* Redirect stdout to lockfile */ - if (dup2(slot->lock_fd, STDOUT_FILENO) == -1) + if (dup2(slot->lock_fd, STDOUT_FILENO) == -1) { + close(tmp); return errno; + } /* Generate cache content */ slot->fn(); /* update stat info */ - if (fstat(slot->lock_fd, &slot->cache_st)) + if (fstat(slot->lock_fd, &slot->cache_st)) { + close(tmp); return errno; + } /* Restore stdout */ - if (dup2(tmp, STDOUT_FILENO) == -1) + if (dup2(tmp, STDOUT_FILENO) == -1) { + close(tmp); return errno; + } /* Close the temporary filedescriptor */ if (close(tmp)) @@ -411,7 +417,7 @@ int cache_ls(const char *path) DIR *dir; struct dirent *ent; int err = 0; - struct cache_slot slot = { 0 }; + struct cache_slot slot = { NULL }; struct strbuf fullname = STRBUF_INIT; size_t prefixlen;