]>
Commit | Line | Data |
---|---|---|
088d8802 | 1 | #include "../../git-compat-util.h" |
088d8802 MP |
2 | |
3 | static HANDLE ms_eventlog; | |
4 | ||
5 | void openlog(const char *ident, int logopt, int facility) | |
6 | { | |
7 | if (ms_eventlog) | |
8 | return; | |
9 | ||
10 | ms_eventlog = RegisterEventSourceA(NULL, ident); | |
11 | ||
12 | if (!ms_eventlog) | |
13 | warning("RegisterEventSource() failed: %lu", GetLastError()); | |
14 | } | |
15 | ||
16 | void syslog(int priority, const char *fmt, ...) | |
17 | { | |
088d8802 | 18 | WORD logtype; |
2a6b149c | 19 | char *str, *pos; |
088d8802 MP |
20 | int str_len; |
21 | va_list ap; | |
22 | ||
23 | if (!ms_eventlog) | |
24 | return; | |
25 | ||
26 | va_start(ap, fmt); | |
27 | str_len = vsnprintf(NULL, 0, fmt, ap); | |
28 | va_end(ap); | |
29 | ||
30 | if (str_len < 0) { | |
df8e3139 | 31 | warning_errno("vsnprintf failed"); |
088d8802 MP |
32 | return; |
33 | } | |
34 | ||
50a6c8ef | 35 | str = malloc(st_add(str_len, 1)); |
2a6b149c | 36 | if (!str) { |
df8e3139 | 37 | warning_errno("malloc failed"); |
2a6b149c EFL |
38 | return; |
39 | } | |
40 | ||
088d8802 MP |
41 | va_start(ap, fmt); |
42 | vsnprintf(str, str_len + 1, fmt, ap); | |
43 | va_end(ap); | |
2a6b149c EFL |
44 | |
45 | while ((pos = strstr(str, "%1")) != NULL) { | |
50a6c8ef | 46 | str = realloc(str, st_add(++str_len, 1)); |
2a6b149c | 47 | if (!str) { |
df8e3139 | 48 | warning_errno("realloc failed"); |
2a6b149c EFL |
49 | return; |
50 | } | |
51 | memmove(pos + 2, pos + 1, strlen(pos)); | |
52 | pos[1] = ' '; | |
53 | } | |
088d8802 MP |
54 | |
55 | switch (priority) { | |
56 | case LOG_EMERG: | |
57 | case LOG_ALERT: | |
58 | case LOG_CRIT: | |
59 | case LOG_ERR: | |
60 | logtype = EVENTLOG_ERROR_TYPE; | |
61 | break; | |
62 | ||
63 | case LOG_WARNING: | |
64 | logtype = EVENTLOG_WARNING_TYPE; | |
65 | break; | |
66 | ||
67 | case LOG_NOTICE: | |
68 | case LOG_INFO: | |
69 | case LOG_DEBUG: | |
70 | default: | |
71 | logtype = EVENTLOG_INFORMATION_TYPE; | |
72 | break; | |
73 | } | |
74 | ||
75 | ReportEventA(ms_eventlog, logtype, 0, 0, NULL, 1, 0, | |
2a6b149c EFL |
76 | (const char **)&str, NULL); |
77 | free(str); | |
088d8802 | 78 | } |