]> git.imager.perl.org - imager.git/blame - log.c
Move freetype 2 support into its own module
[imager.git] / log.c
CommitLineData
e11d297f 1#include "imconfig.h"
02d1d628 2#include "log.h"
35891892 3#include <stdlib.h>
02d1d628
AMH
4
5#define DTBUFF 50
6#define DATABUFF DTBUFF+3+10+1+5+1+1
7
8static int log_level = 0;
9static FILE *lg_file = NULL;
10static char *date_format = "%Y/%m/%d %H:%M:%S";
11static char date_buffer[DTBUFF];
12static char data_buffer[DATABUFF];
13
14
15#ifdef IMAGER_LOG
16
17/*
18 * Logging is active
19 */
20
21void
bf1573f9 22i_init_log(const char* name,int level) {
02d1d628
AMH
23 log_level = level;
24 if (level < 0) {
25 lg_file = NULL;
26 } else {
27 if (name == NULL) {
28 lg_file = stderr;
29 } else {
30 if (NULL == (lg_file = fopen(name, "w+")) ) {
31 fprintf(stderr,"Cannot open file '%s'\n",name);
32 exit(2);
33 }
34 }
35 }
7f882a01 36 setvbuf(lg_file, NULL, _IONBF, BUFSIZ);
02d1d628
AMH
37 mm_log((0,"Imager - log started (level = %d)\n", level));
38}
39
40void
b1e96952 41i_fatal(int exitcode,const char *fmt, ... ) {
02d1d628
AMH
42 va_list ap;
43 time_t timi;
44 struct tm *str_tm;
45
46 if (lg_file != NULL) {
47 timi = time(NULL);
48 str_tm = localtime(&timi);
49 if ( strftime(date_buffer, DTBUFF, date_format, str_tm) )
50 fprintf(lg_file,"[%s] ",date_buffer);
51 va_start(ap,fmt);
52 vfprintf(lg_file,fmt,ap);
53 va_end(ap);
54 }
55 exit(exitcode);
56}
57
58#else
59
60/*
61 * Logging is inactive - insert dummy functions
8bb2a86a 62 */
02d1d628 63
bf1573f9 64void i_init_log(const char* name,int onoff) {}
b1e96952 65void i_fatal(int exitcode,const char *fmt, ... ) { exit(exitcode); }
02d1d628 66
02d1d628
AMH
67
68#endif
69
bd8052a6
TC
70/*
71=item i_loog(level, format, ...)
72=category Logging
73
74This is an internal function called by the mm_log() macro.
75
76=cut
77*/
02d1d628
AMH
78
79void
bf1573f9 80i_loog(int level,const char *fmt, ... ) {
02d1d628
AMH
81 va_list ap;
82 if (level > log_level) return;
83 if (lg_file != NULL) {
84 fputs(data_buffer, lg_file);
85 fprintf(lg_file, "%3d: ",level);
86 va_start(ap,fmt);
87 vfprintf(lg_file, fmt, ap);
88 fflush(lg_file);
89 va_end(ap);
90 }
91}
92
6cfee9d1
TC
93/*
94=item i_lhead(file, line)
95=category Logging
96
97This is an internal function called by the mm_log() macro.
98
99=cut
100*/
02d1d628
AMH
101
102void
bf1573f9 103i_lhead(const char *file, int line) {
02d1d628
AMH
104 time_t timi;
105 struct tm *str_tm;
106
107 if (lg_file != NULL) {
108 timi = time(NULL);
109 str_tm = localtime(&timi);
110 strftime(date_buffer, DTBUFF, date_format, str_tm);
111 sprintf(data_buffer, "[%s] %10s:%-5d ", date_buffer, file, line);
112 }
113}