2 * Copyright (C) 1994, Index Data I/S
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.3 1995-04-10 10:23:51 quinn
10 * Revision 1.2 1995/03/31 10:16:55 quinn
13 * Revision 1.1 1995/03/30 10:26:53 quinn
16 * Revision 1.9 1994/12/12 12:09:02 quinn
19 * Revision 1.8 1994/11/22 13:15:38 quinn
22 * Revision 1.7 1994/10/05 10:16:11 quinn
23 * Added xrealloc. Fixed bug in log.
25 * Revision 1.6 1994/10/04 14:02:19 quinn
28 * Revision 1.5 1994/09/28 13:07:41 adam
29 * Implemented log_mask_str.
31 * Revision 1.4 1994/09/27 20:04:13 quinn
34 * Revision 1.3 1994/08/18 08:18:48 quinn
35 * Added prefix to log_init.
37 * Revision 1.2 1994/08/17 14:27:53 quinn
40 * Revision 1.1 1994/08/17 13:23:15 quinn
53 static int l_level = LOG_DEFAULT_LEVEL;
54 static FILE *l_file = stderr;
55 static char l_prefix[30] = "log";
62 { LOG_FATAL, "fatal"},
63 { LOG_DEBUG, "debug"},
76 extern char *sys_errlist[];
77 return sys_errlist[n];
82 void log_init(int level, const char *prefix, const char *name)
85 if (prefix && *prefix)
86 strcpy(l_prefix, prefix);
87 if (!name || !*name || l_file != stderr)
89 if (!(l_file = fopen(name, "a")))
91 setbuffer(l_file, 0, 0);
94 void logf(int level, const char *fmt, ...)
97 char buf[4096], flags[1024];
100 if (!(level & l_level))
102 if (level & LOG_ERRNO)
105 for (i = 0; level && mask_names[i].name; i++)
106 if (mask_names[i].mask & level)
108 if (*mask_names[i].name)
109 sprintf(flags + strlen(flags), "[%s]", mask_names[i].name);
110 level -= mask_names[i].mask;
113 vsprintf(buf, fmt, ap);
115 sprintf(buf + strlen(buf), " [%s]", strerror(errno));
116 fprintf(l_file, "%s: %s %s\n", l_prefix, flags, buf);
120 int log_mask_str (const char *str)
123 int i, level = LOG_DEFAULT_LEVEL;
127 for (p = str; *p && *p != ','; p++)
129 if (*str == '-' || isdigit(*str))
132 for (i = 0; mask_names[i].name; i++)
133 if (strlen (mask_names[i].name) == p-str &&
134 memcmp (mask_names[i].name, str, p-str) == 0)
136 if (mask_names[i].mask)
137 level |= mask_names[i].mask;