Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #if !defined(LTDL_H)
00034 #define LTDL_H 1
00035
00036 #include <libltdl/lt_system.h>
00037 #include <libltdl/lt_error.h>
00038 #include <libltdl/lt_dlloader.h>
00039
00040 LT_BEGIN_C_DECLS
00041
00042
00043
00044 #define LT_STRLEN(s) (((s) && (s)[0]) ? strlen (s) : 0)
00045
00046
00047
00048
00049
00050 typedef struct lt__handle *lt_dlhandle;
00051
00052
00053 LT_SCOPE int lt_dlinit (void);
00054 LT_SCOPE int lt_dlexit (void);
00055
00056
00057 LT_SCOPE int lt_dladdsearchdir (const char *search_dir);
00058 LT_SCOPE int lt_dlinsertsearchdir (const char *before,
00059 const char *search_dir);
00060 LT_SCOPE int lt_dlsetsearchpath (const char *search_path);
00061 LT_SCOPE const char *lt_dlgetsearchpath (void);
00062 LT_SCOPE int lt_dlforeachfile (
00063 const char *search_path,
00064 int (*func) (const char *filename, void *data),
00065 void *data);
00066
00067
00068 LT_SCOPE int lt_dladvise_init (lt_dladvise *advise);
00069 LT_SCOPE int lt_dladvise_destroy (lt_dladvise *advise);
00070 LT_SCOPE int lt_dladvise_ext (lt_dladvise *advise);
00071 LT_SCOPE int lt_dladvise_resident (lt_dladvise *advise);
00072 LT_SCOPE int lt_dladvise_local (lt_dladvise *advise);
00073 LT_SCOPE int lt_dladvise_global (lt_dladvise *advise);
00074 LT_SCOPE int lt_dladvise_preload (lt_dladvise *advise);
00075
00076
00077 LT_SCOPE lt_dlhandle lt_dlopen (const char *filename);
00078 LT_SCOPE lt_dlhandle lt_dlopenext (const char *filename);
00079 LT_SCOPE lt_dlhandle lt_dlopenadvise (const char *filename,
00080 lt_dladvise advise);
00081 LT_SCOPE void * lt_dlsym (lt_dlhandle handle, const char *name);
00082 LT_SCOPE const char *lt_dlerror (void);
00083 LT_SCOPE int lt_dlclose (lt_dlhandle handle);
00084
00085
00086
00087
00088
00089
00090
00091
00092 typedef struct {
00093 const char *name;
00094 void *address;
00095 } lt_dlsymlist;
00096
00097 typedef int lt_dlpreload_callback_func (lt_dlhandle handle);
00098
00099 LT_SCOPE int lt_dlpreload (const lt_dlsymlist *preloaded);
00100 LT_SCOPE int lt_dlpreload_default (const lt_dlsymlist *preloaded);
00101 LT_SCOPE int lt_dlpreload_open (const char *originator,
00102 lt_dlpreload_callback_func *func);
00103
00104 #define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols
00105 #define LTDL_SET_PRELOADED_SYMBOLS() LT_STMT_START{ \
00106 extern const lt_dlsymlist lt_preloaded_symbols[]; \
00107 lt_dlpreload_default(lt_preloaded_symbols); \
00108 }LT_STMT_END
00109
00110
00111
00112
00113
00114
00115
00116
00117 typedef void * lt_dlinterface_id;
00118 typedef int lt_dlhandle_interface (lt_dlhandle handle, const char *id_string);
00119
00120 LT_SCOPE lt_dlinterface_id lt_dlinterface_register (const char *id_string,
00121 lt_dlhandle_interface *iface);
00122 LT_SCOPE void lt_dlinterface_free (lt_dlinterface_id key);
00123 LT_SCOPE void * lt_dlcaller_set_data (lt_dlinterface_id key,
00124 lt_dlhandle handle, void *data);
00125 LT_SCOPE void * lt_dlcaller_get_data (lt_dlinterface_id key,
00126 lt_dlhandle handle);
00127
00128
00129
00130 typedef struct {
00131 char * filename;
00132 char * name;
00133 int ref_count;
00134
00135 unsigned int is_resident:1;
00136 unsigned int is_symglobal:1;
00137
00138 unsigned int is_symlocal:1;
00139
00140 } lt_dlinfo;
00141
00142 LT_SCOPE const lt_dlinfo *lt_dlgetinfo (lt_dlhandle handle);
00143
00144 LT_SCOPE lt_dlhandle lt_dlhandle_iterate (lt_dlinterface_id iface,
00145 lt_dlhandle place);
00146 LT_SCOPE lt_dlhandle lt_dlhandle_fetch (lt_dlinterface_id iface,
00147 const char *module_name);
00148 LT_SCOPE int lt_dlhandle_map (lt_dlinterface_id iface,
00149 int (*func) (lt_dlhandle handle, void *data),
00150 void *data);
00151
00152
00153
00154
00155 LT_SCOPE int lt_dlmakeresident (lt_dlhandle handle);
00156 LT_SCOPE int lt_dlisresident (lt_dlhandle handle);
00157
00158 #define lt_ptr void *
00159
00160 LT_END_C_DECLS
00161
00162 #endif