summaryrefslogtreecommitdiff
path: root/pn_log.c
blob: d662c201459b3ad2810f7d232dab7144bb736031 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "pn_log.h"
#include "pn_printf.h"

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>

#include <glib.h>

static inline char log_level_to_char(unsigned level)
{
	switch (level) {
	case 0: return 'E';
	case 1: return 'W';
	case 2: return 'T';
	case 3: return 'I';
	case 4: return 'D';
	default: return 'O';
	}
}

void _pn_helper(unsigned level,
		void *object,
		const char *file,
		const char *function,
		unsigned line,
		const char *fmt,
		...)
{
	char *tmp;
	va_list args;
	char l = log_level_to_char(level);

	va_start(args, fmt);

	tmp = pn_strdup_vprintf(fmt, args);

	if (level <= 1)
		fprintf(stdout, "%c: %s: %s\n", l, function, tmp);
	else if (level == 2)
		fprintf(stdout, "%c: %s:%s(%u): %s\n", l, file, function, line, tmp);
	else if (level == 3)
		fprintf(stdout, "%c: %s: %s\n", l, function, tmp);
#if defined(DEBUG)
	else if (level == 4)
		fprintf(stdout, "%c: %s:%s(%u): %s\n", l, file, function, line, tmp);
#endif
	fflush(stdout);

	free(tmp);

	va_end(args);
}