]> asedeno.scripts.mit.edu Git - git.git/blobdiff - fast-import.c
Now that cache.h needs strbuf.h, remove useless includes.
[git.git] / fast-import.c
index 2d5224c1867a081c592d21af1573264455a92aff..1866d346bfb62cd80870edb0a7c595218c9f81c4 100644 (file)
@@ -149,7 +149,6 @@ Format of STDIN stream:
 #include "pack.h"
 #include "refs.h"
 #include "csum-file.h"
-#include "strbuf.h"
 #include "quote.h"
 
 #define PACK_ID_BITS 16
@@ -340,7 +339,7 @@ static struct tag *last_tag;
 
 /* Input stream parsing */
 static whenspec_type whenspec = WHENSPEC_RAW;
-static struct strbuf command_buf;
+static struct strbuf command_buf = STRBUF_INIT;
 static int unread_command_buf;
 static struct recent_command cmd_hist = {&cmd_hist, &cmd_hist, NULL};
 static struct recent_command *cmd_tail = &cmd_hist;
@@ -375,7 +374,7 @@ static void write_branch_report(FILE *rpt, struct branch *b)
        fputc('\n', rpt);
 }
 
-static void write_crash_report(const char *err, va_list params)
+static void write_crash_report(const char *err)
 {
        char *loc = git_path("fast_import_crash_%d", getpid());
        FILE *rpt = fopen(loc, "w");
@@ -397,7 +396,7 @@ static void write_crash_report(const char *err, va_list params)
        fputc('\n', rpt);
 
        fputs("fatal: ", rpt);
-       vfprintf(rpt, err, params);
+       fputs(err, rpt);
        fputc('\n', rpt);
 
        fputc('\n', rpt);
@@ -442,18 +441,17 @@ static void write_crash_report(const char *err, va_list params)
 static NORETURN void die_nicely(const char *err, va_list params)
 {
        static int zombie;
-       va_list x_params;
+       char message[2 * PATH_MAX];
 
-       va_copy(x_params, params);
+       vsnprintf(message, sizeof(message), err, params);
        fputs("fatal: ", stderr);
-       vfprintf(stderr, err, params);
+       fputs(message, stderr);
        fputc('\n', stderr);
 
        if (!zombie) {
                zombie = 1;
-               write_crash_report(err, x_params);
+               write_crash_report(message);
        }
-       va_end(x_params);
        exit(128);
 }
 
@@ -1596,7 +1594,7 @@ static void read_next_command(void)
                } else {
                        struct recent_command *rc;
 
-                       command_buf.buf = NULL;
+                       strbuf_detach(&command_buf);
                        read_line(&command_buf, stdin, '\n');
                        if (command_buf.eof)
                                return;
@@ -1639,18 +1637,16 @@ static void cmd_mark(void)
 
 static void *cmd_data (size_t *size)
 {
-       size_t length;
-       char *buffer;
+       struct strbuf buffer;
 
+       strbuf_init(&buffer, 0);
        if (prefixcmp(command_buf.buf, "data "))
                die("Expected 'data n' command, found: %s", command_buf.buf);
 
        if (!prefixcmp(command_buf.buf + 5, "<<")) {
                char *term = xstrdup(command_buf.buf + 5 + 2);
-               size_t sz = 8192, term_len = command_buf.len - 5 - 2;
-               length = 0;
-               buffer = xmalloc(sz);
-               command_buf.buf = NULL;
+               size_t term_len = command_buf.len - 5 - 2;
+
                for (;;) {
                        read_line(&command_buf, stdin, '\n');
                        if (command_buf.eof)
@@ -1658,21 +1654,18 @@ static void *cmd_data (size_t *size)
                        if (term_len == command_buf.len
                                && !strcmp(term, command_buf.buf))
                                break;
-                       ALLOC_GROW(buffer, length + command_buf.len, sz);
-                       memcpy(buffer + length,
-                               command_buf.buf,
-                               command_buf.len - 1);
-                       length += command_buf.len - 1;
-                       buffer[length++] = '\n';
+                       strbuf_addbuf(&buffer, &command_buf);
+                       strbuf_addch(&buffer, '\n');
                }
                free(term);
        }
        else {
-               size_t n = 0;
+               size_t n = 0, length;
+
                length = strtoul(command_buf.buf + 5, NULL, 10);
-               buffer = xmalloc(length);
+
                while (n < length) {
-                       size_t s = fread(buffer + n, 1, length - n, stdin);
+                       size_t s = strbuf_fread(&buffer, length - n, stdin);
                        if (!s && feof(stdin))
                                die("EOF in data (%lu bytes remaining)",
                                        (unsigned long)(length - n));
@@ -1681,8 +1674,8 @@ static void *cmd_data (size_t *size)
        }
 
        skip_optional_lf();
-       *size = length;
-       return buffer;
+       *size = buffer.len;
+       return strbuf_detach(&buffer);
 }
 
 static int validate_raw_date(const char *src, char *result, int maxlen)
@@ -2102,7 +2095,7 @@ static void cmd_new_commit(void)
        }
 
        /* file_change* */
-       while (!command_buf.eof && command_buf.len > 1) {
+       while (!command_buf.eof && command_buf.len > 0) {
                if (!prefixcmp(command_buf.buf, "M "))
                        file_change_m(b);
                else if (!prefixcmp(command_buf.buf, "D "))
@@ -2257,7 +2250,7 @@ static void cmd_reset_branch(void)
        else
                b = new_branch(sp);
        read_next_command();
-       if (!cmd_from(b) && command_buf.len > 1)
+       if (!cmd_from(b) && command_buf.len > 0)
                unread_command_buf = 1;
 }
 
@@ -2274,7 +2267,7 @@ static void cmd_checkpoint(void)
 
 static void cmd_progress(void)
 {
-       fwrite(command_buf.buf, 1, command_buf.len - 1, stdout);
+       fwrite(command_buf.buf, 1, command_buf.len, stdout);
        fputc('\n', stdout);
        fflush(stdout);
        skip_optional_lf();
@@ -2324,7 +2317,7 @@ int main(int argc, const char **argv)
 
        git_config(git_default_config);
        alloc_objects(object_entry_alloc);
-       strbuf_init(&command_buf);
+       strbuf_init(&command_buf, 0);
        atom_table = xcalloc(atom_table_sz, sizeof(struct atom_str*));
        branch_table = xcalloc(branch_table_sz, sizeof(struct branch*));
        avail_tree_table = xcalloc(avail_tree_table_sz, sizeof(struct avail_tree_content*));