Avoid recursion when processing residual inbuf data.
[shim.git] / log.c
blob1ab246a47301fb100c24c23ae333760e16a85946
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "log.h"
4 #include "util.h"
6 static enum log_level min_log_level = LOG_NOTICE;
7 static FILE *log_file = NULL;
8 static int log_do_scrub = 1;
10 void
11 log_debug(const char *msg, ...)
13 va_list ap;
15 va_start(ap, msg);
16 log_msg_va(LOG_DEBUG, 0, msg, ap);
17 va_end(ap);
20 void
21 log_info(const char *msg, ...)
23 va_list ap;
25 va_start(ap, msg);
26 log_msg_va(LOG_INFO, 0, msg, ap);
27 va_end(ap);
30 void
31 log_notice(const char *msg, ...)
33 va_list ap;
35 va_start(ap, msg);
36 log_msg_va(LOG_NOTICE, 0, msg, ap);
37 va_end(ap);
40 void
41 log_warn(const char *msg, ...)
43 va_list ap;
45 va_start(ap, msg);
46 log_msg_va(LOG_WARN, 0, msg, ap);
47 va_end(ap);
50 void
51 log_error(const char *msg, ...)
53 va_list ap;
55 va_start(ap, msg);
56 log_msg_va(LOG_ERROR, 0, msg, ap);
57 va_end(ap);
60 void
61 log_socket_error(const char *msg, ...)
63 va_list ap;
65 va_start(ap, msg);
66 log_msg_va(LOG_ERROR, 1, msg, ap);
67 va_end(ap);
70 void
71 log_fatal(const char *msg, ...)
73 va_list ap;
75 va_start(ap, msg);
76 log_msg_va(LOG_FATAL, 0, msg, ap);
77 va_end(ap);
80 void
81 log_msg_va(enum log_level lvl, int serr, const char *msg, va_list ap)
83 if (lvl >= min_log_level) {
84 vfprintf(log_file, msg, ap);
85 if (serr)
86 fprintf(log_file, ": %s", socket_error_string(-1));
87 fputs("\n", log_file);
88 fflush(log_file);
89 if (lvl >= LOG_FATAL)
90 abort();
94 void
95 log_set_min_level(enum log_level lvl)
97 min_log_level = lvl;
100 enum log_level
101 log_get_min_level(void)
103 return min_log_level;
106 void
107 log_set_file(FILE *fp)
109 if (!fp)
110 log_file = stderr;
111 else
112 log_file = fp;
115 void
116 log_set_scrub(int scrub)
118 log_do_scrub = scrub;
122 log_get_scrub(void)
124 return log_do_scrub;
127 const char *
128 log_scrub(const char *what)
130 if (log_do_scrub)
131 return "(scrubbed)";
133 return what;