Skip to content

Commit 950a7f7

Browse files
committed
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.
1 parent 6a7f040 commit 950a7f7

File tree

1 file changed

+27
-5
lines changed

1 file changed

+27
-5
lines changed

src/trace.h

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,53 @@ struct git_trace_data {
2121

2222
extern struct git_trace_data git_trace__data;
2323

24-
GIT_INLINE(void) git_trace__write_fmt(
24+
GIT_INLINE(void) git_trace__vwrite_fmt(
2525
git_trace_level_t level,
26-
const char *fmt, ...)
26+
const char *fmt, va_list ap)
2727
{
2828
git_trace_cb callback = git_trace__data.callback;
2929
git_buf message = GIT_BUF_INIT;
30-
va_list ap;
3130

32-
va_start(ap, fmt);
3331
git_buf_vprintf(&message, fmt, ap);
34-
va_end(ap);
3532

3633
callback(level, git_buf_cstr(&message));
3734

3835
git_buf_dispose(&message);
3936
}
4037

38+
GIT_INLINE(void) git_trace__write_fmt(
39+
git_trace_level_t level,
40+
const char *fmt, ...)
41+
{
42+
va_list ap;
43+
44+
va_start(ap, fmt);
45+
git_trace__vwrite_fmt(level, fmt, ap);
46+
va_end(ap);
47+
}
48+
4149
#define git_trace_level() (git_trace__data.level)
50+
/* Varadic macros are a C99 feature */
51+
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
4252
#define git_trace(l, ...) { \
4353
if (git_trace__data.level >= l && \
4454
git_trace__data.callback != NULL) { \
4555
git_trace__write_fmt(l, __VA_ARGS__); \
4656
} \
4757
}
58+
#else
59+
GIT_INLINE(void) git_trace(git_trace_level_t level, const char *fmt, ...)
60+
{
61+
if (git_trace__data.level >= level &&
62+
git_trace__data.callback != NULL) {
63+
va_list ap;
4864

65+
va_start(ap, fmt);
66+
git_trace__vwrite_fmt(level, fmt, ap);
67+
va_end(ap);
68+
}
69+
}
70+
#endif
4971
#else
5072

5173
GIT_INLINE(void) git_trace__null(

0 commit comments

Comments
 (0)