X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=strbuf.c;h=3ad2cc00160fbf24e1e4904bb37ce44e8c414ce5;hb=c32c95916549331a581fadfa749c4322c14ccd78;hp=1a7df12e8f233863cd931a960d453d54050f5584;hpb=1f7a2abcc18ec1080905dc5cd59381f7ac1c8111;p=git.git diff --git a/strbuf.c b/strbuf.c index 1a7df12e8..3ad2cc001 100644 --- a/strbuf.c +++ b/strbuf.c @@ -30,10 +30,8 @@ void strbuf_init(struct strbuf *sb, size_t hint) { sb->alloc = sb->len = 0; sb->buf = strbuf_slopbuf; - if (hint) { + if (hint) strbuf_grow(sb, hint); - sb->buf[0] = '\0'; - } } void strbuf_release(struct strbuf *sb) @@ -65,12 +63,15 @@ void strbuf_attach(struct strbuf *sb, void *buf, size_t len, size_t alloc) void strbuf_grow(struct strbuf *sb, size_t extra) { + int new_buf = !sb->alloc; if (unsigned_add_overflows(extra, 1) || unsigned_add_overflows(sb->len, extra + 1)) die("you want to use way too much memory"); - if (!sb->alloc) + if (new_buf) sb->buf = NULL; ALLOC_GROW(sb->buf, sb->len + extra + 1, sb->alloc); + if (new_buf) + sb->buf[0] = '\0'; } void strbuf_trim(struct strbuf *sb) @@ -356,7 +357,6 @@ int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term) { int ch; - strbuf_grow(sb, 0); if (feof(fp)) return EOF;