source: MondoRescue/branches/stable/mondo/src/lib/mr_msg.c @ 1104

Last change on this file since 1104 was 1104, checked in by Bruno Cornec, 13 years ago

Improvement of the low level library (Usage of LINE and FILE and simplified interfaces using macros)

  • Property svn:eol-style set to native
File size: 1.9 KB
Line 
1/*
2 * $Id$
3 *
4 * Code (c)2006 Bruno Cornec <bruno@mondorescue.org>
5 *
6 *     Main file of mr_msg : a very small and simple
7 *     library for messages management
8 *
9 * Provided under the GPLv2
10 */
11
12#ifndef _GNU_SOURCE
13#define _GNU_SOURCE
14#endif
15#include <stdio.h>
16#include <stdarg.h>
17#include <stdlib.h>
18
19static int mr_loglevel = 0;
20static char *mr_logfile = NULL;
21
22/*
23 * This function is in the lowest part of the tree
24 * It should not depend on any other function of the mr lib
25 */
26
27/* Cleanup function for messages */
28void mr_msg_close(void) {
29    free(mr_logfile);
30    mr_logfile = NULL;
31    mr_loglevel = 0;
32}
33
34/* Initialization function for messages */
35void mr_msg_init(const char *configfile, int loglevel) {
36    FILE *fout = NULL;
37    int res = 0;
38
39    asprintf(&mr_logfile,configfile);
40    if ((fout = fopen(mr_logfile, "w")) == NULL) {
41        fprintf(stderr,"Unable to write to %s\n",mr_logfile);
42        fprintf(stderr,"Logging desactivated\n");
43        mr_msg_close();
44    }
45    if ((res = fclose(fout)) != 0) {
46        fprintf(stderr,"Unable to close %s\n",mr_logfile);
47    }
48    mr_loglevel = loglevel;
49}
50
51/*
52 * Function that log a message. Not called directly
53 * but through other functions
54 * fmt needs to be just before ...
55 */
56void mr_msg_int(int debug, int line, const char *file, const char *fmt, ...) {
57
58    int i = 0;
59    int res = 0;
60    FILE *fout = NULL;
61    va_list args;
62
63    if (mr_logfile == NULL) {
64        return;
65    }
66
67    if (debug <= mr_loglevel) {
68        if ((fout = fopen(mr_logfile, "a")) == NULL) {
69            fprintf(stderr,"Unable to append to %s\n",mr_logfile);
70            return;
71        }
72
73        // add 2 spaces to distinguish log levels
74        if (debug > 0) {
75            for (i = 1; i < debug; i++)
76                fprintf(fout, "  ");
77            fprintf(fout, "%s #%d: ", file, line);
78        }
79        va_start(args,fmt);
80        if (vfprintf(fout, fmt, args) < 0) {
81            fprintf(stderr,"Unable to print to %s\n",mr_logfile);
82        }
83        va_end(args);
84
85        if ((res = fclose(fout)) != 0) {
86            fprintf(stderr,"Unable to close %s\n",mr_logfile);
87        }
88    }
89}
Note: See TracBrowser for help on using the repository browser.