]>
Commit | Line | Data |
---|---|---|
e961c7a2 | 1 | /* dso.h */ |
10621efd MC |
2 | /* |
3 | * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project | |
4 | * 2000. | |
8f4fac7f GT |
5 | */ |
6 | /* ==================================================================== | |
7 | * Copyright (c) 2000 The OpenSSL Project. All rights reserved. | |
8 | * | |
9 | * Redistribution and use in source and binary forms, with or without | |
10 | * modification, are permitted provided that the following conditions | |
11 | * are met: | |
12 | * | |
13 | * 1. Redistributions of source code must retain the above copyright | |
10621efd | 14 | * notice, this list of conditions and the following disclaimer. |
8f4fac7f GT |
15 | * |
16 | * 2. Redistributions in binary form must reproduce the above copyright | |
17 | * notice, this list of conditions and the following disclaimer in | |
18 | * the documentation and/or other materials provided with the | |
19 | * distribution. | |
20 | * | |
21 | * 3. All advertising materials mentioning features or use of this | |
22 | * software must display the following acknowledgment: | |
23 | * "This product includes software developed by the OpenSSL Project | |
24 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | |
25 | * | |
26 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | |
27 | * endorse or promote products derived from this software without | |
28 | * prior written permission. For written permission, please contact | |
29 | * licensing@OpenSSL.org. | |
30 | * | |
31 | * 5. Products derived from this software may not be called "OpenSSL" | |
32 | * nor may "OpenSSL" appear in their names without prior written | |
33 | * permission of the OpenSSL Project. | |
34 | * | |
35 | * 6. Redistributions of any form whatsoever must retain the following | |
36 | * acknowledgment: | |
37 | * "This product includes software developed by the OpenSSL Project | |
38 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | |
39 | * | |
40 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | |
41 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
42 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
43 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | |
44 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
45 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
46 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
47 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |
49 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
50 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | |
51 | * OF THE POSSIBILITY OF SUCH DAMAGE. | |
52 | * ==================================================================== | |
53 | * | |
54 | * This product includes cryptographic software written by Eric Young | |
55 | * (eay@cryptsoft.com). This product includes software written by Tim | |
56 | * Hudson (tjh@cryptsoft.com). | |
57 | * | |
58 | */ | |
59 | ||
60 | #ifndef HEADER_DSO_H | |
10621efd | 61 | # define HEADER_DSO_H |
8f4fac7f | 62 | |
10621efd | 63 | # include <openssl/crypto.h> |
8f4fac7f GT |
64 | |
65 | #ifdef __cplusplus | |
66 | extern "C" { | |
67 | #endif | |
68 | ||
b9e63915 | 69 | /* These values are used as commands to DSO_ctrl() */ |
10621efd MC |
70 | # define DSO_CTRL_GET_FLAGS 1 |
71 | # define DSO_CTRL_SET_FLAGS 2 | |
72 | # define DSO_CTRL_OR_FLAGS 3 | |
b9e63915 | 73 | |
10621efd MC |
74 | /* |
75 | * By default, DSO_load() will translate the provided filename into a form | |
51c8dc37 GT |
76 | * typical for the platform (more specifically the DSO_METHOD) using the |
77 | * dso_name_converter function of the method. Eg. win32 will transform "blah" | |
78 | * into "blah.dll", and dlfcn will transform it into "libblah.so". The | |
10621efd MC |
79 | * behaviour can be overriden by setting the name_converter callback in the |
80 | * DSO object (using DSO_set_name_converter()). This callback could even | |
81 | * utilise the DSO_METHOD's converter too if it only wants to override | |
82 | * behaviour for one or two possible DSO methods. However, the following flag | |
83 | * can be set in a DSO to prevent *any* native name-translation at all - eg. | |
84 | * if the caller has prompted the user for a path to a driver library so the | |
85 | * filename should be interpreted as-is. | |
a4129c6e | 86 | */ |
10621efd MC |
87 | # define DSO_FLAG_NO_NAME_TRANSLATION 0x01 |
88 | /* | |
89 | * An extra flag to give if only the extension should be added as | |
90 | * translation. This is obviously only of importance on Unix and other | |
91 | * operating systems where the translation also may prefix the name with | |
92 | * something, like 'lib', and ignored everywhere else. This flag is also | |
93 | * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time. | |
94 | */ | |
95 | # define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02 | |
a4129c6e | 96 | |
10621efd MC |
97 | /* |
98 | * The following flag controls the translation of symbol names to upper case. | |
99 | * This is currently only being implemented for OpenVMS. | |
e666c459 | 100 | */ |
10621efd | 101 | # define DSO_FLAG_UPCASE_SYMBOL 0x10 |
e666c459 | 102 | |
10621efd MC |
103 | /* |
104 | * This flag loads the library with public symbols. Meaning: The exported | |
105 | * symbols of this library are public to all libraries loaded after this | |
106 | * library. At the moment only implemented in unix. | |
107 | */ | |
108 | # define DSO_FLAG_GLOBAL_SYMBOLS 0x20 | |
a4129c6e | 109 | |
10621efd | 110 | typedef void (*DSO_FUNC_TYPE) (void); |
e9a68cfb | 111 | |
8f4fac7f GT |
112 | typedef struct dso_st DSO; |
113 | ||
10621efd MC |
114 | /* |
115 | * The function prototype used for method functions (or caller-provided | |
116 | * callbacks) that transform filenames. They are passed a DSO structure | |
117 | * pointer (or NULL if they are to be used independantly of a DSO object) and | |
118 | * a filename to transform. They should either return NULL (if there is an | |
119 | * error condition) or a newly allocated string containing the transformed | |
120 | * form that the caller will need to free with OPENSSL_free() when done. | |
121 | */ | |
122 | typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *); | |
123 | /* | |
124 | * The function prototype used for method functions (or caller-provided | |
125 | * callbacks) that merge two file specifications. They are passed a DSO | |
126 | * structure pointer (or NULL if they are to be used independantly of a DSO | |
127 | * object) and two file specifications to merge. They should either return | |
128 | * NULL (if there is an error condition) or a newly allocated string | |
129 | * containing the result of merging that the caller will need to free with | |
130 | * OPENSSL_free() when done. Here, merging means that bits and pieces are | |
131 | * taken from each of the file specifications and added together in whatever | |
132 | * fashion that is sensible for the DSO method in question. The only rule | |
133 | * that really applies is that if the two specification contain pieces of the | |
134 | * same type, the copy from the first string takes priority. One could see | |
135 | * it as the first specification is the one given by the user and the second | |
136 | * being a bunch of defaults to add on if they're missing in the first. | |
137 | */ | |
138 | typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *); | |
139 | ||
140 | typedef struct dso_meth_st { | |
141 | const char *name; | |
142 | /* | |
143 | * Loads a shared library, NB: new DSO_METHODs must ensure that a | |
144 | * successful load populates the loaded_filename field, and likewise a | |
145 | * successful unload OPENSSL_frees and NULLs it out. | |
146 | */ | |
147 | int (*dso_load) (DSO *dso); | |
148 | /* Unloads a shared library */ | |
149 | int (*dso_unload) (DSO *dso); | |
150 | /* Binds a variable */ | |
151 | void *(*dso_bind_var) (DSO *dso, const char *symname); | |
152 | /* | |
153 | * Binds a function - assumes a return type of DSO_FUNC_TYPE. This should | |
154 | * be cast to the real function prototype by the caller. Platforms that | |
155 | * don't have compatible representations for different prototypes (this | |
156 | * is possible within ANSI C) are highly unlikely to have shared | |
157 | * libraries at all, let alone a DSO_METHOD implemented for them. | |
158 | */ | |
159 | DSO_FUNC_TYPE (*dso_bind_func) (DSO *dso, const char *symname); | |
8f4fac7f | 160 | /* I don't think this would actually be used in any circumstances. */ |
10621efd MC |
161 | # if 0 |
162 | /* Unbinds a variable */ | |
163 | int (*dso_unbind_var) (DSO *dso, char *symname, void *symptr); | |
164 | /* Unbinds a function */ | |
165 | int (*dso_unbind_func) (DSO *dso, char *symname, DSO_FUNC_TYPE symptr); | |
166 | # endif | |
167 | /* | |
168 | * The generic (yuck) "ctrl()" function. NB: Negative return values | |
169 | * (rather than zero) indicate errors. | |
170 | */ | |
171 | long (*dso_ctrl) (DSO *dso, int cmd, long larg, void *parg); | |
172 | /* | |
173 | * The default DSO_METHOD-specific function for converting filenames to a | |
174 | * canonical native form. | |
175 | */ | |
176 | DSO_NAME_CONVERTER_FUNC dso_name_converter; | |
177 | /* | |
178 | * The default DSO_METHOD-specific function for converting filenames to a | |
179 | * canonical native form. | |
180 | */ | |
181 | DSO_MERGER_FUNC dso_merger; | |
182 | /* [De]Initialisation handlers. */ | |
183 | int (*init) (DSO *dso); | |
184 | int (*finish) (DSO *dso); | |
185 | /* Return pathname of the module containing location */ | |
186 | int (*pathbyaddr) (void *addr, char *path, int sz); | |
187 | /* Perform global symbol lookup, i.e. among *all* modules */ | |
188 | void *(*globallookup) (const char *symname); | |
189 | } DSO_METHOD; | |
8f4fac7f GT |
190 | |
191 | /**********************************************************************/ | |
192 | /* The low-level handle type used to refer to a loaded shared library */ | |
193 | ||
10621efd MC |
194 | struct dso_st { |
195 | DSO_METHOD *meth; | |
196 | /* | |
197 | * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use | |
198 | * anything but will need to cache the filename for use in the dso_bind | |
199 | * handler. All in all, let each method control its own destiny. | |
200 | * "Handles" and such go in a STACK. | |
201 | */ | |
202 | STACK_OF(void) *meth_data; | |
203 | int references; | |
204 | int flags; | |
205 | /* | |
206 | * For use by applications etc ... use this for your bits'n'pieces, don't | |
207 | * touch meth_data! | |
208 | */ | |
209 | CRYPTO_EX_DATA ex_data; | |
210 | /* | |
211 | * If this callback function pointer is set to non-NULL, then it will be | |
212 | * used in DSO_load() in place of meth->dso_name_converter. NB: This | |
213 | * should normally set using DSO_set_name_converter(). | |
214 | */ | |
215 | DSO_NAME_CONVERTER_FUNC name_converter; | |
216 | /* | |
217 | * If this callback function pointer is set to non-NULL, then it will be | |
218 | * used in DSO_load() in place of meth->dso_merger. NB: This should | |
219 | * normally set using DSO_set_merger(). | |
220 | */ | |
221 | DSO_MERGER_FUNC merger; | |
222 | /* | |
223 | * This is populated with (a copy of) the platform-independant filename | |
224 | * used for this DSO. | |
225 | */ | |
226 | char *filename; | |
227 | /* | |
228 | * This is populated with (a copy of) the translated filename by which | |
229 | * the DSO was actually loaded. It is NULL iff the DSO is not currently | |
230 | * loaded. NB: This is here because the filename translation process may | |
231 | * involve a callback being invoked more than once not only to convert to | |
232 | * a platform-specific form, but also to try different filenames in the | |
233 | * process of trying to perform a load. As such, this variable can be | |
234 | * used to indicate (a) whether this DSO structure corresponds to a | |
235 | * loaded library or not, and (b) the filename with which it was actually | |
236 | * loaded. | |
237 | */ | |
238 | char *loaded_filename; | |
239 | }; | |
240 | ||
241 | DSO *DSO_new(void); | |
242 | DSO *DSO_new_method(DSO_METHOD *method); | |
243 | int DSO_free(DSO *dso); | |
244 | int DSO_flags(DSO *dso); | |
245 | int DSO_up_ref(DSO *dso); | |
246 | long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg); | |
247 | ||
248 | /* | |
249 | * This function sets the DSO's name_converter callback. If it is non-NULL, | |
51c8dc37 GT |
250 | * then it will be used instead of the associated DSO_METHOD's function. If |
251 | * oldcb is non-NULL then it is set to the function pointer value being | |
10621efd MC |
252 | * replaced. Return value is non-zero for success. |
253 | */ | |
254 | int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb, | |
255 | DSO_NAME_CONVERTER_FUNC *oldcb); | |
256 | /* | |
257 | * These functions can be used to get/set the platform-independant filename | |
258 | * used for a DSO. NB: set will fail if the DSO is already loaded. | |
259 | */ | |
51c8dc37 | 260 | const char *DSO_get_filename(DSO *dso); |
10621efd MC |
261 | int DSO_set_filename(DSO *dso, const char *filename); |
262 | /* | |
263 | * This function will invoke the DSO's name_converter callback to translate a | |
51c8dc37 GT |
264 | * filename, or if the callback isn't set it will instead use the DSO_METHOD's |
265 | * converter. If "filename" is NULL, the "filename" in the DSO itself will be | |
266 | * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is | |
267 | * simply duplicated. NB: This function is usually called from within a | |
10621efd MC |
268 | * DSO_METHOD during the processing of a DSO_load() call, and is exposed so |
269 | * that caller-created DSO_METHODs can do the same thing. A non-NULL return | |
270 | * value will need to be OPENSSL_free()'d. | |
271 | */ | |
272 | char *DSO_convert_filename(DSO *dso, const char *filename); | |
273 | /* | |
274 | * This function will invoke the DSO's merger callback to merge two file | |
cbecb3ac RL |
275 | * specifications, or if the callback isn't set it will instead use the |
276 | * DSO_METHOD's merger. A non-NULL return value will need to be | |
10621efd MC |
277 | * OPENSSL_free()'d. |
278 | */ | |
279 | char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2); | |
280 | /* | |
281 | * If the DSO is currently loaded, this returns the filename that it was | |
282 | * loaded under, otherwise it returns NULL. So it is also useful as a test as | |
283 | * to whether the DSO is currently loaded. NB: This will not necessarily | |
284 | * return the same value as DSO_convert_filename(dso, dso->filename), because | |
285 | * the DSO_METHOD's load function may have tried a variety of filenames (with | |
51c8dc37 | 286 | * and/or without the aid of the converters) before settling on the one it |
10621efd MC |
287 | * actually loaded. |
288 | */ | |
51c8dc37 GT |
289 | const char *DSO_get_loaded_filename(DSO *dso); |
290 | ||
10621efd | 291 | void DSO_set_default_method(DSO_METHOD *meth); |
8f4fac7f GT |
292 | DSO_METHOD *DSO_get_default_method(void); |
293 | DSO_METHOD *DSO_get_method(DSO *dso); | |
294 | DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth); | |
295 | ||
10621efd MC |
296 | /* |
297 | * The all-singing all-dancing load function, you normally pass NULL for the | |
298 | * first and third parameters. Use DSO_up and DSO_free for subsequent | |
299 | * reference count handling. Any flags passed in will be set in the | |
300 | * constructed DSO after its init() function but before the load operation. | |
301 | * If 'dso' is non-NULL, 'flags' is ignored. | |
302 | */ | |
b9e63915 | 303 | DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags); |
8f4fac7f | 304 | |
e9a68cfb GT |
305 | /* This function binds to a variable inside a shared library. */ |
306 | void *DSO_bind_var(DSO *dso, const char *symname); | |
307 | ||
308 | /* This function binds to a function inside a shared library. */ | |
309 | DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname); | |
8f4fac7f | 310 | |
10621efd MC |
311 | /* |
312 | * This method is the default, but will beg, borrow, or steal whatever method | |
313 | * should be the default on any particular platform (including | |
314 | * DSO_METH_null() if necessary). | |
315 | */ | |
8f4fac7f GT |
316 | DSO_METHOD *DSO_METHOD_openssl(void); |
317 | ||
10621efd MC |
318 | /* |
319 | * This method is defined for all platforms - if a platform has no DSO | |
320 | * support then this will be the only method! | |
321 | */ | |
8f4fac7f GT |
322 | DSO_METHOD *DSO_METHOD_null(void); |
323 | ||
10621efd MC |
324 | /* |
325 | * If DSO_DLFCN is defined, the standard dlfcn.h-style functions (dlopen, | |
326 | * dlclose, dlsym, etc) will be used and incorporated into this method. If | |
327 | * not, this method will return NULL. | |
328 | */ | |
8f4fac7f GT |
329 | DSO_METHOD *DSO_METHOD_dlfcn(void); |
330 | ||
10621efd MC |
331 | /* |
332 | * If DSO_DL is defined, the standard dl.h-style functions (shl_load, | |
333 | * shl_unload, shl_findsym, etc) will be used and incorporated into this | |
334 | * method. If not, this method will return NULL. | |
335 | */ | |
8f4fac7f GT |
336 | DSO_METHOD *DSO_METHOD_dl(void); |
337 | ||
338 | /* If WIN32 is defined, use DLLs. If not, return NULL. */ | |
339 | DSO_METHOD *DSO_METHOD_win32(void); | |
340 | ||
0e05f545 RL |
341 | /* If VMS is defined, use shared images. If not, return NULL. */ |
342 | DSO_METHOD *DSO_METHOD_vms(void); | |
343 | ||
10621efd MC |
344 | /* |
345 | * This function writes null-terminated pathname of DSO module containing | |
346 | * 'addr' into 'sz' large caller-provided 'path' and returns the number of | |
347 | * characters [including trailing zero] written to it. If 'sz' is 0 or | |
348 | * negative, 'path' is ignored and required amount of charachers [including | |
349 | * trailing zero] to accomodate pathname is returned. If 'addr' is NULL, then | |
350 | * pathname of cryptolib itself is returned. Negative or zero return value | |
351 | * denotes error. | |
352 | */ | |
353 | int DSO_pathbyaddr(void *addr, char *path, int sz); | |
354 | ||
355 | /* | |
356 | * This function should be used with caution! It looks up symbols in *all* | |
357 | * loaded modules and if module gets unloaded by somebody else attempt to | |
358 | * dereference the pointer is doomed to have fatal consequences. Primary | |
359 | * usage for this function is to probe *core* system functionality, e.g. | |
360 | * check if getnameinfo(3) is available at run-time without bothering about | |
361 | * OS-specific details such as libc.so.versioning or where does it actually | |
362 | * reside: in libc itself or libsocket. | |
7ed87653 | 363 | */ |
c6cb42e4 AP |
364 | void *DSO_global_lookup(const char *name); |
365 | ||
4700aea9 UM |
366 | /* If BeOS is defined, use shared images. If not, return NULL. */ |
367 | DSO_METHOD *DSO_METHOD_beos(void); | |
368 | ||
8f4fac7f | 369 | /* BEGIN ERROR CODES */ |
10621efd MC |
370 | /* |
371 | * The following lines are auto generated by the script mkerr.pl. Any changes | |
8f4fac7f GT |
372 | * made after this point may be overwritten when the script is next run. |
373 | */ | |
b476df64 | 374 | void ERR_load_DSO_strings(void); |
8f4fac7f GT |
375 | |
376 | /* Error codes for the DSO functions. */ | |
377 | ||
378 | /* Function codes. */ | |
10621efd MC |
379 | # define DSO_F_BEOS_BIND_FUNC 144 |
380 | # define DSO_F_BEOS_BIND_VAR 145 | |
381 | # define DSO_F_BEOS_LOAD 146 | |
382 | # define DSO_F_BEOS_NAME_CONVERTER 147 | |
383 | # define DSO_F_BEOS_UNLOAD 148 | |
384 | # define DSO_F_DLFCN_BIND_FUNC 100 | |
385 | # define DSO_F_DLFCN_BIND_VAR 101 | |
386 | # define DSO_F_DLFCN_LOAD 102 | |
387 | # define DSO_F_DLFCN_MERGER 130 | |
388 | # define DSO_F_DLFCN_NAME_CONVERTER 123 | |
389 | # define DSO_F_DLFCN_UNLOAD 103 | |
390 | # define DSO_F_DL_BIND_FUNC 104 | |
391 | # define DSO_F_DL_BIND_VAR 105 | |
392 | # define DSO_F_DL_LOAD 106 | |
393 | # define DSO_F_DL_MERGER 131 | |
394 | # define DSO_F_DL_NAME_CONVERTER 124 | |
395 | # define DSO_F_DL_UNLOAD 107 | |
396 | # define DSO_F_DSO_BIND_FUNC 108 | |
397 | # define DSO_F_DSO_BIND_VAR 109 | |
398 | # define DSO_F_DSO_CONVERT_FILENAME 126 | |
399 | # define DSO_F_DSO_CTRL 110 | |
400 | # define DSO_F_DSO_FREE 111 | |
401 | # define DSO_F_DSO_GET_FILENAME 127 | |
402 | # define DSO_F_DSO_GET_LOADED_FILENAME 128 | |
403 | # define DSO_F_DSO_GLOBAL_LOOKUP 139 | |
404 | # define DSO_F_DSO_LOAD 112 | |
405 | # define DSO_F_DSO_MERGE 132 | |
406 | # define DSO_F_DSO_NEW_METHOD 113 | |
407 | # define DSO_F_DSO_PATHBYADDR 140 | |
408 | # define DSO_F_DSO_SET_FILENAME 129 | |
409 | # define DSO_F_DSO_SET_NAME_CONVERTER 122 | |
410 | # define DSO_F_DSO_UP_REF 114 | |
411 | # define DSO_F_GLOBAL_LOOKUP_FUNC 138 | |
412 | # define DSO_F_PATHBYADDR 137 | |
413 | # define DSO_F_VMS_BIND_SYM 115 | |
414 | # define DSO_F_VMS_LOAD 116 | |
415 | # define DSO_F_VMS_MERGER 133 | |
416 | # define DSO_F_VMS_UNLOAD 117 | |
417 | # define DSO_F_WIN32_BIND_FUNC 118 | |
418 | # define DSO_F_WIN32_BIND_VAR 119 | |
419 | # define DSO_F_WIN32_GLOBALLOOKUP 142 | |
420 | # define DSO_F_WIN32_GLOBALLOOKUP_FUNC 143 | |
421 | # define DSO_F_WIN32_JOINER 135 | |
422 | # define DSO_F_WIN32_LOAD 120 | |
423 | # define DSO_F_WIN32_MERGER 134 | |
424 | # define DSO_F_WIN32_NAME_CONVERTER 125 | |
425 | # define DSO_F_WIN32_PATHBYADDR 141 | |
426 | # define DSO_F_WIN32_SPLITTER 136 | |
427 | # define DSO_F_WIN32_UNLOAD 121 | |
8f4fac7f GT |
428 | |
429 | /* Reason codes. */ | |
10621efd MC |
430 | # define DSO_R_CTRL_FAILED 100 |
431 | # define DSO_R_DSO_ALREADY_LOADED 110 | |
432 | # define DSO_R_EMPTY_FILE_STRUCTURE 113 | |
433 | # define DSO_R_FAILURE 114 | |
434 | # define DSO_R_FILENAME_TOO_BIG 101 | |
435 | # define DSO_R_FINISH_FAILED 102 | |
436 | # define DSO_R_INCORRECT_FILE_SYNTAX 115 | |
437 | # define DSO_R_LOAD_FAILED 103 | |
438 | # define DSO_R_NAME_TRANSLATION_FAILED 109 | |
439 | # define DSO_R_NO_FILENAME 111 | |
440 | # define DSO_R_NO_FILE_SPECIFICATION 116 | |
441 | # define DSO_R_NULL_HANDLE 104 | |
442 | # define DSO_R_SET_FILENAME_FAILED 112 | |
443 | # define DSO_R_STACK_ERROR 105 | |
444 | # define DSO_R_SYM_FAILURE 106 | |
445 | # define DSO_R_UNLOAD_FAILED 107 | |
446 | # define DSO_R_UNSUPPORTED 108 | |
8f4fac7f GT |
447 | |
448 | #ifdef __cplusplus | |
449 | } | |
450 | #endif | |
451 | #endif |