diff options
Diffstat (limited to 'vcs-svn/line_buffer.c')
-rw-r--r-- | vcs-svn/line_buffer.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/vcs-svn/line_buffer.c b/vcs-svn/line_buffer.c index e7bc230fc..806932b32 100644 --- a/vcs-svn/line_buffer.c +++ b/vcs-svn/line_buffer.c @@ -8,20 +8,16 @@ #include "strbuf.h" #define COPY_BUFFER_LEN 4096 -static struct line_buffer buf_ = LINE_BUFFER_INIT; -static struct line_buffer *buf; -int buffer_init(const char *filename) +int buffer_init(struct line_buffer *buf, const char *filename) { - buf = &buf_; - buf->infile = filename ? fopen(filename, "r") : stdin; if (!buf->infile) return -1; return 0; } -int buffer_deinit(void) +int buffer_deinit(struct line_buffer *buf) { int err; if (buf->infile == stdin) @@ -32,7 +28,7 @@ int buffer_deinit(void) } /* Read a line without trailing newline. */ -char *buffer_read_line(void) +char *buffer_read_line(struct line_buffer *buf) { char *end; if (!fgets(buf->line_buffer, sizeof(buf->line_buffer), buf->infile)) @@ -53,14 +49,14 @@ char *buffer_read_line(void) return buf->line_buffer; } -char *buffer_read_string(uint32_t len) +char *buffer_read_string(struct line_buffer *buf, uint32_t len) { strbuf_reset(&buf->blob_buffer); strbuf_fread(&buf->blob_buffer, len, buf->infile); return ferror(buf->infile) ? NULL : buf->blob_buffer.buf; } -void buffer_copy_bytes(uint32_t len) +void buffer_copy_bytes(struct line_buffer *buf, uint32_t len) { char byte_buffer[COPY_BUFFER_LEN]; uint32_t in; @@ -70,13 +66,13 @@ void buffer_copy_bytes(uint32_t len) len -= in; fwrite(byte_buffer, 1, in, stdout); if (ferror(stdout)) { - buffer_skip_bytes(len); + buffer_skip_bytes(buf, len); return; } } } -void buffer_skip_bytes(uint32_t len) +void buffer_skip_bytes(struct line_buffer *buf, uint32_t len) { char byte_buffer[COPY_BUFFER_LEN]; uint32_t in; @@ -87,7 +83,7 @@ void buffer_skip_bytes(uint32_t len) } } -void buffer_reset(void) +void buffer_reset(struct line_buffer *buf) { strbuf_release(&buf->blob_buffer); } |