summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFridrich Štrba <fridrich.strba@bluewin.ch>2010-04-21 10:42:06 +0200
committerRalf Habacker <ralf.habacker@freenet.de>2010-04-21 12:30:52 +0200
commited79e030ca4a3d87803b5f4789941fd63fb84444 (patch)
tree786579d635be63fb3631fe0bed3c2177071db514
parent14cc116254abfb7e49069f143322f2869eea5a83 (diff)
downloaddbus-ed79e030ca4a3d87803b5f4789941fd63fb84444.tar.gz
Patch relocating "exec" variable and position of service files
-rw-r--r--bus/activation.c10
-rw-r--r--configure.in8
-rw-r--r--dbus/dbus-sysdeps-unix.c14
-rw-r--r--dbus/dbus-sysdeps-win.c72
-rw-r--r--dbus/dbus-sysdeps.h10
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