Commit | Line | Data |
---|---|---|
8d138742 CE |
1 | /* lt__private.h -- internal apis for libltdl |
2 | ||
3 | Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. | |
4 | Written by Gary V. Vaughan, 2004 | |
5 | ||
6 | NOTE: The canonical source of this file is maintained with the | |
7 | GNU Libtool package. Report bugs to bug-libtool@gnu.org. | |
8 | ||
9 | This library is free software; you can redistribute it and/or | |
10 | modify it under the terms of the GNU Lesser General Public | |
11 | License as published by the Free Software Foundation; either | |
12 | version 2 of the License, or (at your option) any later version. | |
13 | ||
14 | As a special exception to the GNU Lesser General Public License, | |
15 | if you distribute this file as part of a program or library that | |
16 | is built using GNU libtool, you may include this file under the | |
17 | same distribution terms that you use for the rest of that program. | |
18 | ||
19 | GNU Libltdl is distributed in the hope that it will be useful, | |
20 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
22 | GNU Lesser General Public License for more details. | |
23 | ||
24 | You should have received a copy of the GNU Lesser General Public | |
25 | License along with GNU Libltdl; see the file COPYING.LIB. If not, a | |
26 | copy con be downloaded from http://www.gnu.org/licenses/lgpl.html, | |
27 | or obtained by writing to the Free Software Foundation, Inc., | |
28 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
29 | */ | |
30 | ||
31 | #if !defined(LT__PRIVATE_H) | |
32 | #define LT__PRIVATE_H 1 | |
33 | ||
34 | #if defined(LT_CONFIG_H) | |
35 | # include LT_CONFIG_H | |
36 | #else | |
37 | # include <config.h> | |
38 | #endif | |
39 | ||
40 | #include <stdio.h> | |
41 | #include <ctype.h> | |
42 | #include <assert.h> | |
43 | #include <errno.h> | |
44 | #include <string.h> | |
45 | ||
46 | #if defined(HAVE_UNISTD_H) | |
47 | # include <unistd.h> | |
48 | #endif | |
49 | ||
50 | /* Import internal interfaces... */ | |
51 | #include "lt__alloc.h" | |
52 | #include "lt__dirent.h" | |
53 | #include "lt__strl.h" | |
54 | #include "lt__glibc.h" | |
55 | ||
56 | /* ...and all exported interfaces. */ | |
57 | #include "ltdl.h" | |
58 | ||
59 | #if defined(WITH_DMALLOC) | |
60 | # include <dmalloc.h> | |
61 | #endif | |
62 | ||
63 | /* DLL building support on win32 hosts; mostly to workaround their | |
64 | ridiculous implementation of data symbol exporting. */ | |
65 | #ifndef LT_GLOBAL_DATA | |
66 | # if defined(__WINDOWS__) || defined(__CYGWIN__) | |
67 | # if defined(DLL_EXPORT) /* defined by libtool (if required) */ | |
68 | # define LT_GLOBAL_DATA __declspec(dllexport) | |
69 | # endif | |
70 | # endif | |
71 | # ifndef LT_GLOBAL_DATA | |
72 | # define LT_GLOBAL_DATA /* static linking or !__WINDOWS__ */ | |
73 | # endif | |
74 | #endif | |
75 | ||
76 | #ifndef __attribute__ | |
77 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__ | |
78 | # define __attribute__(x) | |
79 | # endif | |
80 | #endif | |
81 | ||
82 | #ifndef LT__UNUSED | |
83 | # define LT__UNUSED __attribute__ ((__unused__)) | |
84 | #endif | |
85 | ||
86 | ||
87 | LT_BEGIN_C_DECLS | |
88 | ||
89 | #if !defined(errno) | |
90 | extern int errno; | |
91 | #endif | |
92 | ||
93 | LT_SCOPE void lt__alloc_die_callback (void); | |
94 | ||
95 | ||
96 | /* For readability: */ | |
97 | #define strneq(s1, s2) (strcmp((s1), (s2)) != 0) | |
98 | #define streq(s1, s2) (!strcmp((s1), (s2))) | |
99 | ||
100 | ||
101 | ||
102 | /* --- OPAQUE STRUCTURES DECLARED IN LTDL.H --- */ | |
103 | ||
104 | /* This type is used for the array of interface data sets in each handler. */ | |
105 | typedef struct { | |
106 | lt_dlinterface_id key; | |
107 | void * data; | |
108 | } lt_interface_data; | |
109 | ||
110 | struct lt__handle { | |
111 | lt_dlhandle next; | |
112 | const lt_dlvtable * vtable; /* dlopening interface */ | |
113 | lt_dlinfo info; /* user visible fields */ | |
114 | int depcount; /* number of dependencies */ | |
115 | lt_dlhandle * deplibs; /* dependencies */ | |
116 | lt_module module; /* system module handle */ | |
117 | void * system; /* system specific data */ | |
118 | lt_interface_data * interface_data; /* per caller associated data */ | |
119 | int flags; /* various boolean stats */ | |
120 | }; | |
121 | ||
122 | struct lt__advise { | |
123 | unsigned int try_ext:1; /* try system library extensions. */ | |
124 | unsigned int is_resident:1; /* module can't be unloaded. */ | |
125 | unsigned int is_symglobal:1; /* module symbols can satisfy | |
126 | subsequently loaded modules. */ | |
127 | unsigned int is_symlocal:1; /* module symbols are only available | |
128 | locally. */ | |
129 | unsigned int try_preload_only:1;/* only preloaded modules will be tried. */ | |
130 | }; | |
131 | ||
132 | /* --- ERROR HANDLING --- */ | |
133 | ||
134 | /* Extract the diagnostic strings from the error table macro in the same | |
135 | order as the enumerated indices in lt_error.h. */ | |
136 | ||
137 | #define LT__STRERROR(name) lt__error_string(LT_CONC(LT_ERROR_,name)) | |
138 | ||
139 | #define LT__GETERROR(lvalue) (lvalue) = lt__get_last_error() | |
140 | #define LT__SETERRORSTR(errormsg) lt__set_last_error(errormsg) | |
141 | #define LT__SETERROR(errorcode) LT__SETERRORSTR(LT__STRERROR(errorcode)) | |
142 | ||
143 | LT_SCOPE const char *lt__error_string (int errorcode); | |
144 | LT_SCOPE const char *lt__get_last_error (void); | |
145 | LT_SCOPE const char *lt__set_last_error (const char *errormsg); | |
146 | ||
147 | LT_END_C_DECLS | |
148 | ||
149 | #endif /*!defined(LT__PRIVATE_H)*/ |