]>
Commit | Line | Data |
---|---|---|
282113ba CV |
1 | /* bsd_log.cc |
2 | ||
1dcd520b | 3 | Copyright 2003, 2004 Red Hat Inc. |
282113ba CV |
4 | |
5 | This file is part of Cygwin. | |
6 | ||
7 | This software is a copyrighted work licensed under the terms of the | |
8 | Cygwin license. Please consult the file "CYGWIN_LICENSE" for | |
9 | details. */ | |
10 | #ifdef __OUTSIDE_CYGWIN__ | |
11 | #include "woutsup.h" | |
12 | #define _KERNEL 1 | |
13 | #define __BSD_VISIBLE 1 | |
282113ba CV |
14 | #include <stdio.h> |
15 | #include <stdlib.h> | |
16 | ||
17 | long log_level = 8; /* Illegal value. Don't change! */ | |
18 | tun_bool_t log_debug = TUN_UNDEF; | |
19 | tun_bool_t log_syslog = TUN_UNDEF; | |
20 | tun_bool_t log_stderr = TUN_UNDEF; | |
21 | ||
22 | void | |
23 | loginit (tun_bool_t opt_stderr, tun_bool_t opt_syslog) | |
24 | { | |
25 | if (log_debug == TUN_UNDEF) | |
26 | TUNABLE_BOOL_FETCH ("kern.log.debug", &log_debug); | |
27 | if (log_debug == TUN_UNDEF) | |
28 | log_debug = TUN_FALSE; | |
29 | ||
30 | if (opt_stderr != TUN_UNDEF) | |
31 | log_stderr = opt_stderr; | |
32 | else | |
33 | TUNABLE_BOOL_FETCH ("kern.log.stderr", &log_stderr); | |
34 | if (log_stderr == TUN_UNDEF) | |
35 | log_stderr = TUN_FALSE; | |
36 | ||
37 | if (opt_syslog != TUN_UNDEF) | |
38 | log_syslog = opt_syslog; | |
39 | else | |
40 | TUNABLE_BOOL_FETCH ("kern.log.syslog", &log_syslog); | |
41 | if (log_syslog == TUN_UNDEF) | |
42 | log_syslog = TUN_FALSE; | |
43 | ||
44 | if (log_level == 8) | |
45 | TUNABLE_INT_FETCH ("kern.log.level", &log_level); | |
46 | if (log_level == 8) | |
47 | log_level = 6; | |
48 | } | |
49 | ||
50 | void | |
51 | _vlog (const char *file, int line, int level, | |
52 | const char *fmt, va_list ap) | |
53 | { | |
54 | char buf[16384]; | |
fb7331e3 | 55 | char *pos; |
282113ba CV |
56 | |
57 | if ((level == LOG_DEBUG && log_debug != TUN_TRUE) | |
58 | || (level != LOG_DEBUG && level >= log_level)) | |
59 | return; | |
fb7331e3 | 60 | pos = stpcpy (buf, "cygserver: "); |
282113ba | 61 | if (file && log_debug == TUN_TRUE) |
fb7331e3 CV |
62 | pos += snprintf (pos, 16384 - (pos - buf), "%s, line %d: ", file, line); |
63 | vsnprintf (pos, 16384 - (pos - buf), fmt, ap); | |
282113ba CV |
64 | if (log_syslog == TUN_TRUE && level != LOG_DEBUG) |
65 | syslog (level, buf); | |
66 | if (log_stderr == TUN_TRUE || level == LOG_DEBUG) | |
67 | { | |
68 | fputs (buf, stderr); | |
69 | fputc ('\n', stderr); | |
70 | } | |
71 | } | |
72 | ||
73 | void | |
74 | _log (const char *file, int line, int level, const char *fmt, ...) | |
75 | { | |
76 | va_list ap; | |
77 | va_start (ap, fmt); | |
78 | _vlog (file, line, level, fmt, ap); | |
79 | } | |
80 | ||
81 | void | |
82 | _vpanic (const char *file, int line, const char *fmt, va_list ap) | |
83 | { | |
8032f815 | 84 | _vlog (file, line, LOG_CRIT, fmt, ap); |
282113ba CV |
85 | exit (1); |
86 | } | |
87 | ||
88 | void | |
89 | _panic (const char *file, int line, const char *fmt, ...) | |
90 | { | |
91 | va_list ap; | |
92 | va_start (ap, fmt); | |
93 | _vpanic (file, line, fmt, ap); | |
94 | } | |
95 | #endif /* __OUTSIDE_CYGWIN__ */ |