Skip to content

Commit

Permalink
strbuf: add strbuf_vaddf
Browse files Browse the repository at this point in the history
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
  • Loading branch information
jrn authored and avar committed Feb 23, 2011
1 parent 60623a0 commit 394a9d1
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
16 changes: 13 additions & 3 deletions strbuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,21 +193,22 @@ void strbuf_adddup(struct strbuf *sb, size_t pos, size_t len)
strbuf_setlen(sb, sb->len + len);
}

void strbuf_addf(struct strbuf *sb, const char *fmt, ...)
__attribute__((format(printf, 2, 0)))
void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list args)
{
int len;
va_list ap;

if (!strbuf_avail(sb))
strbuf_grow(sb, 64);
va_start(ap, fmt);
va_copy(ap, args);
len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
va_end(ap);
if (len < 0)
die("your vsnprintf is broken");
if (len > strbuf_avail(sb)) {
strbuf_grow(sb, len);
va_start(ap, fmt);
va_copy(ap, args);
len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
va_end(ap);
if (len > strbuf_avail(sb)) {
Expand All @@ -217,6 +218,15 @@ void strbuf_addf(struct strbuf *sb, const char *fmt, ...)
strbuf_setlen(sb, sb->len + len);
}

__attribute__((format(printf, 2, 3)))
void strbuf_addf(struct strbuf *sb, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
strbuf_vaddf(sb, fmt, ap);
va_end(ap);
}

void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,
void *context)
{
Expand Down
2 changes: 2 additions & 0 deletions strbuf.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ struct strbuf_expand_dict_entry {
extern size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder, void *context);
extern void strbuf_addbuf_percentquote(struct strbuf *dst, const struct strbuf *src);

__attribute__((format (printf,2,0)))
void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list args);
__attribute__((format (printf,2,3)))
extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);

Expand Down

0 comments on commit 394a9d1

Please sign in to comment.