strbuf: convenience format functions with \n automatically appended

These functions are helpful when we do not want to expose \n to translators. For example printf("hello world\n"); can be converted to printf_ln(_("hello world")); Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Nguyễn Thái Ngọc Duy committed Apr 23, 2012 at 19:30 UTC 9a0a30aa4b92a69f63275680820b81c7e34629c9
2 files changed +40
strbuf.c
+33
@@ -464,3 +464,36 @@ void strbuf_addstr_urlencode(struct strbuf *sb, const char *s,
464 {
465 strbuf_add_urlencode(sb, s, strlen(s), reserved);
466 }
467 +
468 +void strbuf_addf_ln(struct strbuf *sb, const char *fmt, ...)
469 +{
470 + va_list ap;
471 + va_start(ap, fmt);
472 + strbuf_vaddf(sb, fmt, ap);
473 + va_end(ap);
474 + strbuf_addch(sb, '\n');
475 +}
476 +
477 +int printf_ln(const char *fmt, ...)
478 +{
479 + int ret;
480 + va_list ap;
481 + va_start(ap, fmt);
482 + ret = vprintf(fmt, ap);
483 + va_end(ap);
484 + if (ret < 0 || putchar('\n') == EOF)
485 + return -1;
486 + return ret + 1;
487 +}
488 +
489 +int fprintf_ln(FILE *fp, const char *fmt, ...)
490 +{
491 + int ret;
492 + va_list ap;
493 + va_start(ap, fmt);
494 + ret = vfprintf(fp, fmt, ap);
495 + va_end(ap);
496 + if (ret < 0 || putc('\n', fp) == EOF)
497 + return -1;
498 + return ret + 1;
499 +}
strbuf.h
+7
@@ -99,6 +99,8 @@ __attribute__((format (printf,2,3)))
99 extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);
100 __attribute__((format (printf,2,0)))
101 extern void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap);
102 +__attribute__((format (printf,2,3)))
103 +extern void strbuf_addf_ln(struct strbuf *sb, const char *fmt, ...);
104
105 extern void strbuf_add_lines(struct strbuf *sb, const char *prefix, const char *buf, size_t size);
106
@@ -129,4 +131,9 @@ extern void strbuf_add_urlencode(struct strbuf *, const char *, size_t,
131 extern void strbuf_addstr_urlencode(struct strbuf *, const char *,
132 int reserved);
133
134 +__attribute__((format (printf,1,2)))
135 +extern int printf_ln(const char *fmt, ...);
136 +__attribute__((format (printf,2,3)))
137 +extern int fprintf_ln(FILE *fp, const char *fmt, ...);
138 +
139 #endif /* STRBUF_H */