diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | pack.h | 7 | ||||
-rw-r--r-- | trace.c | 41 | ||||
-rw-r--r-- | trace.h | 7 |
4 files changed, 56 insertions, 1 deletions
@@ -1 +1 @@ -unpack_test: unpack_test.o unpack.o common.o +unpack_test: unpack_test.o unpack.o common.o trace.o @@ -9,6 +9,13 @@ enum pack_status { PACK_TOOSMALL, }; +extern enum pack_trace { + PACK_TRACE_OFF, + PACK_TRACE_CALL, + PACK_TRACE_DEBUG, + PACK_TRACE_ALL, +} pack_trace; + enum pack_status unpack(void *buf, size_t size, const char *fmt, ...); const char *pack_strerror(enum pack_status status); @@ -0,0 +1,41 @@ +#include <stdarg.h> +#include <stdio.h> + +#include "pack.h" +#include "trace.h" + +enum pack_trace pack_trace = PACK_TRACE_OFF; + +void trace(enum pack_trace level, const char *fmt, va_list va) +{ + char *type; + + if (level > pack_trace) return; + + switch (level) { + case PACK_TRACE_CALL: type = "CALL"; break; + case PACK_TRACE_DEBUG: type = "DEBUG"; break; + } + + fprintf(stderr, "PACK_TRACE_%s: ", type); + vfprintf(stderr, fmt, va); + fputc('\n', stderr); +} + +void tr_call(const char *fmt, ...) +{ + va_list va; + + va_start(va, fmt); + trace(PACK_TRACE_CALL, fmt, va); + va_end(va); +} + +void tr_debug(const char *fmt, ...) +{ + va_list va; + + va_start(va, fmt); + trace(PACK_TRACE_DEBUG, fmt, va); + va_end(va); +} @@ -0,0 +1,7 @@ +#ifndef PACK_TRACE_H +#define PACK_TRACE_H + +void tr_call(const char *fmt, ...); +void tr_debug(const char *fmt, ...); + +#endif // !PACK_TRACE_H |