diff options
Diffstat (limited to 'vcs-svn/svndump.c')
-rw-r--r-- | vcs-svn/svndump.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c index 1669d0fa5e..ee7c0bb2ea 100644 --- a/vcs-svn/svndump.c +++ b/vcs-svn/svndump.c @@ -30,6 +30,8 @@ /* Create memory pool for log messages */ obj_pool_gen(log, char, 4096) +static struct line_buffer input = LINE_BUFFER_INIT; + static char *log_copy(uint32_t length, const char *log) { char *buffer; @@ -164,7 +166,7 @@ static void read_props(void) * symlink and executable bits separately instead. */ uint32_t type_set = 0; - while ((t = buffer_read_line()) && strcmp(t, "PROPS-END")) { + while ((t = buffer_read_line(&input)) && strcmp(t, "PROPS-END")) { uint32_t len; const char *val; const char type = t[0]; @@ -172,8 +174,8 @@ static void read_props(void) if (!type || t[1] != ' ') die("invalid property line: %s\n", t); len = atoi(&t[2]); - val = buffer_read_string(len); - buffer_skip_bytes(1); /* Discard trailing newline. */ + val = buffer_read_string(&input, len); + buffer_skip_bytes(&input, 1); /* Discard trailing newline. */ switch (type) { case 'K': @@ -250,7 +252,8 @@ static void handle_node(void) repo_modify_path(node_ctx.dst, node_ctx.type, mark); } if (mark) - fast_export_blob(node_ctx.type, mark, node_ctx.textLength); + fast_export_blob(node_ctx.type, mark, + node_ctx.textLength, &input); } static void handle_revision(void) @@ -269,7 +272,7 @@ void svndump_read(const char *url) uint32_t key; reset_dump_ctx(pool_intern(url)); - while ((t = buffer_read_line())) { + while ((t = buffer_read_line(&input))) { val = strstr(t, ": "); if (!val) continue; @@ -280,7 +283,7 @@ void svndump_read(const char *url) if (key == keys.svn_fs_dump_format_version) { dump_ctx.version = atoi(val); if (dump_ctx.version > 3) - die("expected svn dump format version <= 3, found %d", + die("expected svn dump format version <= 3, found %"PRIu32, dump_ctx.version); } else if (key == keys.uuid) { dump_ctx.uuid = pool_intern(val); @@ -330,7 +333,7 @@ void svndump_read(const char *url) node_ctx.prop_delta = !strcmp(val, "true"); } else if (key == keys.content_length) { len = atoi(val); - buffer_read_line(); + buffer_read_line(&input); if (active_ctx == REV_CTX) { read_props(); } else if (active_ctx == NODE_CTX) { @@ -338,7 +341,7 @@ void svndump_read(const char *url) active_ctx = REV_CTX; } else { fprintf(stderr, "Unexpected content length header: %"PRIu32"\n", len); - buffer_skip_bytes(len); + buffer_skip_bytes(&input, len); } } } @@ -350,7 +353,7 @@ void svndump_read(const char *url) int svndump_init(const char *filename) { - if (buffer_init(filename)) + if (buffer_init(&input, filename)) return error("cannot open %s: %s", filename, strerror(errno)); repo_init(); reset_dump_ctx(~0); @@ -367,7 +370,7 @@ void svndump_deinit(void) reset_dump_ctx(~0); reset_rev_ctx(0); reset_node_ctx(NULL); - if (buffer_deinit()) + if (buffer_deinit(&input)) fprintf(stderr, "Input error\n"); if (ferror(stdout)) fprintf(stderr, "Output error\n"); @@ -376,7 +379,7 @@ void svndump_deinit(void) void svndump_reset(void) { log_reset(); - buffer_reset(); + buffer_reset(&input); repo_reset(); reset_dump_ctx(~0); reset_rev_ctx(0); |