diff options
Diffstat (limited to 'src/trace.h')
| -rw-r--r-- | src/trace.h | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/src/trace.h b/src/trace.h index e15118ef5..e93283788 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( |
