+2008-09-19 Tor Lillqvist <tml@novell.com>
+
+ * glib/gutils.c (_glib_get_dll_directory)
+ * glib/gspawn-win32.c (do_spawn_with_pipes): Be a bit less
+ restrictive, look for the helper programs in the same folder where
+ the GLib DLL is, not necessarily in a "bin" subfolder of the top
+ GLib installation folder.
+
2008-09-18 Matthias Clasen <mclasen@redhat.com>
* configure.in: Bump version to 2.19.0
gchar *helper_process;
CONSOLE_CURSOR_INFO cursor_info;
wchar_t *whelper, **wargv, **wenvp;
- extern gchar *_glib_get_installation_directory (void);
- gchar *glib_top;
+ extern gchar *_glib_get_dll_directory (void);
+ gchar *glib_dll_directory;
if (child_setup && !warned_about_child_setup)
{
else
helper_process = HELPER_PROCESS ".exe";
- glib_top = _glib_get_installation_directory ();
- if (glib_top != NULL)
+ glib_dll_directory = _glib_get_dll_directory ();
+ if (glib_dll_directory != NULL)
{
- helper_process = g_build_filename (glib_top, "bin", helper_process, NULL);
- g_free (glib_top);
+ helper_process = g_build_filename (glib_dll_directory, helper_process, NULL);
+ g_free (glib_dll_directory);
}
else
helper_process = g_strdup (helper_process);
#endif
gchar *
-_glib_get_installation_directory (void)
+_glib_get_dll_directory (void)
{
+ gchar *retval;
+ gchar *p;
+ wchar_t wc_fn[MAX_PATH];
+
#ifdef DLL_EXPORT
if (glib_dll == NULL)
return NULL;
#endif
- /* In a static build of GLib just use the application's .exe file's
- * installation directory...
+
+ /* This code is different from that in
+ * g_win32_get_package_installation_directory_of_module() in that
+ * here we return the actual folder where the GLib DLL is. We don't
+ * do the check for it being in a "bin" or "lib" subfolder and then
+ * returning the parent of that.
+ *
+ * In a statically built GLib, glib_dll will be NULL and we will
+ * thus look up the application's .exe file's location.
*/
- return g_win32_get_package_installation_directory_of_module (glib_dll);
+ if (!GetModuleFileNameW (glib_dll, wc_fn, MAX_PATH))
+ return NULL;
+
+ retval = g_utf16_to_utf8 (wc_fn, -1, NULL, NULL, NULL);
+
+ p = strrchr (retval, G_DIR_SEPARATOR);
+ if (p == NULL)
+ {
+ /* Wtf? */
+ return NULL;
+ }
+ *p = '\0';
+
+ return retval;
}
#endif