Skip to content

Commit

Permalink
strbuf: clarify assertion in strbuf_setlen()
Browse files Browse the repository at this point in the history
Commit a8f3e22 introduced the strbuf_grow() call to strbuf_setlen() to
make ensure that there was at least one byte available to write the
mandatory trailing NUL, even for previously unallocated strbufs.

Then b315c5c added strbuf_slopbuf for the same reason, only globally for
all uses of strbufs.

Thus the strbuf_grow() call can be removed now.  This avoids readers of
strbuf.h from mistakenly thinking that strbuf_setlen() can be used to
extend a strbuf.

The following assert() needs to be changed to cope with the fact that
sb->alloc can now be zero, which is OK as long as len is also zero.  As
suggested by Junio, use the chance to convert it to a die() with a short
explanatory message.  The pattern of 'die("BUG: ...")' is already used in
strbuf.c.

This was the only assert() in strbuf.[ch], so assert.h doesn't have to be
included anymore either.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
René Scharfe authored and Junio C Hamano committed Apr 27, 2011
1 parent ec014ea commit 7141efa
Showing 1 changed file with 2 additions and 5 deletions.
7 changes: 2 additions & 5 deletions strbuf.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@

/* See Documentation/technical/api-strbuf.txt */

#include <assert.h>

extern char strbuf_slopbuf[];
struct strbuf {
size_t alloc;
Expand Down Expand Up @@ -33,9 +31,8 @@ static inline size_t strbuf_avail(const struct strbuf *sb) {
extern void strbuf_grow(struct strbuf *, size_t);

static inline void strbuf_setlen(struct strbuf *sb, size_t len) {
if (!sb->alloc)
strbuf_grow(sb, 0);
assert(len < sb->alloc);
if (len > (sb->alloc ? sb->alloc - 1 : 0))
die("BUG: strbuf_setlen() beyond buffer");
sb->len = len;
sb->buf[len] = '\0';
}
Expand Down

0 comments on commit 7141efa

Please sign in to comment.