diff options
author | Ralf Habacker <ralf.habacker@freenet.de> | 2007-03-16 21:56:33 +0000 |
---|---|---|
committer | Ralf Habacker <ralf.habacker@freenet.de> | 2007-03-16 21:56:33 +0000 |
commit | 6e07b30faba52c772f011a0dee999662ec46e1cb (patch) | |
tree | 723dd5e352013e5a06f5fccdc9c2ddd9770df1b1 | |
parent | cd57ebe33b758755906d3823bbe3cef3ddd58f2d (diff) |
* dbus/dbus-sysdeps.h (_dbus_split_paths_and_append): new prototyp (_DBUS_PATH_SEPARATOR): new macro.
* dbus/dbus-sysdeps.c (_dbus_split_paths_and_append): merged from dbus/dbus-sysdeps-unix.c and dbus/dbus-sysdeps-win.c.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-unix.c | 120 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-win.c | 125 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.c | 122 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.h | 10 |
5 files changed, 147 insertions, 239 deletions
@@ -1,3 +1,12 @@ +2007-03-16 Ralf.Habacker <ralf.habacker@freenet.de> + + * dbus/dbus-sysdeps.h (_dbus_split_paths_and_append): + new prototyp + (_DBUS_PATH_SEPARATOR): new macro. + + * dbus/dbus-sysdeps.c (_dbus_split_paths_and_append): merged + from dbus/dbus-sysdeps-unix.c and dbus/dbus-sysdeps-win.c. + 2007-03-15 Ralf.Habacker <ralf.habacker@freenet.de> * bus/config-parser.c, bus/policy.c, diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index d6250bf9..7d6271ab 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -2695,120 +2695,6 @@ _dbus_read_local_machine_uuid (DBusGUID *machine_id, #define DBUS_UNIX_STANDARD_SESSION_SERVICEDIR "/dbus-1/services" -static dbus_bool_t -split_paths_and_append (DBusString *dirs, - const char *suffix, - DBusList **dir_list) -{ - /* split on colon (:) */ - int start; - int i; - int len; - char *cpath; - const DBusString file_suffix; - - start = 0; - i = 0; - - _dbus_string_init_const (&file_suffix, suffix); - - len = _dbus_string_get_length (dirs); - - while (_dbus_string_find (dirs, start, ":", &i)) - { - DBusString path; - - if (!_dbus_string_init (&path)) - goto oom; - - if (!_dbus_string_copy_len (dirs, - start, - i - start, - &path, - 0)) - { - _dbus_string_free (&path); - goto oom; - } - - _dbus_string_chop_white (&path); - - /* check for an empty path */ - if (_dbus_string_get_length (&path) == 0) - goto next; - - if (!_dbus_concat_dir_and_file (&path, - &file_suffix)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_string_copy_data(&path, &cpath)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_list_append (dir_list, cpath)) - { - _dbus_string_free (&path); - dbus_free (cpath); - goto oom; - } - - next: - _dbus_string_free (&path); - start = i + 1; - } - - if (start != len) - { - DBusString path; - - if (!_dbus_string_init (&path)) - goto oom; - - if (!_dbus_string_copy_len (dirs, - start, - len - start, - &path, - 0)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_concat_dir_and_file (&path, - &file_suffix)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_string_copy_data(&path, &cpath)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_list_append (dir_list, cpath)) - { - _dbus_string_free (&path); - dbus_free (cpath); - goto oom; - } - - _dbus_string_free (&path); - } - - return TRUE; - - oom: - _dbus_list_foreach (dir_list, (DBusForeachFunction)dbus_free, NULL); - _dbus_list_clear (dir_list); - return FALSE; -} /** * Returns the standard directories for a session bus to look for service @@ -2884,9 +2770,9 @@ _dbus_get_standard_session_servicedirs (DBusList **dirs) goto oom; } - if (!split_paths_and_append (&servicedir_path, - DBUS_UNIX_STANDARD_SESSION_SERVICEDIR, - dirs)) + if (!_dbus_split_paths_and_append (&servicedir_path, + DBUS_UNIX_STANDARD_SESSION_SERVICEDIR, + dirs)) goto oom; _dbus_string_free (&servicedir_path); diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c index 64c2f99d..b86c977b 100644 --- a/dbus/dbus-sysdeps-win.c +++ b/dbus/dbus-sysdeps-win.c @@ -5048,125 +5048,6 @@ _dbus_make_file_world_readable(const DBusString *filename, #define DBUS_STANDARD_SESSION_SERVICEDIR "/dbus-1/services" -// @TODO: this function is duplicated from dbus-sysdeps-unix.c -// and differs only in the path separator, may be we should -// use a dbus path separator variable - -#define _dbus_path_seperator ";" - -static dbus_bool_t -split_paths_and_append (DBusString *dirs, - const char *suffix, - DBusList **dir_list) -{ - int start; - int i; - int len; - char *cpath; - const DBusString file_suffix; - - start = 0; - i = 0; - - _dbus_string_init_const (&file_suffix, suffix); - - len = _dbus_string_get_length (dirs); - - while (_dbus_string_find (dirs, start, _dbus_path_seperator, &i)) - { - DBusString path; - - if (!_dbus_string_init (&path)) - goto oom; - - if (!_dbus_string_copy_len (dirs, - start, - i - start, - &path, - 0)) - { - _dbus_string_free (&path); - goto oom; - } - - _dbus_string_chop_white (&path); - - /* check for an empty path */ - if (_dbus_string_get_length (&path) == 0) - goto next; - - if (!_dbus_concat_dir_and_file (&path, - &file_suffix)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_string_copy_data(&path, &cpath)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_list_append (dir_list, cpath)) - { - _dbus_string_free (&path); - dbus_free (cpath); - goto oom; - } - - next: - _dbus_string_free (&path); - start = i + 1; - } - - if (start != len) - { - DBusString path; - - if (!_dbus_string_init (&path)) - goto oom; - - if (!_dbus_string_copy_len (dirs, - start, - len - start, - &path, - 0)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_concat_dir_and_file (&path, - &file_suffix)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_string_copy_data(&path, &cpath)) - { - _dbus_string_free (&path); - goto oom; - } - - if (!_dbus_list_append (dir_list, cpath)) - { - _dbus_string_free (&path); - dbus_free (cpath); - goto oom; - } - - _dbus_string_free (&path); - } - - return TRUE; - - oom: - _dbus_list_foreach (dir_list, (DBusForeachFunction)dbus_free, NULL); - _dbus_list_clear (dir_list); - return FALSE; -} /** * Returns the standard directories for a session bus to look for service @@ -5193,7 +5074,7 @@ _dbus_get_standard_session_servicedirs (DBusList **dirs) if (!_dbus_string_init (&servicedir_path)) return FALSE; - if (!_dbus_string_append (&servicedir_path, DBUS_DATADIR";")) + if (!_dbus_string_append (&servicedir_path, DBUS_DATADIR _DBUS_PATH_SEPARATOR)) goto oom; common_progs = _dbus_getenv ("CommonProgramFiles"); @@ -5203,11 +5084,11 @@ _dbus_get_standard_session_servicedirs (DBusList **dirs) if (!_dbus_string_append (&servicedir_path, common_progs)) goto oom; - if (!_dbus_string_append (&servicedir_path, ";")) + if (!_dbus_string_append (&servicedir_path, _DBUS_PATH_SEPARATOR)) goto oom; } - if (!split_paths_and_append (&servicedir_path, + if (!_dbus_split_paths_and_append (&servicedir_path, DBUS_STANDARD_SESSION_SERVICEDIR, dirs)) goto oom; diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index 33179e9d..6074063c 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -27,6 +27,7 @@ #include "dbus-threads.h" #include "dbus-protocol.h" #include "dbus-string.h" +#include "dbus-list.h" /* NOTE: If you include any unix/windows-specific headers here, you are probably doing something * wrong and should be putting some code in dbus-sysdeps-unix.c or dbus-sysdeps-win.c. @@ -231,6 +232,127 @@ _dbus_pipe_invalidate (DBusPipe *pipe) pipe->fd_or_handle = -1; } +/** + * split pathes into a list of char strings + * @param dirs string with pathes + * @param suffix string concated to each path in dirs + * @param dir_list contains a list of splitted pathes + * return #TRUE is pathes could be splittes,#FALSE in oom case + */ +dbus_bool_t +_dbus_split_paths_and_append (DBusString *dirs, + const char *suffix, + DBusList **dir_list) +{ + int start; + int i; + int len; + char *cpath; + const DBusString file_suffix; + + start = 0; + i = 0; + + _dbus_string_init_const (&file_suffix, suffix); + + len = _dbus_string_get_length (dirs); + + while (_dbus_string_find (dirs, start, _DBUS_PATH_SEPARATOR, &i)) + { + DBusString path; + + if (!_dbus_string_init (&path)) + goto oom; + + if (!_dbus_string_copy_len (dirs, + start, + i - start, + &path, + 0)) + { + _dbus_string_free (&path); + goto oom; + } + + _dbus_string_chop_white (&path); + + /* check for an empty path */ + if (_dbus_string_get_length (&path) == 0) + goto next; + + if (!_dbus_concat_dir_and_file (&path, + &file_suffix)) + { + _dbus_string_free (&path); + goto oom; + } + + if (!_dbus_string_copy_data(&path, &cpath)) + { + _dbus_string_free (&path); + goto oom; + } + + if (!_dbus_list_append (dir_list, cpath)) + { + _dbus_string_free (&path); + dbus_free (cpath); + goto oom; + } + + next: + _dbus_string_free (&path); + start = i + 1; + } + + if (start != len) + { + DBusString path; + + if (!_dbus_string_init (&path)) + goto oom; + + if (!_dbus_string_copy_len (dirs, + start, + len - start, + &path, + 0)) + { + _dbus_string_free (&path); + goto oom; + } + + if (!_dbus_concat_dir_and_file (&path, + &file_suffix)) + { + _dbus_string_free (&path); + goto oom; + } + + if (!_dbus_string_copy_data(&path, &cpath)) + { + _dbus_string_free (&path); + goto oom; + } + + if (!_dbus_list_append (dir_list, cpath)) + { + _dbus_string_free (&path); + dbus_free (cpath); + goto oom; + } + + _dbus_string_free (&path); + } + + return TRUE; + + oom: + _dbus_list_foreach (dir_list, (DBusForeachFunction)dbus_free, NULL); + _dbus_list_clear (dir_list); + return FALSE; +} + /** @} */ /** diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h index 4bdf2cc4..c89d35f0 100644 --- a/dbus/dbus-sysdeps.h +++ b/dbus/dbus-sysdeps.h @@ -41,6 +41,12 @@ DBUS_BEGIN_DECLS +#ifdef DBUS_WIN +#define _DBUS_PATH_SEPARATOR ";" +#else +#define _DBUS_PATH_SEPARATOR ":" +#endif + /* Forward declarations */ /** An opaque string type */ @@ -462,6 +468,10 @@ dbus_bool_t _dbus_read_local_machine_uuid (DBusGUID *machine_id, */ dbus_bool_t _dbus_threads_init_platform_specific (void); +dbus_bool_t _dbus_split_paths_and_append (DBusString *dirs, + const char *suffix, + DBusList **dir_list); + /** @} */ DBUS_END_DECLS |