walker: let walker_say take arbitrary formats

We take a printf-style format and a single "char *"
parameter, and the format must therefore have at most one
"%s" in it. Besides being error-prone (and tickling
-Wformat-nonliteral), this is unnecessarily restrictive. We
can just provide the usual varargs interface.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2016-07-08 05:25:23 -04:00 committed by Junio C Hamano
parent 5c589a73de
commit fa262cac76
2 changed files with 9 additions and 4 deletions

View File

@ -9,10 +9,14 @@
static unsigned char current_commit_sha1[20]; static unsigned char current_commit_sha1[20];
void walker_say(struct walker *walker, const char *fmt, const char *hex) void walker_say(struct walker *walker, const char *fmt, ...)
{ {
if (walker->get_verbosely) if (walker->get_verbosely) {
fprintf(stderr, fmt, hex); va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
}
} }
static void report_missing(const struct object *obj) static void report_missing(const struct object *obj)

View File

@ -19,7 +19,8 @@ struct walker {
}; };
/* Report what we got under get_verbosely */ /* Report what we got under get_verbosely */
void walker_say(struct walker *walker, const char *, const char *); __attribute__((format (printf, 2, 3)))
void walker_say(struct walker *walker, const char *fmt, ...);
/* Load pull targets from stdin */ /* Load pull targets from stdin */
int walker_targets_stdin(char ***target, const char ***write_ref); int walker_targets_stdin(char ***target, const char ***write_ref);