mirror of
https://github.com/libgit2/libgit2.git
synced 2026-06-22 06:26:26 +00:00
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.
This commit is contained in:
32
src/trace.h
32
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(
|
||||
|
||||
Reference in New Issue
Block a user