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>
This commit is contained in:
Junio C Hamano 2007-09-26 02:26:06 -07:00
Родитель 7a33bcbe80
Коммит a8f3e2219c
1 изменённых файлов: 6 добавлений и 3 удалений

Просмотреть файл

@ -65,14 +65,17 @@ static inline void strbuf_swap(struct strbuf *a, struct strbuf *b) {
static inline size_t strbuf_avail(struct strbuf *sb) { static inline size_t strbuf_avail(struct strbuf *sb) {
return sb->alloc ? sb->alloc - sb->len - 1 : 0; 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) { 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->len = len;
sb->buf[len] = '\0'; sb->buf[len] = '\0';
} }
extern void strbuf_grow(struct strbuf *, size_t);
/*----- content related -----*/ /*----- content related -----*/
extern void strbuf_rtrim(struct strbuf *); extern void strbuf_rtrim(struct strbuf *);