summaryrefslogtreecommitdiff
path: root/strbuf.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2007-09-26 09:26:06 (GMT)
committerJunio C Hamano <gitster@pobox.com>2007-09-26 09:27:05 (GMT)
commita8f3e2219c237661a30b54fe23d58e055f0b548c (patch)
tree440d74bf40b2ac091d625edeb72b43e47609e59a /strbuf.h
parent7a33bcbe802080f3a926e93d66b65ff7c5e8c5ed (diff)
downloadgit-a8f3e2219c237661a30b54fe23d58e055f0b548c.zip
git-a8f3e2219c237661a30b54fe23d58e055f0b548c.tar.gz
git-a8f3e2219c237661a30b54fe23d58e055f0b548c.tar.bz2
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.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/strbuf.h b/strbuf.h
index 567e2d1..3b19de3 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -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 *);