Commit 950a7f76e2db0bd578717c96123e5e59770c242c

Calvin Buckley 2021-07-17T16:21:05

Variadic arguments aren't in C89 This refactors this to a wrapper function, as well as changing the existing API have a va_list and ... version.

diff --git a/src/trace.h b/src/trace.h
index e15118e..e932837 100644
--- a/src/trace.h
+++ b/src/trace.h
@@ -21,31 +21,53 @@ struct git_trace_data {
 
 extern struct git_trace_data git_trace__data;
 
-GIT_INLINE(void) git_trace__write_fmt(
+GIT_INLINE(void) git_trace__vwrite_fmt(
 	git_trace_level_t level,
-	const char *fmt, ...)
+	const char *fmt, va_list ap)
 {
 	git_trace_cb callback = git_trace__data.callback;
 	git_buf message = GIT_BUF_INIT;
-	va_list ap;
 
-	va_start(ap, fmt);
 	git_buf_vprintf(&message, fmt, ap);
-	va_end(ap);
 
 	callback(level, git_buf_cstr(&message));
 
 	git_buf_dispose(&message);
 }
 
+GIT_INLINE(void) git_trace__write_fmt(
+	git_trace_level_t level,
+	const char *fmt, ...)
+{
+	va_list ap;
+
+	va_start(ap, fmt);
+	git_trace__vwrite_fmt(level, fmt, ap);
+	va_end(ap);
+}
+
 #define git_trace_level()		(git_trace__data.level)
+/* Varadic macros are a C99 feature */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 #define git_trace(l, ...)		{ \
 									if (git_trace__data.level >= l && \
 										git_trace__data.callback != NULL) { \
 										git_trace__write_fmt(l, __VA_ARGS__); \
 									} \
 								}
+#else
+GIT_INLINE(void) git_trace(git_trace_level_t level, const char *fmt, ...)
+{
+	if (git_trace__data.level >= level &&
+			git_trace__data.callback != NULL) {
+		va_list ap;
 
+		va_start(ap, fmt);
+		git_trace__vwrite_fmt(level, fmt, ap);
+		va_end(ap);
+	}
+}
+#endif
 #else
 
 GIT_INLINE(void) git_trace__null(