summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalf Habacker <ralf.habacker@freenet.de>2010-06-14 18:27:04 +0200
committerRalf Habacker <ralf.habacker@freenet.de>2010-06-14 18:27:04 +0200
commit6f9077ee870ad02119facf83d1293301b4535c3b (patch)
treed66fafdb3c68af7501efcefdf4f777ddd6eac45c
parent9280395330c833dd98d0811d31349c26a84b2f6a (diff)
Bug 28460 - Refactored dbus configuration access.
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.
-rw-r--r--cmake/dbus/CMakeLists.txt2
-rw-r--r--dbus/Makefile.am2
-rw-r--r--dbus/dbus-bus.c3
-rw-r--r--dbus/dbus-config.c139
-rw-r--r--dbus/dbus-config.h70
-rw-r--r--dbus/dbus-internals.c7
-rw-r--r--dbus/dbus-memory.c15
-rw-r--r--dbus/dbus-sysdeps-unix.c9
-rw-r--r--dbus/dbus-sysdeps-util-unix.c2
-rw-r--r--dbus/dbus-sysdeps-win.c9
-rw-r--r--dbus/dbus-sysdeps.c3
-rw-r--r--dbus/dbus-test.c3
12 files changed, 242 insertions, 22 deletions
diff --git a/cmake/dbus/CMakeLists.txt b/cmake/dbus/CMakeLists.txt
index 52cbf906..08ea3b06 100644
--- a/cmake/dbus/CMakeLists.txt
+++ b/cmake/dbus/CMakeLists.txt
@@ -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
diff --git a/dbus/Makefile.am b/dbus/Makefile.am
index 906b4c70..41eed0f1 100644
--- a/dbus/Makefile.am
+++ b/dbus/Makefile.am
@@ -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 \
diff --git a/dbus/dbus-bus.c b/dbus/dbus-bus.c
index 92ec20ed..d160a2da 100644
--- a/dbus/dbus-bus.c
+++ b/dbus/dbus-bus.c
@@ -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
index 00000000..e73288c3
--- /dev/null
+++ b/dbus/dbus-config.c
@@ -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
index 00000000..fc825ac6
--- /dev/null
+++ b/dbus/dbus-config.h
@@ -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
diff --git a/dbus/dbus-internals.c b/dbus/dbus-internals.c
index 1ab6731a..5edc92c4 100644
--- a/dbus/dbus-internals.c
+++ b/dbus/dbus-internals.c
@@ -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;
diff --git a/dbus/dbus-memory.c b/dbus/dbus-memory.c
index a37759c0..57320aba 100644
--- a/dbus/dbus-memory.c
+++ b/dbus/dbus-memory.c
@@ -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");
diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
index ebe9bdd8..c9b0081f 100644
--- a/dbus/dbus-sysdeps-unix.c
+++ b/dbus/dbus-sysdeps-unix.c
@@ -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);
diff --git a/dbus/dbus-sysdeps-util-unix.c b/dbus/dbus-sysdeps-util-unix.c
index 5904950d..a8891b45 100644
--- a/dbus/dbus-sysdeps-util-unix.c
+++ b/dbus/dbus-sysdeps-util-unix.c
@@ -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
diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c
index aad342ca..ec7fd12e 100644
--- a/dbus/dbus-sysdeps-win.c
+++ b/dbus/dbus-sysdeps-win.c
@@ -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);
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c
index bab516de..ea3a9566 100644
--- a/dbus/dbus-sysdeps.c
+++ b/dbus/dbus-sysdeps.c
@@ -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() */
diff --git a/dbus/dbus-test.c b/dbus/dbus-test.c
index 99becb0e..b8644de4 100644
--- a/dbus/dbus-test.c
+++ b/dbus/dbus-test.c
@@ -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);