diff options
author | Junio C Hamano <gitster@pobox.com> | 2007-09-26 02:26:06 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-09-26 02:27:05 -0700 |
commit | a8f3e2219c237661a30b54fe23d58e055f0b548c (patch) | |
tree | 440d74bf40b2ac091d625edeb72b43e47609e59a /strbuf.h | |
parent | 7a33bcbe802080f3a926e93d66b65ff7c5e8c5ed (diff) | |
download | git-a8f3e2219c237661a30b54fe23d58e055f0b548c.tar.gz |
strbuf_setlen(): do not barf on setting length of an empty buffer to 0
strbuf_setlen() expect to be able to NUL terminate the buffer,
but a completely empty strbuf could have an empty buffer with 0
allocation; both the assert() and the assignment for NUL
termination would fail.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'strbuf.h')
-rw-r--r-- | strbuf.h | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -65,14 +65,17 @@ static inline void strbuf_swap(struct strbuf *a, struct strbuf *b) { static inline size_t strbuf_avail(struct strbuf *sb) { return sb->alloc ? sb->alloc - sb->len - 1 : 0; } + +extern void strbuf_grow(struct strbuf *, size_t); + static inline void strbuf_setlen(struct strbuf *sb, size_t len) { - assert (len < sb->alloc); + if (!sb->alloc) + strbuf_grow(sb, 0); + assert(len < sb->alloc); sb->len = len; sb->buf[len] = '\0'; } -extern void strbuf_grow(struct strbuf *, size_t); - /*----- content related -----*/ extern void strbuf_rtrim(struct strbuf *); |