Annotation of sql/sqlite/libltdl/ltdl.h, revision 1.4
1.1 misha 1: /* ltdl.h -- generic dlopen functions
2:
1.4 ! moko 3: Copyright (C) 1998-2000, 2004, 2005,
! 4: 2007, 2008 Free Software Foundation, Inc.
! 5: Written by Thomas Tanner, 1998
! 6:
! 7: NOTE: The canonical source of this file is maintained with the
! 8: GNU Libtool package. Report bugs to bug-libtool@gnu.org.
! 9:
! 10: GNU Libltdl is free software; you can redistribute it and/or
1.1 misha 11: modify it under the terms of the GNU Lesser General Public
12: License as published by the Free Software Foundation; either
13: version 2 of the License, or (at your option) any later version.
14:
15: As a special exception to the GNU Lesser General Public License,
16: if you distribute this file as part of a program or library that
1.4 ! moko 17: is built using GNU Libtool, you may include this file under the
! 18: same distribution terms that you use for the rest of that program.
1.1 misha 19:
1.4 ! moko 20: GNU Libltdl is distributed in the hope that it will be useful,
1.1 misha 21: but WITHOUT ANY WARRANTY; without even the implied warranty of
1.4 ! moko 22: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 23: GNU Lesser General Public License for more details.
1.1 misha 24:
25: You should have received a copy of the GNU Lesser General Public
1.4 ! moko 26: License along with GNU Libltdl; see the file COPYING.LIB. If not, a
! 27: copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
! 28: or obtained by writing to the Free Software Foundation, Inc.,
! 29: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1.1 misha 30: */
31:
32: /* Only include this header file once. */
1.4 ! moko 33: #if !defined(LTDL_H)
1.1 misha 34: #define LTDL_H 1
35:
1.4 ! moko 36: #include <libltdl/lt_system.h>
! 37: #include <libltdl/lt_error.h>
! 38: #include <libltdl/lt_dlloader.h>
1.1 misha 39:
40: LT_BEGIN_C_DECLS
41:
42:
43: /* LT_STRLEN can be used safely on NULL pointers. */
44: #define LT_STRLEN(s) (((s) && (s)[0]) ? strlen (s) : 0)
45:
46:
47: /* --- DYNAMIC MODULE LOADING API --- */
48:
49:
1.4 ! moko 50: typedef struct lt__handle *lt_dlhandle; /* A loaded module. */
1.1 misha 51:
52: /* Initialisation and finalisation functions for libltdl. */
1.4 ! moko 53: LT_SCOPE int lt_dlinit (void);
! 54: LT_SCOPE int lt_dlexit (void);
1.1 misha 55:
56: /* Module search path manipulation. */
1.4 ! moko 57: LT_SCOPE int lt_dladdsearchdir (const char *search_dir);
! 58: LT_SCOPE int lt_dlinsertsearchdir (const char *before,
! 59: const char *search_dir);
! 60: LT_SCOPE int lt_dlsetsearchpath (const char *search_path);
! 61: LT_SCOPE const char *lt_dlgetsearchpath (void);
! 62: LT_SCOPE int lt_dlforeachfile (
1.1 misha 63: const char *search_path,
1.4 ! moko 64: int (*func) (const char *filename, void *data),
! 65: void *data);
! 66:
! 67: /* User module loading advisors. */
! 68: LT_SCOPE int lt_dladvise_init (lt_dladvise *advise);
! 69: LT_SCOPE int lt_dladvise_destroy (lt_dladvise *advise);
! 70: LT_SCOPE int lt_dladvise_ext (lt_dladvise *advise);
! 71: LT_SCOPE int lt_dladvise_resident (lt_dladvise *advise);
! 72: LT_SCOPE int lt_dladvise_local (lt_dladvise *advise);
! 73: LT_SCOPE int lt_dladvise_global (lt_dladvise *advise);
! 74: LT_SCOPE int lt_dladvise_preload (lt_dladvise *advise);
1.1 misha 75:
76: /* Portable libltdl versions of the system dlopen() API. */
1.4 ! moko 77: LT_SCOPE lt_dlhandle lt_dlopen (const char *filename);
! 78: LT_SCOPE lt_dlhandle lt_dlopenext (const char *filename);
! 79: LT_SCOPE lt_dlhandle lt_dlopenadvise (const char *filename,
! 80: lt_dladvise advise);
! 81: LT_SCOPE void * lt_dlsym (lt_dlhandle handle, const char *name);
! 82: LT_SCOPE const char *lt_dlerror (void);
! 83: LT_SCOPE int lt_dlclose (lt_dlhandle handle);
1.1 misha 84:
85:
86:
87: /* --- PRELOADED MODULE SUPPORT --- */
88:
89:
90: /* A preopened symbol. Arrays of this type comprise the exported
91: symbols for a dlpreopened module. */
92: typedef struct {
93: const char *name;
1.4 ! moko 94: void *address;
1.1 misha 95: } lt_dlsymlist;
96:
1.4 ! moko 97: typedef int lt_dlpreload_callback_func (lt_dlhandle handle);
! 98:
! 99: LT_SCOPE int lt_dlpreload (const lt_dlsymlist *preloaded);
! 100: LT_SCOPE int lt_dlpreload_default (const lt_dlsymlist *preloaded);
! 101: LT_SCOPE int lt_dlpreload_open (const char *originator,
! 102: lt_dlpreload_callback_func *func);
! 103:
! 104: #define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols
! 105: /* Ensure C linkage. */
! 106: extern LT_DLSYM_CONST lt_dlsymlist lt__PROGRAM__LTX_preloaded_symbols[];
! 107:
! 108: #define LTDL_SET_PRELOADED_SYMBOLS() \
! 109: lt_dlpreload_default(lt_preloaded_symbols)
1.1 misha 110:
111:
112:
113:
114: /* --- MODULE INFORMATION --- */
115:
116:
1.4 ! moko 117: /* Associating user data with loaded modules. */
! 118: typedef void * lt_dlinterface_id;
! 119: typedef int lt_dlhandle_interface (lt_dlhandle handle, const char *id_string);
! 120:
! 121: LT_SCOPE lt_dlinterface_id lt_dlinterface_register (const char *id_string,
! 122: lt_dlhandle_interface *iface);
! 123: LT_SCOPE void lt_dlinterface_free (lt_dlinterface_id key);
! 124: LT_SCOPE void * lt_dlcaller_set_data (lt_dlinterface_id key,
! 125: lt_dlhandle handle, void *data);
! 126: LT_SCOPE void * lt_dlcaller_get_data (lt_dlinterface_id key,
! 127: lt_dlhandle handle);
! 128:
! 129:
1.1 misha 130: /* Read only information pertaining to a loaded module. */
131: typedef struct {
1.4 ! moko 132: char * filename; /* file name */
! 133: char * name; /* module name */
! 134: int ref_count; /* number of times lt_dlopened minus
1.1 misha 135: number of times lt_dlclosed. */
1.4 ! moko 136: unsigned int is_resident:1; /* module can't be unloaded. */
! 137: unsigned int is_symglobal:1; /* module symbols can satisfy
! 138: subsequently loaded modules. */
! 139: unsigned int is_symlocal:1; /* module symbols are only available
! 140: locally. */
1.1 misha 141: } lt_dlinfo;
142:
1.4 ! moko 143: LT_SCOPE const lt_dlinfo *lt_dlgetinfo (lt_dlhandle handle);
1.1 misha 144:
1.4 ! moko 145: LT_SCOPE lt_dlhandle lt_dlhandle_iterate (lt_dlinterface_id iface,
! 146: lt_dlhandle place);
! 147: LT_SCOPE lt_dlhandle lt_dlhandle_fetch (lt_dlinterface_id iface,
! 148: const char *module_name);
! 149: LT_SCOPE int lt_dlhandle_map (lt_dlinterface_id iface,
! 150: int (*func) (lt_dlhandle handle, void *data),
! 151: void *data);
1.1 misha 152:
153:
154:
1.4 ! moko 155: /* Deprecated module residency management API. */
! 156: LT_SCOPE int lt_dlmakeresident (lt_dlhandle handle);
! 157: LT_SCOPE int lt_dlisresident (lt_dlhandle handle);
1.1 misha 158:
1.4 ! moko 159: #define lt_ptr void *
1.1 misha 160:
161: LT_END_C_DECLS
162:
1.4 ! moko 163: #endif /*!defined(LTDL_H)*/
E-mail: