]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
Bug 28460 - Refactored dbus configuration access.
authorRalf Habacker <ralf.habacker@freenet.de>
Mon, 14 Jun 2010 16:27:04 +0000 (18:27 +0200)
committerRalf Habacker <ralf.habacker@freenet.de>
Mon, 14 Jun 2010 16:27:04 +0000 (18:27 +0200)
Libdbus uses several config variables. On unix these settings are read from
environment variables by using _dbus_getenv.

On other platforms like wince there are no environment variables available and
_dbus_getenv needs an emulation for those plattforms (see
dbus/dbus-sysdeps-wince-glue.c)

To cleanup this emulation the appended patch adds a config api by adding
_dbus_config_... functions.

Also having all client config related functions listed in one header file
provides a good overview about which config attributes  are available.

The default implementation retrieves the config values from environment
variables. For other os this could be easily extended or replaced by.

12 files changed:
cmake/dbus/CMakeLists.txt
dbus/Makefile.am
dbus/dbus-bus.c
dbus/dbus-config.c [new file with mode: 0644]
dbus/dbus-config.h [new file with mode: 0644]
dbus/dbus-internals.c
dbus/dbus-memory.c
dbus/dbus-sysdeps-unix.c
dbus/dbus-sysdeps-util-unix.c
dbus/dbus-sysdeps-win.c
dbus/dbus-sysdeps.c
dbus/dbus-test.c

index 52cbf906227cf5b7981bb80b2d8e69a757abe358..08ea3b06a93da80201b5a9f1da57a93a1205c235 100644 (file)
@@ -121,6 +121,7 @@ endif(UNIX)
 ### daemon or test programs (all symbols in here should 
 ### be underscore-prefixed)
 set (DBUS_SHARED_SOURCES
+       ${DBUS_DIR}/dbus-config.c
        ${DBUS_DIR}/dbus-dataslot.c
        ${DBUS_DIR}/dbus-file.c
        ${DBUS_DIR}/dbus-hash.c
@@ -155,6 +156,7 @@ set (DBUS_SHARED_HEADERS
 ### to be unless they move to DBUS_SHARED_SOURCES later)
 set (DBUS_UTIL_SOURCES
        ${DBUS_DIR}/dbus-auth-util.c
+       ${DBUS_DIR}/dbus-config.h
        ${DBUS_DIR}/dbus-credentials-util.c
        ${DBUS_DIR}/dbus-mainloop.c
        ${DBUS_DIR}/dbus-marshal-byteswap-util.c
index 906b4c70230c10005e2e3450a9d3d93e241409e4..41eed0f127bf381ee6449c46e12a3d9b5a0a0480 100644 (file)
@@ -184,6 +184,8 @@ DBUS_LIB_SOURCES=                           \
 ### daemon or test programs (all symbols in here should 
 ### be underscore-prefixed)
 DBUS_SHARED_SOURCES=                           \
+       dbus-config.c                           \
+       dbus-config.h                           \
        dbus-dataslot.c                         \
        dbus-dataslot.h                         \
        dbus-file.c                 \
index 92ec20ed4375ef6a67438ac32d8bb0ff56f1ffcd..d160a2daa6535387ff0c41a876f559c1d98b34c6 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 #include "dbus-bus.h"
+#include "dbus-config.h"
 #include "dbus-protocol.h"
 #include "dbus-internals.h"
 #include "dbus-message.h"
@@ -278,7 +279,7 @@ init_connections_unlocked (void)
 
       if (bus_connection_addresses[DBUS_BUS_STARTER] != NULL)
         {
-          s = _dbus_getenv ("DBUS_STARTER_BUS_TYPE");
+          s = _dbus_config_starter_bus_type();
               
           if (s != NULL)
             {
diff --git a/dbus/dbus-config.c b/dbus/dbus-config.c
new file mode 100644 (file)
index 0000000..e73288c
--- /dev/null
@@ -0,0 +1,139 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/* dbus-config.c client config api implementation
+ *
+ * Copyright (C) 2010  Ralf Habacker <ralf.habacker@freenet.de>
+ *
+ * Licensed under the Academic Free License version 2.1
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#include "dbus-config.h"
+#include "dbus-sysdeps.h"
+
+char *
+_dbus_config_block_on_abort ()
+{
+  return _dbus_getenv ("DBUS_BLOCK_ON_ABORT");
+}
+
+char *
+_dbus_config_common_program_files()
+{
+  return _dbus_getenv ("CommonProgramFiles");
+}
+
+char *
+_dbus_config_datadir ()
+{
+  return _dbus_getenv ("DBUS_DATADIR");
+}
+
+char *
+_dbus_config_debug_output ()
+{
+  return _dbus_getenv ("DBUS_DEBUG_OUTPUT");
+}
+
+char *
+_dbus_config_disable_mem_pools()
+{ 
+  return _dbus_getenv ("DBUS_DISABLE_MEM_POOLS");
+}
+
+char *
+_dbus_config_homedrive ()
+{
+  return _dbus_getenv("HOMEDRIVE");
+}
+
+char *
+_dbus_config_homepath ()
+{
+  return _dbus_getenv("HOMEPATH");
+}
+
+char *
+_dbus_config_fatal_warnings ()
+{
+  return _dbus_getenv ("DBUS_FATAL_WARNINGS");
+}        
+
+char *
+_dbus_config_malloc_fail_nth ()
+{ 
+  return _dbus_getenv ("DBUS_MALLOC_FAIL_NTH");
+}
+
+char *
+_dbus_config_malloc_fail_greater_than ()
+{ 
+  return _dbus_getenv ("DBUS_MALLOC_FAIL_GREATER_THAN");
+}
+
+char *
+_dbus_config_malloc_guards ()
+{ 
+  return _dbus_getenv ("DBUS_MALLOC_GUARDS");
+}
+
+char *
+_dbus_config_malloc_backtraces ()
+{
+  return _dbus_getenv ("DBUS_MALLOC_BACKTRACES");
+}
+
+char *
+_dbus_config_starter_bus_type ()
+{
+  return _dbus_getenv ("DBUS_STARTER_BUS_TYPE");
+}
+
+char *
+_dbus_config_test_malloc_failures ()
+{
+  return _dbus_getenv ("DBUS_TEST_MALLOC_FAILURES");
+}
+
+char *
+_dbus_config_test_homedir ()
+{
+  return _dbus_getenv ("DBUS_TEST_HOMEDIR");
+}
+
+char *
+_dbus_config_test_data ()
+{
+  return _dbus_getenv ("DBUS_TEST_DATA");
+}
+
+char *
+_dbus_config_xdg_data_home ()
+{
+  return _dbus_getenv ("XDG_DATA_HOME");
+}
+
+char *
+_dbus_config_xdg_data_dirs ()
+{
+  return _dbus_getenv ("XDG_DATA_DIRS");
+}
+
+char *
+_dbus_config_verbose ()
+{
+  return _dbus_getenv ("DBUS_VERBOSE");
+}
diff --git a/dbus/dbus-config.h b/dbus/dbus-config.h
new file mode 100644 (file)
index 0000000..fc825ac
--- /dev/null
@@ -0,0 +1,70 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/* dbus-config.h client config api header
+ *
+ * Copyright (C) 2010  Ralf Habacker <ralf.habacker@freenet.de>
+ *
+ * Licensed under the Academic Free License version 2.1
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef DBUS_CONFIG_H
+#define DBUS_CONFIG_H
+
+// session bus address 
+// system bus address 
+// activation bus address 
+
+char *
+_dbus_config_block_on_abort ();
+char *
+_dbus_config_common_program_files ();
+char *
+_dbus_config_datadir ();
+char *
+_dbus_config_debug_output ();
+char *
+_dbus_config_disable_mem_pools ();
+char *
+_dbus_config_fatal_warnings ();
+char *
+_dbus_config_homedrive ();
+char *
+_dbus_config_homepath ();
+char *
+_dbus_config_malloc_backtraces ();
+char *
+_dbus_config_malloc_fail_nth ();
+char *
+_dbus_config_malloc_fail_greater_than ();
+char *
+_dbus_config_malloc_guards ();
+char *
+_dbus_config_starter_bus_type ();
+char *
+_dbus_config_test_malloc_failures ();
+char *
+_dbus_config_test_homedir ();
+char *
+_dbus_config_test_data ();
+char *
+_dbus_config_verbose ();
+char *
+_dbus_config_xdg_data_home ();
+char *
+_dbus_config_xdg_data_dirs ();
+
+#endif
index 1ab6731a7b2da8040d5628667bacb1ac008141f3..5edc92c4f29600878f7e60133b3f31547dc9deb5 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 #include <config.h>
+#include "dbus-config.h"
 #include "dbus-internals.h"
 #include "dbus-protocol.h"
 #include "dbus-marshal-basic.h"
@@ -207,7 +208,7 @@ init_warnings(void)
   if (!warn_initted)
     {
       const char *s;
-      s = _dbus_getenv ("DBUS_FATAL_WARNINGS");
+      s = _dbus_config_fatal_warnings ();
       if (s && *s)
         {
           if (*s == '0')
@@ -313,7 +314,7 @@ _dbus_verbose_init (void)
 {
   if (!verbose_initted)
     {
-      const char *p = _dbus_getenv ("DBUS_VERBOSE");
+      const char *p = _dbus_config_verbose ();
       verbose = p != NULL && *p == '1';
       verbose_initted = TRUE;
 #ifdef DBUS_USE_OUTPUT_DEBUG_STRING
@@ -1003,7 +1004,7 @@ _dbus_test_oom_handling (const char             *description,
   _dbus_verbose ("\n=================\n%s: about %d mallocs total\n=================\n",
                  description, approx_mallocs);
 
-  setting = _dbus_getenv ("DBUS_TEST_MALLOC_FAILURES");
+  setting = _dbus_config_test_malloc_failures ();
   if (setting != NULL)
     {
       DBusString str;
index a37759c0f10144a9b8e76ea612b480b6a3e76084..57320abaf190c9198003743e600be7f367933a8b 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 #include <config.h>
+#include "dbus-config.h"
 #include "dbus-memory.h"
 #include "dbus-internals.h"
 #include "dbus-sysdeps.h"
@@ -128,33 +129,33 @@ _dbus_initialize_malloc_debug (void)
     {
       debug_initialized = TRUE;
       
-      if (_dbus_getenv ("DBUS_MALLOC_FAIL_NTH") != NULL)
+      if (_dbus_config_malloc_fail_nth () != NULL)
        {
-         fail_nth = atoi (_dbus_getenv ("DBUS_MALLOC_FAIL_NTH"));
+         fail_nth = atoi (_dbus_config_malloc_fail_nth ());
           fail_alloc_counter = fail_nth;
           _dbus_verbose ("Will fail malloc every %d times\n", fail_nth);
        }
       
-      if (_dbus_getenv ("DBUS_MALLOC_FAIL_GREATER_THAN") != NULL)
+      if (_dbus_config_malloc_fail_greater_than () != NULL)
         {
-          fail_size = atoi (_dbus_getenv ("DBUS_MALLOC_FAIL_GREATER_THAN"));
+          fail_size = atoi (_dbus_config_malloc_fail_greater_than ());
           _dbus_verbose ("Will fail mallocs over %ld bytes\n",
                          (long) fail_size);
         }
 
-      if (_dbus_getenv ("DBUS_MALLOC_GUARDS") != NULL)
+      if (_dbus_config_malloc_guards () != NULL)
         {
           guards = TRUE;
           _dbus_verbose ("Will use malloc guards\n");
         }
 
-      if (_dbus_getenv ("DBUS_DISABLE_MEM_POOLS") != NULL)
+      if (_dbus_config_disable_mem_pools () != NULL)
         {
           disable_mem_pools = TRUE;
           _dbus_verbose ("Will disable memory pools\n");
         }
 
-      if (_dbus_getenv ("DBUS_MALLOC_BACKTRACES") != NULL)
+      if (_dbus_config_malloc_backtraces () != NULL)
         {
           backtrace_on_fail_alloc = TRUE;
           _dbus_verbose ("Will backtrace on failing a malloc\n");
index ebe9bdd8d53b60181e20e05e236cb75a9f50edb1..c9b0081fd4e23f9bf65ad5f2ad6269ff1c0699da 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#include "dbus-config.h"
 #include "dbus-internals.h"
 #include "dbus-sysdeps.h"
 #include "dbus-sysdeps-unix.h"
@@ -3255,8 +3256,8 @@ _dbus_get_standard_session_servicedirs (DBusList **dirs)
   if (!_dbus_string_init (&servicedir_path))
     return FALSE;
 
-  xdg_data_home = _dbus_getenv ("XDG_DATA_HOME");
-  xdg_data_dirs = _dbus_getenv ("XDG_DATA_DIRS");
+  xdg_data_home = _dbus_config_xdg_data_home ();
+  xdg_data_dirs = _dbus_config_xdg_data_dirs ();
 
   if (xdg_data_dirs != NULL)
     {
@@ -3343,7 +3344,7 @@ _dbus_get_standard_system_servicedirs (DBusList **dirs)
   if (!_dbus_string_init (&servicedir_path))
     return FALSE;
 
-  xdg_data_dirs = _dbus_getenv ("XDG_DATA_DIRS");
+  xdg_data_dirs = _dbus_config_xdg_data_dirs ();
 
   if (xdg_data_dirs != NULL)
     {
@@ -3457,7 +3458,7 @@ _dbus_append_keyring_directory_for_credentials (DBusString      *directory,
   {
     const char *override;
     
-    override = _dbus_getenv ("DBUS_TEST_HOMEDIR");
+    override = _dbus_config_test_homedir ();
     if (override != NULL && *override != '\0')
       {
         _dbus_string_set_length (&homedir, 0);
index 5904950de69c6441a8a5597637b0770aa47db4a2..a8891b452c55f66f67242ce1a8581265f9ef009a 100644 (file)
@@ -115,7 +115,7 @@ _dbus_become_daemon (const DBusString *pidfile,
           dup2 (dev_null_fd, 0);
           dup2 (dev_null_fd, 1);
           
-          s = _dbus_getenv ("DBUS_DEBUG_OUTPUT");
+          s = _dbus_config_debug_output ();
           if (s == NULL || *s == '\0')
             dup2 (dev_null_fd, 2);
           else
index aad342ca6ed561c2f38ca3ef326445c75f03989e..ec7fd12ea6f3d454bfad5847932c9c118db4836c 100644 (file)
@@ -36,6 +36,7 @@
 #endif
 #endif
 
+#include "dbus-config.h"
 #include "dbus-internals.h"
 #include "dbus-sysdeps.h"
 #include "dbus-threads.h"
@@ -2802,7 +2803,7 @@ _dbus_get_standard_session_servicedirs (DBusList **dirs)
 #ifdef DBUS_WINCE
   {
     /* On Windows CE, we adjust datadir dynamically to installation location.  */
-    const char *data_dir = _dbus_getenv ("DBUS_DATADIR");
+    const char *data_dir = _dbus_config_datadir ();
 
     if (data_dir != NULL)
       {
@@ -3102,13 +3103,13 @@ _dbus_append_keyring_directory_for_credentials (DBusString      *directory,
   if (!_dbus_string_init (&homedir))
     return FALSE;
 
-  homedrive = _dbus_getenv("HOMEDRIVE");
+  homedrive = _dbus_config_homedrive ();
   if (homedrive != NULL && *homedrive != '\0')
     {
       _dbus_string_append(&homedir,homedrive);
     }
 
-  homepath = _dbus_getenv("HOMEPATH");
+  homepath = _dbus_config_homepath ();
   if (homepath != NULL && *homepath != '\0')
     {
       _dbus_string_append(&homedir,homepath);
@@ -3118,7 +3119,7 @@ _dbus_append_keyring_directory_for_credentials (DBusString      *directory,
   {
     const char *override;
     
-    override = _dbus_getenv ("DBUS_TEST_HOMEDIR");
+    override = _dbus_config_test_homedir ();
     if (override != NULL && *override != '\0')
       {
         _dbus_string_set_length (&homedir, 0);
index bab516dea24eaa20771d7051bd20185ce53c6943..ea3a95664d645ff33f95b3efc382e4d71c236d97 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include <config.h>
+#include "dbus-config.h"
 #include "dbus-internals.h"
 #include "dbus-sysdeps.h"
 #include "dbus-threads.h"
@@ -83,7 +84,7 @@ _dbus_abort (void)
   
   _dbus_print_backtrace ();
   
-  s = _dbus_getenv ("DBUS_BLOCK_ON_ABORT");
+  s = _dbus_config_block_on_abort ();
   if (s && *s)
     {
       /* don't use _dbus_warn here since it can _dbus_abort() */
index 99becb0e4742718e0e1fbe344c1e49128cad5936..b8644de4ea60e0770e2054f327d048c1aab0e3e5 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 #include <config.h>
+#include "dbus-config.h"
 #include "dbus-test.h"
 #include "dbus-sysdeps.h"
 #include "dbus-internals.h"
@@ -103,7 +104,7 @@ dbus_internal_do_not_use_run_tests (const char *test_data_dir, const char *speci
     die ("debug threads init");
   
   if (test_data_dir == NULL)
-    test_data_dir = _dbus_getenv ("DBUS_TEST_DATA");
+    test_data_dir = _dbus_config_test_data ();
 
   if (test_data_dir != NULL)
     printf ("Test data in %s\n", test_data_dir);