Merge branch 'jn/gitweb'
[gitweb.git] / builtin-archive.c
index 843a9e37bbb5b7274e928499d3b7935399216e65..14a1b3077cd7a5c4d69672bccfadc1354568dc4a 100644 (file)
@@ -30,7 +30,7 @@ static int run_remote_archiver(const char *remote, int argc,
 {
        char *url, buf[LARGE_PACKET_MAX];
        int fd[2], i, len, rv;
-       pid_t pid;
+       struct child_process *conn;
        const char *exec = "git-upload-archive";
        int exec_at = 0;
 
@@ -46,9 +46,7 @@ static int run_remote_archiver(const char *remote, int argc,
        }
 
        url = xstrdup(remote);
-       pid = git_connect(fd, url, exec, 0);
-       if (pid < 0)
-               return pid;
+       conn = git_connect(fd, url, exec, 0);
 
        for (i = 1; i < argc; i++) {
                if (i == exec_at)
@@ -76,7 +74,7 @@ static int run_remote_archiver(const char *remote, int argc,
        rv = recv_sideband("archive", fd[0], 1, 2);
        close(fd[0]);
        close(fd[1]);
-       rv |= finish_connect(pid);
+       rv |= finish_connect(conn);
 
        return !!rv;
 }
@@ -89,7 +87,7 @@ static void format_subst(const struct commit *commit,
        struct strbuf fmt;
 
        if (src == buf->buf)
-               to_free = strbuf_detach(buf);
+               to_free = strbuf_detach(buf, NULL);
        strbuf_init(&fmt, 0);
        for (;;) {
                const char *b, *c;
@@ -148,13 +146,14 @@ 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;
+               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);
                convert_to_archive(path, buf.buf, buf.len, &buf, commit);
-               *sizep = buf.len;
-               buffer = buf.buf;
+               buffer = strbuf_detach(&buf, &size);
+               *sizep = size;
        }
 
        return buffer;