NSSM 1.0.
[nssm.git] / event.cpp
diff --git a/event.cpp b/event.cpp
new file mode 100644 (file)
index 0000000..7f2b9f4
--- /dev/null
+++ b/event.cpp
@@ -0,0 +1,41 @@
+#include "nssm.h"\r
+\r
+/* Convert error code to error string - must call LocalFree() on return value */\r
+char *error_string(unsigned long error) {\r
+  char *message;\r
+  if (! FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 0, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (char *) &message, 0, 0)) return 0;\r
+  return message;\r
+}\r
+\r
+/* Log a message to the Event Log */\r
+void eventprintf(unsigned short type, char *format, ...) {\r
+  char message[4096];\r
+  char *strings[2];\r
+  int n, size;\r
+  va_list arg;\r
+\r
+  /* Construct the message */\r
+  size = sizeof(message);\r
+  va_start(arg, format);\r
+  n = _vsnprintf(message, size, format, arg);\r
+  va_end(arg);\r
+\r
+  /* Check success */\r
+  if (n < 0 || n >= size) return;\r
+\r
+  /* Construct strings array */\r
+  strings[0] = message;\r
+  strings[1] = 0;\r
+    \r
+  /* Open event log */\r
+  HANDLE handle = RegisterEventSource(0, TEXT(NSSM));\r
+  if (! handle) return;\r
+\r
+  /* Log it */\r
+  if (! ReportEvent(handle, type, 0, 0, 0, 1, 0, (const char **) strings, 0)) {\r
+    printf("ReportEvent(): %s\n", error_string(GetLastError()));\r
+  }\r
+\r
+  /* Close event log */\r
+  DeregisterEventSource(handle);\r
+}\r