Blame src/trace.h

Packit ae9e2a
/*
Packit ae9e2a
 * Copyright (C) the libgit2 contributors. All rights reserved.
Packit ae9e2a
 *
Packit ae9e2a
 * This file is part of libgit2, distributed under the GNU GPL v2 with
Packit ae9e2a
 * a Linking Exception. For full terms see the included COPYING file.
Packit ae9e2a
 */
Packit ae9e2a
#ifndef INCLUDE_trace_h__
Packit ae9e2a
#define INCLUDE_trace_h__
Packit ae9e2a
Packit ae9e2a
#include <git2/trace.h>
Packit ae9e2a
#include "buffer.h"
Packit ae9e2a
Packit ae9e2a
#ifdef GIT_TRACE
Packit ae9e2a
Packit ae9e2a
struct git_trace_data {
Packit ae9e2a
	git_trace_level_t level;
Packit ae9e2a
	git_trace_callback callback;
Packit ae9e2a
};
Packit ae9e2a
Packit ae9e2a
extern struct git_trace_data git_trace__data;
Packit ae9e2a
Packit ae9e2a
GIT_INLINE(void) git_trace__write_fmt(
Packit ae9e2a
	git_trace_level_t level,
Packit ae9e2a
	const char *fmt, ...)
Packit ae9e2a
{
Packit ae9e2a
	git_trace_callback callback = git_trace__data.callback;
Packit ae9e2a
	git_buf message = GIT_BUF_INIT;
Packit ae9e2a
	va_list ap;
Packit ae9e2a
Packit ae9e2a
	va_start(ap, fmt);
Packit ae9e2a
	git_buf_vprintf(&message, fmt, ap);
Packit ae9e2a
	va_end(ap);
Packit ae9e2a
Packit ae9e2a
	callback(level, git_buf_cstr(&message));
Packit ae9e2a
Packit ae9e2a
	git_buf_free(&message);
Packit ae9e2a
}
Packit ae9e2a
Packit ae9e2a
#define git_trace_level()		(git_trace__data.level)
Packit ae9e2a
#define git_trace(l, ...)		{ \
Packit ae9e2a
									if (git_trace__data.level >= l && \
Packit ae9e2a
										git_trace__data.callback != NULL) { \
Packit ae9e2a
										git_trace__write_fmt(l, __VA_ARGS__); \
Packit ae9e2a
									} \
Packit ae9e2a
								}
Packit ae9e2a
Packit ae9e2a
#else
Packit ae9e2a
Packit ae9e2a
GIT_INLINE(void) git_trace__null(
Packit ae9e2a
	git_trace_level_t level,
Packit ae9e2a
	const char *fmt, ...)
Packit ae9e2a
{
Packit ae9e2a
	GIT_UNUSED(level);
Packit ae9e2a
	GIT_UNUSED(fmt);
Packit ae9e2a
}
Packit ae9e2a
Packit ae9e2a
#define git_trace_level()		((void)0)
Packit ae9e2a
#define git_trace			git_trace__null
Packit ae9e2a
Packit ae9e2a
#endif
Packit ae9e2a
Packit ae9e2a
#endif