sysdeps: move _dbus_system_log() into the shared library
authorSimon McVittie <smcv@debian.org>
Wed, 20 Jul 2016 09:07:12 +0000 (10:07 +0100)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Thu, 11 Aug 2016 15:41:16 +0000 (16:41 +0100)
This is in preparation for optionally making _dbus_warn() use it.
dbus-daemon closes its stderr under some circumstances, including
when launched by dbus-launch, which makes failures in that
situation rather hard to debug.

_dbus_system_log() is the same on Unix and Windows, so move it
to dbus-sysdeps.c. _dbus_system_logv() remains platform-specific.

Reviewed-by: Ralf Habacker <ralf.habacker@freenet.de>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=97009
[smcv: move the #include for syslog.h, too]
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
dbus/dbus-sysdeps-unix.c
dbus/dbus-sysdeps-util-unix.c
dbus/dbus-sysdeps-util-win.c
dbus/dbus-sysdeps-win.c
dbus/dbus-sysdeps.c
dbus/dbus-sysdeps.h

index 992381d..c156dcf 100644 (file)
@@ -62,6 +62,9 @@
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
 #endif
+#ifdef HAVE_SYSLOG_H
+#include <syslog.h>
+#endif
 #ifdef HAVE_WRITEV
 #include <sys/uio.h>
 #endif
@@ -4520,4 +4523,75 @@ _dbus_restore_socket_errno (int saved_errno)
   errno = saved_errno;
 }
 
+void
+_dbus_init_system_log (dbus_bool_t is_daemon)
+{
+#ifdef HAVE_SYSLOG_H
+  int logopts = LOG_PID;
+
+#if HAVE_DECL_LOG_PERROR
+#ifdef HAVE_SYSTEMD
+  if (!is_daemon || sd_booted () <= 0)
+#endif
+    logopts |= LOG_PERROR;
+#endif
+
+  openlog ("dbus", logopts, LOG_DAEMON);
+#endif
+}
+
+/**
+ * Log a message to the system log file (e.g. syslog on Unix).
+ *
+ * @param severity a severity value
+ * @param msg a printf-style format string
+ * @param args arguments for the format string
+ *
+ * If the FATAL severity is given, this function will terminate the program
+ * with an error code.
+ */
+void
+_dbus_system_logv (DBusSystemLogSeverity severity, const char *msg, va_list args)
+{
+  va_list tmp;
+#ifdef HAVE_SYSLOG_H
+  int flags;
+  switch (severity)
+    {
+      case DBUS_SYSTEM_LOG_INFO:
+        flags =  LOG_DAEMON | LOG_NOTICE;
+        break;
+      case DBUS_SYSTEM_LOG_WARNING:
+        flags =  LOG_DAEMON | LOG_WARNING;
+        break;
+      case DBUS_SYSTEM_LOG_SECURITY:
+        flags = LOG_AUTH | LOG_NOTICE;
+        break;
+      case DBUS_SYSTEM_LOG_FATAL:
+        flags = LOG_DAEMON|LOG_CRIT;
+        break;
+      default:
+        return;
+    }
+
+  DBUS_VA_COPY (tmp, args);
+  vsyslog (flags, msg, tmp);
+  va_end (tmp);
+#endif
+
+#if !defined(HAVE_SYSLOG_H) || !HAVE_DECL_LOG_PERROR
+    {
+      /* vsyslog() won't write to stderr, so we'd better do it */
+      DBUS_VA_COPY (tmp, args);
+      fprintf (stderr, "dbus[" DBUS_PID_FORMAT "]: ", _dbus_getpid ());
+      vfprintf (stderr, msg, tmp);
+      fputc ('\n', stderr);
+      va_end (tmp);
+    }
+#endif
+
+  if (severity == DBUS_SYSTEM_LOG_FATAL)
+    exit (1);
+}
+
 /* tests in dbus-sysdeps-util.c */
index 32599f7..886c5b6 100644 (file)
 #include <dirent.h>
 #include <sys/un.h>
 
-#ifdef HAVE_SYSLOG_H
-#include <syslog.h>
-#endif
-
 #ifdef HAVE_SYS_SYSLIMITS_H
 #include <sys/syslimits.h>
 #endif
@@ -511,95 +507,6 @@ _dbus_rlimit_free (DBusRLimit *lim)
   dbus_free (lim);
 }
 
-void
-_dbus_init_system_log (dbus_bool_t is_daemon)
-{
-#ifdef HAVE_SYSLOG_H
-  int logopts = LOG_PID;
-
-#if HAVE_DECL_LOG_PERROR
-#ifdef HAVE_SYSTEMD
-  if (!is_daemon || sd_booted () <= 0)
-#endif
-    logopts |= LOG_PERROR;
-#endif
-
-  openlog ("dbus", logopts, LOG_DAEMON);
-#endif
-}
-
-/**
- * Log a message to the system log file (e.g. syslog on Unix).
- *
- * @param severity a severity value
- * @param msg a printf-style format string
- */
-void
-_dbus_system_log (DBusSystemLogSeverity severity, const char *msg, ...)
-{
-  va_list args;
-
-  va_start (args, msg);
-
-  _dbus_system_logv (severity, msg, args);
-
-  va_end (args);
-}
-
-/**
- * Log a message to the system log file (e.g. syslog on Unix).
- *
- * @param severity a severity value
- * @param msg a printf-style format string
- * @param args arguments for the format string
- *
- * If the FATAL severity is given, this function will terminate the program
- * with an error code.
- */
-void
-_dbus_system_logv (DBusSystemLogSeverity severity, const char *msg, va_list args)
-{
-  va_list tmp;
-#ifdef HAVE_SYSLOG_H
-  int flags;
-  switch (severity)
-    {
-      case DBUS_SYSTEM_LOG_INFO:
-        flags =  LOG_DAEMON | LOG_NOTICE;
-        break;
-      case DBUS_SYSTEM_LOG_WARNING:
-        flags =  LOG_DAEMON | LOG_WARNING;
-        break;
-      case DBUS_SYSTEM_LOG_SECURITY:
-        flags = LOG_AUTH | LOG_NOTICE;
-        break;
-      case DBUS_SYSTEM_LOG_FATAL:
-        flags = LOG_DAEMON|LOG_CRIT;
-        break;
-      default:
-        return;
-    }
-
-  DBUS_VA_COPY (tmp, args);
-  vsyslog (flags, msg, tmp);
-  va_end (tmp);
-#endif
-
-#if !defined(HAVE_SYSLOG_H) || !HAVE_DECL_LOG_PERROR
-    {
-      /* vsyslog() won't write to stderr, so we'd better do it */
-      DBUS_VA_COPY (tmp, args);
-      fprintf (stderr, "dbus[" DBUS_PID_FORMAT "]: ", _dbus_getpid ());
-      vfprintf (stderr, msg, tmp);
-      fputc ('\n', stderr);
-      va_end (tmp);
-    }
-#endif
-
-  if (severity == DBUS_SYSTEM_LOG_FATAL)
-    exit (1);
-}
-
 /** Installs a UNIX signal handler
  *
  * @param sig the signal to handle
index 789bd18..dacb8d2 100644 (file)
@@ -296,63 +296,6 @@ _dbus_rlimit_free (DBusRLimit *lim)
   _dbus_assert (lim == NULL);
 }
 
-void
-_dbus_init_system_log (dbus_bool_t is_daemon)
-{
-  /* OutputDebugStringA doesn't need any special initialization, do nothing */
-}
-
-/**
- * Log a message to the system log file (e.g. syslog on Unix).
- *
- * @param severity a severity value
- * @param msg a printf-style format string
- */
-void
-_dbus_system_log (DBusSystemLogSeverity severity, const char *msg, ...)
-{
-  va_list args;
-
-  va_start (args, msg);
-
-  _dbus_system_logv (severity, msg, args);
-
-  va_end (args);
-}
-
-/**
- * Log a message to the system log file (e.g. syslog on Unix).
- *
- * @param severity a severity value
- * @param msg a printf-style format string
- * @param args arguments for the format string
- *
- * If the FATAL severity is given, this function will terminate the program
- * with an error code.
- */
-void
-_dbus_system_logv (DBusSystemLogSeverity severity, const char *msg, va_list args)
-{
-  char *s = "";
-  char buf[1024];
-  char format[1024];
-
-  switch(severity) 
-   {
-     case DBUS_SYSTEM_LOG_INFO: s = "info"; break;
-     case DBUS_SYSTEM_LOG_WARNING: s = "warning"; break;
-     case DBUS_SYSTEM_LOG_SECURITY: s = "security"; break;
-     case DBUS_SYSTEM_LOG_FATAL: s = "fatal"; break;
-   }
-   
-  snprintf(format, sizeof(format), "%s%s", s ,msg);
-  vsnprintf(buf, sizeof(buf), format, args);
-  OutputDebugStringA(buf);
-  
-  if (severity == DBUS_SYSTEM_LOG_FATAL)
-    exit (1);
-}
-
 /** Installs a signal handler
  *
  * @param sig the signal to handle
index 698e7be..7dac66d 100644 (file)
@@ -3634,5 +3634,44 @@ _dbus_restore_socket_errno (int saved_errno)
   _dbus_win_set_errno (saved_errno);
 }
 
+void
+_dbus_init_system_log (dbus_bool_t is_daemon)
+{
+  /* OutputDebugStringA doesn't need any special initialization, do nothing */
+}
+
+/**
+ * Log a message to the system log file (e.g. syslog on Unix).
+ *
+ * @param severity a severity value
+ * @param msg a printf-style format string
+ * @param args arguments for the format string
+ *
+ * If the FATAL severity is given, this function will terminate the program
+ * with an error code.
+ */
+void
+_dbus_system_logv (DBusSystemLogSeverity severity, const char *msg, va_list args)
+{
+  char *s = "";
+  char buf[1024];
+  char format[1024];
+
+  switch(severity)
+   {
+     case DBUS_SYSTEM_LOG_INFO: s = "info"; break;
+     case DBUS_SYSTEM_LOG_WARNING: s = "warning"; break;
+     case DBUS_SYSTEM_LOG_SECURITY: s = "security"; break;
+     case DBUS_SYSTEM_LOG_FATAL: s = "fatal"; break;
+   }
+
+  snprintf(format, sizeof(format), "%s%s", s ,msg);
+  vsnprintf(buf, sizeof(buf), format, args);
+  OutputDebugStringA(buf);
+
+  if (severity == DBUS_SYSTEM_LOG_FATAL)
+    exit (1);
+}
+
 /** @} end of sysdeps-win */
 /* tests in dbus-sysdeps-util.c */
index 8b986d5..23ffc86 100644 (file)
@@ -751,6 +751,24 @@ _dbus_strerror_from_errno (void)
   return _dbus_strerror (errno);
 }
 
+/**
+ * Log a message to the system log file (e.g. syslog on Unix).
+ *
+ * @param severity a severity value
+ * @param msg a printf-style format string
+ */
+void
+_dbus_system_log (DBusSystemLogSeverity severity, const char *msg, ...)
+{
+  va_list args;
+
+  va_start (args, msg);
+
+  _dbus_system_logv (severity, msg, args);
+
+  va_end (args);
+}
+
 /** @} end of sysdeps */
 
 /* tests in dbus-sysdeps-util.c */
index 3659dd4..fb4be88 100644 (file)
@@ -555,6 +555,7 @@ void _dbus_set_signal_handler (int               sig,
 dbus_bool_t _dbus_user_at_console (const char *username,
                                    DBusError  *error);
 
+DBUS_PRIVATE_EXPORT
 void _dbus_init_system_log (dbus_bool_t is_daemon);
 
 typedef enum {
@@ -564,7 +565,9 @@ typedef enum {
   DBUS_SYSTEM_LOG_FATAL
 } DBusSystemLogSeverity;
 
+DBUS_PRIVATE_EXPORT
 void _dbus_system_log (DBusSystemLogSeverity severity, const char *msg, ...) _DBUS_GNUC_PRINTF (2, 3);
+DBUS_PRIVATE_EXPORT
 void _dbus_system_logv (DBusSystemLogSeverity severity, const char *msg, va_list args);
 
 /* Define DBUS_VA_COPY() to do the right thing for copying va_list variables.