On Wed, Dec 3, 2014 at 12:10 AM, Jonathan Nieder <jrnieder@xxxxxxxxx> wrote: > When preparing an error message in a strbuf, it can be convenient > to add a formatted string to the beginning: > > if (transaction_commit(&t, err)) { > strbuf_prefixf(err, "cannot fetch '%s': ", remotename); > return -1; > } > > The new strbuf_prefixf is like strbuf_addf, except it writes its > result to the beginning of a strbuf instead of the end. > > The current implementation uses strlen(strfmt(fmt, ...)) extra bytes > at the end of the strbuf as temporary scratch space for convenience > and simplicity. A later patch can optimize if needed. > > Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> > --- > diff --git a/strbuf.c b/strbuf.c > index 0346e74..3f4aaa3 100644 > --- a/strbuf.c > +++ b/strbuf.c > @@ -219,6 +219,22 @@ void strbuf_addf(struct strbuf *sb, const char *fmt, ...) > va_end(ap); > } > > +void strbuf_prefixf(struct strbuf *sb, const char *fmt, ...) > +{ > + va_list ap; > + size_t pos, len; > + > + pos = sb->len; > + > + va_start(ap, fmt); > + strbuf_vaddf(sb, fmt, ap); > + va_end(ap); > + > + len = sb->len - pos; > + strbuf_insert(sb, 0, sb->buf + pos, len); > + strbuf_remove(sb, pos + len, len); Would a strbuf_setlen(sb, pos), rather than strbuf_remove(), make it clearer to the reader that this is merely performing a truncation? > +} > + > static void add_lines(struct strbuf *out, > const char *prefix1, > const char *prefix2, -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html