mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-05 15:47:59 +02:00
* 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.
This commit is contained in:
parent
cd57ebe33b
commit
6e07b30fab
5 changed files with 147 additions and 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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue