aboutsummaryrefslogtreecommitdiffstats
path: root/SoftHSMv2/src/lib/win32/syslog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'SoftHSMv2/src/lib/win32/syslog.cpp')
-rw-r--r--SoftHSMv2/src/lib/win32/syslog.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/SoftHSMv2/src/lib/win32/syslog.cpp b/SoftHSMv2/src/lib/win32/syslog.cpp
new file mode 100644
index 0000000..927592e
--- /dev/null
+++ b/SoftHSMv2/src/lib/win32/syslog.cpp
@@ -0,0 +1,69 @@
+#include <config.h>
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+
+#ifdef _WIN32
+
+static HANDLE hEventLog = NULL;
+
+/*
+ * Close the Handle to the application Event Log
+ */
+void
+closelog() {
+ DeregisterEventSource(hEventLog);
+}
+
+/*
+ * Initialize event logging
+ */
+void
+openlog(const char *ident, int logopt, int facility) {
+ /* Get a handle to the Application event log */
+ hEventLog = RegisterEventSourceA(NULL, ident);
+}
+
+/*
+ * Log to the NT Event Log
+ */
+void
+syslog(int priority, const char *message, ...) {
+ va_list ap;
+ char buf[1024];
+ LPCSTR str[1];
+
+ str[0] = buf;
+
+ va_start(ap, message);
+ vsprintf(buf, message, ap);
+ va_end(ap);
+
+ /* Make sure that the channel is open to write the event */
+ if (hEventLog == NULL) {
+ openlog("SoftHSM", 0, 0);
+ }
+ if (hEventLog != NULL) {
+ switch (priority) {
+ case LOG_INFO:
+ case LOG_NOTICE:
+ case LOG_DEBUG:
+ ReportEventA(hEventLog, EVENTLOG_INFORMATION_TYPE, 0,
+ 0x40000003, NULL, 1, 0, str, NULL);
+ break;
+ case LOG_WARNING:
+ ReportEventA(hEventLog, EVENTLOG_WARNING_TYPE, 0,
+ 0x80000002, NULL, 1, 0, str, NULL);
+ break;
+ default:
+ ReportEventA(hEventLog, EVENTLOG_ERROR_TYPE, 0,
+ 0xc0000001, NULL, 1, 0, str, NULL);
+ break;
+ }
+ }
+}
+
+#endif