| /* GMODULE - GLIB wrapper code for dynamic module loading | |
| * Copyright (C) 1998 Tim Janik | |
| * | |
| * SPDX-License-Identifier: LGPL-2.1-or-later | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, see <http://www.gnu.org/licenses/>. | |
| */ | |
| /* | |
| * Modified by the GLib Team and others 1997-2000. See the AUTHORS | |
| * file for a list of people on the GLib Team. See the ChangeLog | |
| * files for a list of changes. These files are distributed with | |
| * GLib at ftp://ftp.gtk.org/pub/gtk/. | |
| */ | |
| #ifndef __GMODULE_H__ | |
| #define __GMODULE_H__ | |
| #include <glib.h> | |
| #include <gmodule/gmodule-visibility.h> | |
| G_BEGIN_DECLS | |
| /* exporting and importing functions, this is special cased | |
| * to feature Windows dll stubs. | |
| */ | |
| #if defined(_WIN32) || defined(__CYGWIN__) | |
| # define G_MODULE_EXPORT __declspec(dllexport) | |
| # define G_MODULE_IMPORT __declspec(dllimport) extern | |
| #elif __GNUC__ >= 4 | |
| # define G_MODULE_EXPORT __attribute__((visibility("default"))) | |
| # define G_MODULE_IMPORT extern | |
| #else /* !defined(_WIN32) && !defined(__CYGWIN__) && __GNUC__ < 4 */ | |
| # define G_MODULE_EXPORT | |
| # define G_MODULE_IMPORT extern | |
| #endif | |
| /** | |
| * 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, | |
| G_MODULE_BIND_LOCAL = 1 << 1, | |
| G_MODULE_BIND_MASK = 0x03 | |
| } GModuleFlags; | |
| typedef struct _GModule GModule; | |
| typedef const gchar* (*GModuleCheckInit) (GModule *module); | |
| typedef void (*GModuleUnload) (GModule *module); | |
| #define G_MODULE_ERROR g_module_error_quark () GMODULE_AVAILABLE_MACRO_IN_2_70 | |
| GMODULE_AVAILABLE_IN_2_70 | |
| GQuark g_module_error_quark (void); | |
| /** | |
| * GModuleError: | |
| * @G_MODULE_ERROR_FAILED: there was an error loading or opening a module file | |
| * @G_MODULE_ERROR_CHECK_FAILED: a module returned an error from its `g_module_check_init()` function | |
| * | |
| * Errors returned by g_module_open_full(). | |
| * | |
| * Since: 2.70 | |
| */ | |
| typedef enum | |
| { | |
| G_MODULE_ERROR_FAILED, | |
| G_MODULE_ERROR_CHECK_FAILED, | |
| } GModuleError | |
| GMODULE_AVAILABLE_ENUMERATOR_IN_2_70; | |
| /* return TRUE if dynamic module loading is supported */ | |
| GMODULE_AVAILABLE_IN_ALL | |
| gboolean g_module_supported (void) G_GNUC_CONST; | |
| /* open a module 'file_name' and return handle, which is NULL on error */ | |
| GMODULE_AVAILABLE_IN_ALL | |
| GModule* g_module_open (const gchar *file_name, | |
| GModuleFlags flags); | |
| GMODULE_AVAILABLE_IN_2_70 | |
| GModule *g_module_open_full (const gchar *file_name, | |
| GModuleFlags flags, | |
| GError **error); | |
| /* close a previously opened module, returns TRUE on success */ | |
| GMODULE_AVAILABLE_IN_ALL | |
| gboolean g_module_close (GModule *module); | |
| /* make a module resident so g_module_close on it will be ignored */ | |
| GMODULE_AVAILABLE_IN_ALL | |
| void g_module_make_resident (GModule *module); | |
| /* query the last module error as a string */ | |
| GMODULE_AVAILABLE_IN_ALL | |
| const gchar * g_module_error (void); | |
| /* retrieve a symbol pointer from 'module', returns TRUE on success */ | |
| GMODULE_AVAILABLE_IN_ALL | |
| gboolean g_module_symbol (GModule *module, | |
| const gchar *symbol_name, | |
| gpointer *symbol); | |
| /* retrieve the file name from an existing module */ | |
| GMODULE_AVAILABLE_IN_ALL | |
| const gchar * g_module_name (GModule *module); | |
| /* Build the actual file name containing a module. 'directory' is the | |
| * directory where the module file is supposed to be, or NULL or empty | |
| * in which case it should either be in the current directory or, on | |
| * some operating systems, in some standard place, for instance on the | |
| * PATH. Hence, to be absolutely sure to get the correct module, | |
| * always pass in a directory. The file name consists of the directory, | |
| * if supplied, and 'module_name' suitably decorated according to | |
| * the operating system's conventions (for instance lib*.so or *.dll). | |
| * | |
| * No checks are made that the file exists, or is of correct type. | |
| */ | |
| GMODULE_DEPRECATED_IN_2_76 | |
| gchar* g_module_build_path (const gchar *directory, | |
| const gchar *module_name); | |
| G_END_DECLS | |
| #endif /* __GMODULE_H__ */ |