1 /* -*- c -*-
2  * File: log.c
3  * Author: Igor Vlasenko <vlasenko@imath.kiev.ua>
4  * Created: Thu Sep  1 17:18:16 2005
5  *
6  * $Id$
7  */
8 
9 /* based on FFmpeg av_log API */
10 
11 #include <stdio.h>
12 #include <string.h>
13 #include "tmpllog.h"
14 
15 static int tmpl_log_level = TMPL_LOG_ERROR;
16 TMPLPRO_LOCAL FILE* tmpl_log_stream = NULL;
17 
18 TMPLPRO_LOCAL void
tmpl_log_default_callback(int level,const char * fmt,va_list vl)19 tmpl_log_default_callback(int level, const char* fmt, va_list vl)
20 {
21     vfprintf(stderr, fmt, vl);
22 }
23 
24 TMPLPRO_LOCAL void
tmpl_log_stream_callback(int level,const char * fmt,va_list vl)25 tmpl_log_stream_callback(int level, const char* fmt, va_list vl)
26 {
27     vfprintf(tmpl_log_stream, fmt, vl);
28     fflush(tmpl_log_stream);
29 }
30 
31 static void (*tmpl_log_callback)(int, const char*, va_list) = tmpl_log_default_callback;
32 
33 TMPLPRO_LOCAL
34 void
tmpl_log(int level,const char * fmt,...)35 tmpl_log(int level, const char *fmt, ...)
36 {
37     va_list vl;
38     va_start(vl, fmt);
39     tmpl_vlog(level, fmt, vl);
40     va_end(vl);
41 }
42 
43 TMPLPRO_LOCAL
44 void
tmpl_vlog(int level,const char * fmt,va_list vl)45 tmpl_vlog(int level, const char *fmt, va_list vl)
46 {
47     if(level>tmpl_log_level) return;
48     tmpl_log_callback(level, fmt, vl);
49 }
50 
51 TMPLPRO_LOCAL
52 int
tmpl_log_get_level(void)53 tmpl_log_get_level(void)
54 {
55     return tmpl_log_level;
56 }
57 
58 TMPLPRO_LOCAL
59 void
tmpl_log_set_level(int level)60 tmpl_log_set_level(int level)
61 {
62     tmpl_log_level = level;
63 }
64 
65 TMPLPRO_LOCAL
66 void
tmpl_log_set_callback(void (* callback)(int,const char *,va_list))67 tmpl_log_set_callback(void (*callback)(int, const char*, va_list))
68 {
69     tmpl_log_callback = callback;
70 }
71