gmodule: Remove old win32 codepage ABI compat code

Makes new code link against the normal symbol names again.
Variants with utf8 suffix are there for existing binaries/ABI compat.

https://bugzilla.gnome.org/show_bug.cgi?id=780634
This commit is contained in:
Christoph Reiter 2017-03-28 08:03:27 +02:00
parent 5067d25a74
commit 3525048dc4
2 changed files with 61 additions and 99 deletions

View File

@ -195,9 +195,6 @@
struct _GModule
{
gchar *file_name;
#if defined (G_OS_WIN32) && !defined(_WIN64)
gchar *cp_file_name;
#endif
gpointer handle;
guint ref_count : 31;
guint is_resident : 1;
@ -468,6 +465,28 @@ _g_module_debug_init (void)
static GRecMutex g_module_global_lock;
/**
* g_module_open:
* @file_name: (nullable): the name of the file containing the module, or %NULL
* to obtain a #GModule representing the main program itself
* @flags: the flags used for opening the module. This can be the
* logical OR of any of the #GModuleFlags
*
* Opens a module. If the module has already been opened,
* its reference count is incremented.
*
* First of all g_module_open() tries to open @file_name as a module.
* If that fails and @file_name has the ".la"-suffix (and is a libtool
* archive) it tries to open the corresponding module. If that fails
* and it doesn't have the proper module suffix for the platform
* (#G_MODULE_SUFFIX), this suffix will be appended and the corresponding
* module will be opended. If that fails and @file_name doesn't have the
* ".la"-suffix, this suffix is appended and g_module_open() tries to open
* the corresponding module. If eventually that fails as well, %NULL is
* returned.
*
* Returns: a #GModule on success, or %NULL on failure
*/
GModule*
g_module_open (const gchar *file_name,
GModuleFlags flags)
@ -495,9 +514,6 @@ g_module_open (const gchar *file_name,
{
main_module = g_new (GModule, 1);
main_module->file_name = NULL;
#if defined (G_OS_WIN32) && !defined(_WIN64)
main_module->cp_file_name = NULL;
#endif
main_module->handle = handle;
main_module->ref_count = 1;
main_module->is_resident = TRUE;
@ -610,10 +626,6 @@ g_module_open (const gchar *file_name,
module = g_new (GModule, 1);
module->file_name = g_strdup (file_name);
#if defined (G_OS_WIN32) && !defined(_WIN64)
module->cp_file_name = g_locale_from_utf8 (file_name, -1,
NULL, NULL, NULL);
#endif
module->handle = handle;
module->ref_count = 1;
module->is_resident = FALSE;
@ -655,61 +667,6 @@ g_module_open (const gchar *file_name,
return module;
}
#if defined (G_OS_WIN32) && !defined(_WIN64)
#undef g_module_open
/**
* GModuleFlags:
* @G_MODULE_BIND_LAZY: specifies that symbols are only resolved when
* needed. The default action is to bind all symbols when the module
* is loaded.
* @G_MODULE_BIND_LOCAL: specifies that symbols in the module should
* not be added to the global name space. The default action on most
* platforms is to place symbols in the module in the global name space,
* which may cause conflicts with existing symbols.
* @G_MODULE_BIND_MASK: mask for all flags.
*
* Flags passed to g_module_open().
* Note that these flags are not supported on all platforms.
*/
/**
* g_module_open:
* @file_name: (nullable): the name of the file containing the module, or %NULL
* to obtain a #GModule representing the main program itself
* @flags: the flags used for opening the module. This can be the
* logical OR of any of the #GModuleFlags
*
* Opens a module. If the module has already been opened,
* its reference count is incremented.
*
* First of all g_module_open() tries to open @file_name as a module.
* If that fails and @file_name has the ".la"-suffix (and is a libtool
* archive) it tries to open the corresponding module. If that fails
* and it doesn't have the proper module suffix for the platform
* (#G_MODULE_SUFFIX), this suffix will be appended and the corresponding
* module will be opended. If that fails and @file_name doesn't have the
* ".la"-suffix, this suffix is appended and g_module_open() tries to open
* the corresponding module. If eventually that fails as well, %NULL is
* returned.
*
* Returns: a #GModule on success, or %NULL on failure
*/
GModule *
g_module_open (const gchar *file_name,
GModuleFlags flags)
{
gchar *utf8_file_name = g_locale_to_utf8 (file_name, -1, NULL, NULL, NULL);
GModule *retval = g_module_open_utf8 (utf8_file_name, flags);
g_free (utf8_file_name);
return retval;
}
#endif
/**
* g_module_close:
* @module: a #GModule to close
@ -764,9 +721,6 @@ g_module_close (GModule *module)
_g_module_close (module->handle, FALSE);
g_free (module->file_name);
#if defined (G_OS_WIN32) && !defined(_WIN64)
g_free (module->cp_file_name);
#endif
g_free (module);
}
@ -878,23 +832,6 @@ g_module_name (GModule *module)
return module->file_name;
}
#if defined (G_OS_WIN32) && !defined(_WIN64)
#undef g_module_name
const gchar *
g_module_name (GModule *module)
{
g_return_val_if_fail (module != NULL, NULL);
if (module == main_module)
return "main";
return module->cp_file_name;
}
#endif
/**
* g_module_build_path:
* @directory: (nullable): the directory where the module is. This can be
@ -927,3 +864,28 @@ g_module_build_path (const gchar *directory,
return _g_module_build_path (directory, module_name);
}
#ifdef G_OS_WIN32
/* Binary compatibility versions. Not for newly compiled code. */
_GLIB_EXTERN GModule * g_module_open_utf8 (const gchar *file_name,
GModuleFlags flags);
_GLIB_EXTERN const gchar *g_module_name_utf8 (GModule *module);
GModule*
g_module_open_utf8 (const gchar *file_name,
GModuleFlags flags)
{
return g_module_open (file_name, flags);
}
const gchar *
g_module_name_utf8 (GModule *module)
{
return g_module_name (module);
}
#endif

View File

@ -41,6 +41,20 @@ G_BEGIN_DECLS
# define G_MODULE_EXPORT
#endif /* !G_PLATFORM_WIN32 */
/**
* GModuleFlags:
* @G_MODULE_BIND_LAZY: specifies that symbols are only resolved when
* needed. The default action is to bind all symbols when the module
* is loaded.
* @G_MODULE_BIND_LOCAL: specifies that symbols in the module should
* not be added to the global name space. The default action on most
* platforms is to place symbols in the module in the global name space,
* which may cause conflicts with existing symbols.
* @G_MODULE_BIND_MASK: mask for all flags.
*
* Flags passed to g_module_open().
* Note that these flags are not supported on all platforms.
*/
typedef enum
{
G_MODULE_BIND_LAZY = 1 << 0,
@ -98,20 +112,6 @@ GLIB_AVAILABLE_IN_ALL
gchar* g_module_build_path (const gchar *directory,
const gchar *module_name);
#ifndef __GTK_DOC_IGNORE__
#ifdef G_OS_WIN32
#define g_module_open g_module_open_utf8
#define g_module_name g_module_name_utf8
GLIB_AVAILABLE_IN_ALL
GModule * g_module_open_utf8 (const gchar *file_name,
GModuleFlags flags);
GLIB_AVAILABLE_IN_ALL
const gchar *g_module_name_utf8 (GModule *module);
#endif
#endif
G_END_DECLS
#endif /* __GMODULE_H__ */