diff options
author | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2010-04-21 10:42:06 +0200 |
---|---|---|
committer | Ralf Habacker <ralf.habacker@freenet.de> | 2010-04-21 12:30:52 +0200 |
commit | ed79e030ca4a3d87803b5f4789941fd63fb84444 (patch) | |
tree | 786579d635be63fb3631fe0bed3c2177071db514 | |
parent | 14cc116254abfb7e49069f143322f2869eea5a83 (diff) | |
download | dbus-ed79e030ca4a3d87803b5f4789941fd63fb84444.tar.gz |
Patch relocating "exec" variable and position of service files
-rw-r--r-- | bus/activation.c | 10 | ||||
-rw-r--r-- | configure.in | 8 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-unix.c | 14 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-win.c | 72 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.h | 10 |
5 files changed, 107 insertions, 7 deletions
diff --git a/bus/activation.c b/bus/activation.c index 54296c1d..9d454c76 100644 --- a/bus/activation.c +++ b/bus/activation.c @@ -255,7 +255,7 @@ update_desktop_file_entry (BusActivation *activation, BusDesktopFile *desktop_file, DBusError *error) { - char *name, *exec, *user; + char *name, *exec, *user, *exec_tmp; BusActivationEntry *entry; DBusStat stat_buf; DBusString file_path; @@ -266,6 +266,7 @@ update_desktop_file_entry (BusActivation *activation, name = NULL; exec = NULL; user = NULL; + exec_tmp = NULL; entry = NULL; dbus_error_init (&tmp_error); @@ -300,7 +301,7 @@ update_desktop_file_entry (BusActivation *activation, if (!bus_desktop_file_get_string (desktop_file, DBUS_SERVICE_SECTION, DBUS_SERVICE_EXEC, - &exec, + &exec_tmp, error)) goto failed; @@ -329,6 +330,9 @@ update_desktop_file_entry (BusActivation *activation, entry = _dbus_hash_table_lookup_string (s_dir->entries, _dbus_string_get_const_data (filename)); + + exec = strdup (_dbus_replace_install_prefix (exec_tmp)); + if (entry == NULL) /* New file */ { /* FIXME we need a better-defined algorithm for which service file to @@ -417,7 +421,7 @@ update_desktop_file_entry (BusActivation *activation, failed: dbus_free (name); - dbus_free (exec); + dbus_free (exec_tmp); dbus_free (user); _dbus_string_free (&file_path); diff --git a/configure.in b/configure.in index 74f6f5e7..4bc50e7a 100644 --- a/configure.in +++ b/configure.in @@ -1335,6 +1335,7 @@ AC_MSG_RESULT(yes) #### find the actual value for $prefix that we'll end up with ## (I know this is broken and should be done in the Makefile, but ## that's a major pain and almost nobody actually seems to care) +AS_AC_EXPAND(EXPANDED_PREFIX, "$prefix") AS_AC_EXPAND(EXPANDED_LOCALSTATEDIR, "$localstatedir") AS_AC_EXPAND(EXPANDED_SYSCONFDIR, "$sysconfdir") AS_AC_EXPAND(EXPANDED_BINDIR, "$bindir") @@ -1430,6 +1431,11 @@ fi AC_SUBST(DBUS_USER) AC_DEFINE_UNQUOTED(DBUS_USER,"$DBUS_USER", [User for running the system BUS daemon]) +#### Prefix to install into +DBUS_PREFIX=$EXPANDED_PREFIX +AC_SUBST(DBUS_PREFIX) +AC_DEFINE_UNQUOTED(DBUS_PREFIX,"$DBUS_PREFIX", [Prefix for installing DBUS]) + #### Direcotry to install data files into DBUS_DATADIR=$EXPANDED_DATADIR AC_SUBST(DBUS_DATADIR) @@ -1581,7 +1587,7 @@ echo " D-Bus $VERSION ============== - prefix: ${prefix} + prefix: ${EXPANDED_PREFIX} exec_prefix: ${exec_prefix} libdir: ${EXPANDED_LIBDIR} libexecdir: ${EXPANDED_LIBEXECDIR} diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index fc27d512..30cf0901 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -3583,4 +3583,18 @@ _dbus_socket_can_pass_unix_fd(int fd) { #endif } + +/* + * replaces the term DBUS_PREFIX in configure_time_path by the + * current dbus installation directory. On unix this function is a noop + * + * @param configure_time_path + * @return real path + */ +const char * +_dbus_replace_install_prefix (const char *configure_time_path) +{ + return configure_time_path; +} + /* tests in dbus-sysdeps-util.c */ diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c index 16c6f696..347cf84c 100644 --- a/dbus/dbus-sysdeps-win.c +++ b/dbus/dbus-sysdeps-win.c @@ -2060,6 +2060,54 @@ _dbus_delete_file (const DBusString *filename, return TRUE; } +/* Forward declaration of prototype used in next function */ +static dbus_bool_t +_dbus_get_install_root(char *prefix, int len); + +/* + * replaces the term DBUS_PREFIX in configure_time_path by the + * current dbus installation directory. On unix this function is a noop + * + * @param configure_time_path + * @return real path + */ +const char * +_dbus_replace_install_prefix (const char *configure_time_path) +{ + static char retval[1000]; +#ifndef DBUS_PREFIX + strcpy (retval, configure_time_path); +#else + static char runtime_prefix[1000]; + int len = 1000; + int i; + + if (!configure_time_path) + return NULL; + + if ((!_dbus_get_install_root(runtime_prefix, len) || + strncmp (configure_time_path, DBUS_PREFIX "/", + strlen (DBUS_PREFIX) + 1))) { + strcat (retval, configure_time_path); + return retval; + } + + strcpy (retval, runtime_prefix); + strcat (retval, configure_time_path + strlen (DBUS_PREFIX) + 1); + + /* Somehow, in some situations, backslashes get collapsed in the string. + * Since windows C library accepts both forward and backslashes as + * path separators, convert all backslashes to forward slashes. + */ + + for(i = 0; retval[i] != '\0'; i++) { + if(retval[i] == '\\') + retval[i] = '/'; + } +#endif + return retval; +} + #if !defined (DBUS_DISABLE_ASSERT) || defined(DBUS_BUILD_TESTS) #if defined(_MSC_VER) || defined(DBUS_WINCE) @@ -2683,6 +2731,21 @@ _dbus_make_file_world_readable(const DBusString *filename, return TRUE; } +/** + * return the relocated DATADIR + * + * @returns relocated DATADIR static string + */ + +static const char * +_dbus_windows_get_datadir (void) +{ + return _dbus_replace_install_prefix(DBUS_DATADIR); +} + +#undef DBUS_DATADIR +#define DBUS_DATADIR _dbus_windows_get_datadir () + #define DBUS_STANDARD_SESSION_SERVICEDIR "/dbus-1/services" #define DBUS_STANDARD_SYSTEM_SERVICEDIR "/dbus-1/system-services" @@ -2697,7 +2760,7 @@ _dbus_make_file_world_readable(const DBusString *filename, * * and * - * DBUS_DATADIR + * relocated DBUS_DATADIR * * @param dirs the directory list we are returning * @returns #FALSE on OOM @@ -2727,8 +2790,11 @@ _dbus_get_standard_session_servicedirs (DBusList **dirs) } } #else - if (!_dbus_string_append (&servicedir_path, DBUS_DATADIR _DBUS_PATH_SEPARATOR)) - goto oom; + if (!_dbus_string_append (&servicedir_path, DBUS_DATADIR)) + goto oom; + + if (!_dbus_string_append (&servicedir_path, _DBUS_PATH_SEPARATOR)) + goto oom; #endif common_progs = _dbus_getenv ("CommonProgramFiles"); diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h index 4dcda1e7..5881ab7b 100644 --- a/dbus/dbus-sysdeps.h +++ b/dbus/dbus-sysdeps.h @@ -507,6 +507,16 @@ dbus_bool_t _dbus_change_to_daemon_user (const char *user, void _dbus_flush_caches (void); +/* + * replaces the term DBUS_PREFIX in configure_time_path by the + * current dbus installation directory. On unix this function is a noop + * + * @param configure_time_path + * @return real path + */ +const char * +_dbus_replace_install_prefix (const char *configure_time_path); + /** @} */ DBUS_END_DECLS |