Win32-only case- insensitive hash and equality functions.

2007-02-09  Tor Lillqvist  <tml@novell.com>

	* app/plug-in/gimpenvirontable.c
	(gimp_environ_table_case_insensitive_hash)
	(gimp_environ_table_case_insensitive_equal): Win32-only case-
	insensitive hash and equality functions.
	(gimp_environ_table_load): On Win32, use the above functions for
	the vars hash table. This fixes the problem that occurs when the
	actual PATH environment variable is spelled Path (as it seems to
	often be), but the default.env file as set up by the installer
	provides PATH. They didn't match so both would be passed to the
	plug-in child process, and apparently which one then was used to
	look for DLLs was more or less random. If it was the original
	Path, it didn't contain the directories the installer put in PATH
	in default.env, and plug-ins didn't find the DLLs.


svn path=/trunk/; revision=21883
This commit is contained in:
Tor Lillqvist 2007-02-09 11:45:00 +00:00 committed by Tor Lillqvist
parent fdd2cd65f9
commit 822065c0b0
2 changed files with 52 additions and 0 deletions

View File

@ -1,3 +1,19 @@
2007-02-09 Tor Lillqvist <tml@novell.com>
* app/plug-in/gimpenvirontable.c
(gimp_environ_table_case_insensitive_hash)
(gimp_environ_table_case_insensitive_equal): Win32-only case-
insensitive hash and equality functions.
(gimp_environ_table_load): On Win32, use the above functions for
the vars hash table. This fixes the problem that occurs when the
actual PATH environment variable is spelled Path (as it seems to
often be), but the default.env file as set up by the installer
provides PATH. They didn't match so both would be passed to the
plug-in child process, and apparently which one then was used to
look for DLLs was more or less random. If it was the original
Path, it didn't contain the directories the installer put in PATH
in default.env, and plug-ins didn't find the DLLs.
2007-02-09 Sven Neumann <sven@gimp.org>
* app/tools/gimprectangleoptions.c: moved ratio entry up.

View File

@ -104,6 +104,35 @@ gimp_environ_table_new (void)
return g_object_new (GIMP_TYPE_ENVIRON_TABLE, NULL);
}
#ifdef G_OS_WIN32
static guint
gimp_environ_table_case_insensitive_hash (gconstpointer v)
{
gchar *p = g_ascii_strup ((const gchar *) v, -1);
guint retval = g_str_hash (p);
g_free (p);
return retval;
}
static gboolean
gimp_environ_table_case_insensitive_equal (gconstpointer v1,
gconstpointer v2)
{
gchar *string1 = g_ascii_strup ((const gchar *) v1, -1);
gchar *string2 = g_ascii_strup ((const gchar *) v2, -1);
gboolean retval = g_str_equal (string1, string2);
g_free (string1);
g_free (string2);
return retval;
}
#endif
void
gimp_environ_table_load (GimpEnvironTable *environ_table,
const gchar *env_path)
@ -112,9 +141,16 @@ gimp_environ_table_load (GimpEnvironTable *environ_table,
gimp_environ_table_clear (environ_table);
#ifndef G_OS_WIN32
environ_table->vars =
g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, gimp_environ_table_free_value);
#else
environ_table->vars =
g_hash_table_new_full (gimp_environ_table_case_insensitive_hash,
gimp_environ_table_case_insensitive_equal,
g_free, gimp_environ_table_free_value);
#endif
gimp_datafiles_read_directories (env_path,
G_FILE_TEST_EXISTS,