completion: For consistency, change "git rev-parse" to __gitdir calls
[gitweb.git] / archive.c
index 45d242b884c2796b67329aaabfea62cd1e7bbecb..e6de0397cc82ae97018cbf4fc82d5697ec4d915d 100644 (file)
--- a/archive.c
+++ b/archive.c
@@ -15,7 +15,7 @@ static char const * const archive_usage[] = {
 
 #define USES_ZLIB_COMPRESSION 1
 
-const struct archiver {
+static const struct archiver {
        const char *name;
        write_archive_fn_t write_archive;
        unsigned int flags;
@@ -29,11 +29,10 @@ static void format_subst(const struct commit *commit,
                          struct strbuf *buf)
 {
        char *to_free = NULL;
-       struct strbuf fmt;
+       struct strbuf fmt = STRBUF_INIT;
 
        if (src == buf->buf)
                to_free = strbuf_detach(buf, NULL);
-       strbuf_init(&fmt, 0);
        for (;;) {
                const char *b, *c;
 
@@ -65,10 +64,9 @@ static void *sha1_file_to_archive(const char *path, const unsigned char *sha1,
 
        buffer = read_sha1_file(sha1, type, sizep);
        if (buffer && S_ISREG(mode)) {
-               struct strbuf buf;
+               struct strbuf buf = STRBUF_INIT;
                size_t size = 0;
 
-               strbuf_init(&buf, 0);
                strbuf_attach(&buf, buffer, *sizep, *sizep + 1);
                convert_to_working_tree(path, buf.buf, buf.len, &buf);
                if (commit)
@@ -134,7 +132,7 @@ static int write_archive_entry(const unsigned char *sha1, const char *base,
                err = write_entry(args, sha1, path.buf, path.len, mode, NULL, 0);
                if (err)
                        return err;
-               return READ_TREE_RECURSIVE;
+               return (S_ISDIR(mode) ? READ_TREE_RECURSIVE : 0);
        }
 
        buffer = sha1_file_to_archive(path_without_prefix, sha1, mode,