1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #if !defined LTDL_H
34 #define LTDL_H 1
35
36 #include <libltdl/lt_system.h>
37 #include <libltdl/lt_error.h>
38 #include <libltdl/lt_dlloader.h>
39
40 LT_BEGIN_C_DECLS
41
42
43
44 #define LT_STRLEN(s) (((s) && (s)[0]) ? strlen (s) : 0)
45
46
47
48
49
50 typedef struct lt__handle *lt_dlhandle;
51
52
53 LT_SCOPE int lt_dlinit (void);
54 LT_SCOPE int lt_dlexit (void);
55
56
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 (
63 const char *search_path,
64 int (*func) (const char *filename, void *data),
65 void *data);
66
67
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);
75
76
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);
84
85
86
87
88
89
90
91
92 typedef struct {
93 const char *name;
94 void *address;
95 } lt_dlsymlist;
96
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
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)
110
111
112
113
114
115
116
117
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
130
131 typedef struct {
132 char * filename;
133 char * name;
134 int ref_count;
135
136 unsigned int is_resident:1;
137 unsigned int is_symglobal:1;
138
139 unsigned int is_symlocal:1;
140
141 } lt_dlinfo;
142
143 LT_SCOPE const lt_dlinfo *lt_dlgetinfo (lt_dlhandle handle);
144
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);
152
153
154
155
156 LT_SCOPE int lt_dlmakeresident (lt_dlhandle handle);
157 LT_SCOPE int lt_dlisresident (lt_dlhandle handle);
158
159 #define lt_ptr void *
160
161 LT_END_C_DECLS
162
163 #endif