From 10fae2352742d6dfd2ab27545048939f10f4922a Mon Sep 17 00:00:00 2001 From: Ralf Habacker Date: Wed, 21 Dec 2011 21:24:03 +0100 Subject: [PATCH 1/3] windows fix: use install root as base path for relative pathes in dbus service file --- dbus/dbus-spawn-win.c | 44 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/dbus/dbus-spawn-win.c b/dbus/dbus-spawn-win.c index b0cf90f1..a7416cb6 100644 --- a/dbus/dbus-spawn-win.c +++ b/dbus/dbus-spawn-win.c @@ -544,6 +544,7 @@ spawn_program (char* name, char** argv, char** envp) STARTUPINFOA si; char *arg_string, *env_string; BOOL result; + char exe_path[MAX_PATH]; #ifdef DBUS_WINCE if (argv && argv[0]) @@ -558,14 +559,45 @@ spawn_program (char* name, char** argv, char** envp) env_string = build_env_string(envp); +#ifndef DBUS_WINCE + // handle relative pathes + if (strlen(name) > 2 && name[0] != '\\' && name[0] != '/' && name[1] != ':') + { + _dbus_verbose ("babysitter: spawning %s", name); + char install_root[2*MAX_PATH]; + LPSTR lpFile; + char *p; + if (!_dbus_get_install_root (install_root, sizeof(install_root))) + return INVALID_HANDLE_VALUE; + + strcat(install_root,name); + + // add exe extension, if not present + p = strrchr(name,'.'); + if (!p) + strcat(install_root,".exe"); + + // convert '/' into '\\' + while((p = strchr(install_root,'/')) != 0) + *p = '\\'; + + // separate path from filename + p = strrchr(install_root,'\\'); + // no complete path: error condition + if (!p) + return INVALID_HANDLE_VALUE; + *p = 0; + if (!SearchPathA(install_root, p+1, NULL, sizeof(exe_path), exe_path, &lpFile)) + return INVALID_HANDLE_VALUE; + } + else +#endif + strncpy(exe_path,name,MAX_PATH); + memset (&si, 0, sizeof (si)); si.cb = sizeof (si); -#ifdef DBUS_WINCE - result = CreateProcessA (name, arg_string, NULL, NULL, FALSE, 0, -#else - result = CreateProcessA (NULL, arg_string, NULL, NULL, FALSE, 0, -#endif - (LPVOID)env_string, NULL, &si, &pi); + result = CreateProcessA (exe_path, arg_string, NULL, NULL, FALSE, 0, + (LPVOID)env_string, NULL, &si, &pi); free (arg_string); if (env_string) free (env_string); From fdab4af0f4748f1fb5d23ca41e201cca4adb0b2f Mon Sep 17 00:00:00 2001 From: Ralf Habacker Date: Thu, 22 Dec 2011 12:41:44 +0100 Subject: [PATCH 2/3] keep cmake in sync with automake related to default bus addresses Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38201 --- cmake/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 8890604d..bcbd772f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -433,8 +433,8 @@ set (DBUS_USER ) if (WIN32) - set (DBUS_SYSTEM_BUS_DEFAULT_ADDRESS "nonce-tcp:" CACHE STRING "system bus default address") - set (DBUS_SESSION_BUS_DEFAULT_ADDRESS "nonce-tcp:" CACHE STRING "session bus default address") + set (DBUS_SYSTEM_BUS_DEFAULT_ADDRESS "autolaunch:" CACHE STRING "system bus default address") + set (DBUS_SESSION_BUS_DEFAULT_ADDRESS "autolaunch:" CACHE STRING "session bus default address") set (DBUS_SYSTEM_CONFIG_FILE "etc/dbus-1/system.conf") set (DBUS_SESSION_CONFIG_FILE "etc/dbus-1/session.conf") From 5ec835dac93a084ff5f697a9b83b640689462e00 Mon Sep 17 00:00:00 2001 From: Ralf Habacker Date: Sun, 25 Dec 2011 14:30:47 +0100 Subject: [PATCH 3/3] 1.4 branch need a fix to be compilable with msvc --- dbus/dbus-spawn-win.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dbus/dbus-spawn-win.c b/dbus/dbus-spawn-win.c index a7416cb6..cb6ebb2d 100644 --- a/dbus/dbus-spawn-win.c +++ b/dbus/dbus-spawn-win.c @@ -42,6 +42,7 @@ #include "dbus-protocol.h" #define WIN32_LEAN_AND_MEAN +#include //#define STRICT //#include //#undef STRICT @@ -563,10 +564,10 @@ spawn_program (char* name, char** argv, char** envp) // handle relative pathes if (strlen(name) > 2 && name[0] != '\\' && name[0] != '/' && name[1] != ':') { - _dbus_verbose ("babysitter: spawning %s", name); char install_root[2*MAX_PATH]; LPSTR lpFile; char *p; + _dbus_verbose ("babysitter: spawning %s", name); if (!_dbus_get_install_root (install_root, sizeof(install_root))) return INVALID_HANDLE_VALUE;