]> git.sur5r.net Git - bacula/bacula/commitdiff
Implement syslog on Windows
authorKern Sibbald <kern@sibbald.com>
Sat, 24 Oct 2009 09:26:31 +0000 (11:26 +0200)
committerKern Sibbald <kern@sibbald.com>
Sat, 24 Oct 2009 09:26:31 +0000 (11:26 +0200)
bacula/src/win32/compat/compat.cpp
bacula/src/win32/compat/compat.h
bacula/src/win32/libwin32/protos.h
bacula/src/win32/libwin32/service.cpp

index 8caa8c2954be48232fb8507059dc92719b8f6e76..ae217cbe4eccf6e39c42e5bd95a451d5a421ce93 100644 (file)
@@ -1100,12 +1100,30 @@ gettimeofday(struct timeval *tv, struct timezone *)
 
 }
 
-/* For apcupsd this is in src/lib/wincompat.c */
+/* 
+ * Write in Windows System log 
+ */
 extern "C" void syslog(int type, const char *fmt, ...) 
 {
-/*#ifndef HAVE_CONSOLE
-    MessageBox(NULL, msg, "Bacula", MB_OK);
-#endif*/
+   va_list   arg_ptr;
+   int len, maxlen;
+   POOLMEM *msg;
+
+   msg = get_pool_memory(PM_EMSG);
+
+   for (;;) {
+      maxlen = sizeof_pool_memory(msg) - 1;
+      va_start(arg_ptr, fmt);
+      len = bvsnprintf(msg, maxlen, fmt, arg_ptr);
+      va_end(arg_ptr);
+      if (len < 0 || len >= (maxlen-5)) {
+         msg = realloc_pool_memory(msg, maxlen + maxlen/2);
+         continue;
+      }
+      break;
+   }
+   LogErrorMsg((const char *)msg);
+   free_memory(msg);
 }
 
 void
@@ -2580,3 +2598,28 @@ int munmap(void *start, size_t length)
 /* syslog function, added by Nicolas Boichat */
 void openlog(const char *ident, int option, int facility) {}  
 #endif //HAVE_MINGW
+
+/* Log an error message */
+void LogErrorMsg(const char *message)
+{
+   HANDLE eventHandler;
+   const char *strings[2];
+
+   /* Use the OS event logging to log the error */
+   eventHandler = RegisterEventSource(NULL, "Bacula");
+
+   strings[0] = _("\n\nBacula ERROR: ");
+   strings[1] = message;
+
+   if (eventHandler) {
+      ReportEvent(eventHandler, EVENTLOG_ERROR_TYPE,
+              0,                      /* category */
+              0,                      /* ID */
+              NULL,                   /* SID */
+              2,                      /* Number of strings */
+              0,                      /* raw data size */
+              (const char **)strings, /* error strings */
+              NULL);                  /* raw data */
+      DeregisterEventSource(eventHandler);
+   }
+}
index 4df0e732b8cb70f4ac6dc87eba02a60ddf1e4658..0cd5efbdb1999e5c1ca7bde2dcabc1dd2578988c 100644 (file)
@@ -381,6 +381,8 @@ void closelog();
 void openlog(const char *ident, int option, int facility);
 #endif //HAVE_MINGW
 
+extern void LogErrorMsg(const char *message);
+
 #if !defined(INVALID_FILE_ATTRIBUTES)
 #define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
 #endif
index ad1b9d567b9bcf59067710595b02265f3ec21043..b9bc514f6ff8c635d947da27479b2dafcad6b482 100644 (file)
  *   Version $Id$
  */
 
-#define log_error_message(msg) LogErrorMsg((msg), __FILE__, __LINE__)
+#define log_error_message(msg) LogLastErrorMsg((msg), __FILE__, __LINE__)
 
 extern int BaculaAppMain();
-extern void LogErrorMsg(const char *msg, const char *fname, int lineno);
+extern void LogLastErrorMsg(const char *msg, const char *fname, int lineno);
 
 extern int BaculaMain(int argc, char *argv[]);
 extern BOOL ReportStatus(DWORD state, DWORD exitcode, DWORD waithint);
index cc29860023f4cbec6ef386bb5a2a6d35ccc152c0..c77f8e286b5b7f12404b8b8c8e675de219ddf4d9 100644 (file)
@@ -470,8 +470,8 @@ BOOL ReportStatus(DWORD state, DWORD exitcode, DWORD waithint)
    return result;
 }
 
-/* Log an error message */
-void LogErrorMsg(const char *message, const char *fname, int lineno)
+/* Log an error message for the last Windows error */
+void LogLastErrorMsg(const char *message, const char *fname, int lineno)
 {
    char msgbuf[500];
    HANDLE eventHandler;