[PATCH 02/16] vcs-svn: Replace buffer_read_string() memory pool with a strbuf
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Oct 11, 2010, 03:11 UTC
- Message-ID
- <20101011031142.GQ1553@burratino>
- In-Reply-To
- <20101011023435.GA706@burratino>
The buffer_read_string() function returns a temporary string of size specified by the caller. It currently uses an obj_pool to store the return value, but that is overkill: all we need is a buffer that can grow between requests to accomodate larger strings.
Use a strbuf instead.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> --- [Resent after messing up the message header; sorry for the noise.]
vcs-svn/line_buffer.c | 16 ++++++---------- 1 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/vcs-svn/line_buffer.c b/vcs-svn/line_buffer.c index f22c94f..6f32f28 100644 --- a/vcs-svn/line_buffer.c +++ b/vcs-svn/line_buffer.c @@ -5,15 +5,13 @@ #include "git-compat-util.h" #include "line_buffer.h" -#include "obj_pool.h" +#include "strbuf.h" #define LINE_BUFFER_LEN 10000 #define COPY_BUFFER_LEN 4096 -/* Create memory pool for char sequence of known length */ -obj_pool_gen(blob, char, 4096) - static char line_buffer[LINE_BUFFER_LEN]; +static struct strbuf blob_buffer = STRBUF_INIT; static FILE *infile; int buffer_init(const char *filename) @@ -58,11 +56,9 @@ char *buffer_read_line(void) char *buffer_read_string(uint32_t len) { - char *s; - blob_free(blob_pool.size); - s = blob_pointer(blob_alloc(len + 1)); - s[fread(s, 1, len, infile)] = '\0'; - return ferror(infile) ? NULL : s; + strbuf_reset(&blob_buffer); + strbuf_fread(&blob_buffer, len, infile); + return ferror(infile) ? NULL : blob_buffer.buf; } void buffer_copy_bytes(uint32_t len) @@ -94,5 +90,5 @@ void buffer_skip_bytes(uint32_t len) void buffer_reset(void) { - blob_reset(); + strbuf_release(&blob_buffer); }
-- 1.7.2.3