aboutsummaryrefslogtreecommitdiff
path: root/strbuf.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-04-15 13:25:50 -0700
committerJunio C Hamano <gitster@pobox.com>2011-04-15 13:27:04 -0700
commited44fd045a8a4bcf7f30a47e4fc6aba761faaf78 (patch)
treeccc8afe7eb85ec89347047f8e3fb5ff7f4c2f6a6 /strbuf.c
parente0d48279d5a96bc02edac72c1d28fc38aed37c15 (diff)
parent4d8b32a2e1758236c4c1b714f179892e3bce982c (diff)
downloadgit-ed44fd045a8a4bcf7f30a47e4fc6aba761faaf78.tar.gz
git-ed44fd045a8a4bcf7f30a47e4fc6aba761faaf78.tar.xz
Merge v1.7.5-rc2 into jn/format-patch-doc
This is to sync with the recent updates in Documentation/SubmittingPatches and Documentation/format-patch.txt
Diffstat (limited to 'strbuf.c')
-rw-r--r--strbuf.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/strbuf.c b/strbuf.c
index 07e8883ce..77444a94d 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -195,24 +195,29 @@ void strbuf_adddup(struct strbuf *sb, size_t pos, size_t len)
void strbuf_addf(struct strbuf *sb, const char *fmt, ...)
{
- int len;
va_list ap;
+ va_start(ap, fmt);
+ strbuf_vaddf(sb, fmt, ap);
+ va_end(ap);
+}
+
+void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap)
+{
+ int len;
+ va_list cp;
if (!strbuf_avail(sb))
strbuf_grow(sb, 64);
- va_start(ap, fmt);
- len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
- va_end(ap);
+ va_copy(cp, ap);
+ len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, cp);
+ va_end(cp);
if (len < 0)
- die("your vsnprintf is broken");
+ die("BUG: your vsnprintf is broken (returned %d)", len);
if (len > strbuf_avail(sb)) {
strbuf_grow(sb, len);
- va_start(ap, fmt);
len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
- va_end(ap);
- if (len > strbuf_avail(sb)) {
- die("this should not happen, your snprintf is broken");
- }
+ if (len > strbuf_avail(sb))
+ die("BUG: your vsnprintf is broken (insatiable)");
}
strbuf_setlen(sb, sb->len + len);
}