source: vendor/gcc/3.2.2/libjava/libltdl/ltdl.h

Last change on this file was 2, checked in by bird, 22 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 9.0 KB
Line 
1/* ltdl.h -- generic dlopen functions
2 Copyright (C) 1998-2000 Free Software Foundation, Inc.
3 Originally by Thomas Tanner <tanner@ffii.org>
4 This file is part of GNU Libtool.
5
6This library is free software; you can redistribute it and/or
7modify it under the terms of the GNU Lesser General Public
8License as published by the Free Software Foundation; either
9version 2 of the License, or (at your option) any later version.
10
11As a special exception to the GNU Lesser General Public License,
12if you distribute this file as part of a program or library that
13is built using GNU libtool, you may include it under the same
14distribution terms that you use for the rest of that program.
15
16This library is distributed in the hope that it will be useful,
17but WITHOUT ANY WARRANTY; without even the implied warranty of
18MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19Lesser General Public License for more details.
20
21You should have received a copy of the GNU Lesser General Public
22License along with this library; if not, write to the Free
23Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
2402111-1307 USA
25*/
26
27/* Only include this header file once. */
28#ifndef _LTDL_H_
29#define _LTDL_H_ 1
30
31/* Canonicalise Windows and Cygwin recognition macros. */
32#ifdef __CYGWIN32__
33# ifndef __CYGWIN__
34# define __CYGWIN__ __CYGWIN32__
35# endif
36#endif
37#ifdef _WIN32
38# ifndef WIN32
39# define WIN32 _WIN32
40# endif
41#endif
42
43/* __BEGIN_DECLS should be used at the beginning of your declarations,
44 so that C++ compilers don't mangle their names. Use __END_DECLS at
45 the end of C declarations. */
46#undef __BEGIN_DECLS
47#undef __END_DECLS
48#ifdef __cplusplus
49# define __BEGIN_DECLS extern "C" {
50# define __END_DECLS }
51#else
52# define __BEGIN_DECLS /* empty */
53# define __END_DECLS /* empty */
54#endif
55
56/* LTDL_PARAMS is a macro used to wrap function prototypes, so that compilers
57 that don't understand ANSI C prototypes still work, and ANSI C
58 compilers can issue warnings about type mismatches. */
59#undef LTDL_PARAMS
60#undef lt_ptr_t
61#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32) || defined(__cplusplus)
62# define LTDL_PARAMS(protos) protos
63# define lt_ptr_t void*
64#else
65# define LTDL_PARAMS(protos) ()
66# define lt_ptr_t char*
67#endif
68
69/* LTDL_STMT_START/END are used to create macros which expand to a
70 a single compound statement in a portable way. */
71#undef LTDL_STMT_START
72#undef LTDL_STMT_END
73#if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus)
74# define LTDL_STMT_START (void)(
75# define LTDL_STMT_END )
76#else
77# if (defined (sun) || defined (__sun__))
78# define LTDL_STMT_START if (1)
79# define LTDL_STMT_END else (void)0
80# else
81# define LTDL_STMT_START do
82# define LTDL_STMT_END while (0)
83# endif
84#endif
85
86#ifdef WIN32
87# ifndef __CYGWIN__
88/* LTDL_DIRSEP_CHAR is accepted *in addition* to '/' as a directory
89 separator when it is set. */
90# define LTDL_DIRSEP_CHAR '\\'
91# define LTDL_PATHSEP_CHAR ';'
92# endif
93#endif
94#ifndef LTDL_PATHSEP_CHAR
95# define LTDL_PATHSEP_CHAR ':'
96#endif
97
98/* DLL building support on win32 hosts; mostly to workaround their
99 ridiculous implementation of data symbol exporting. */
100#ifndef LTDL_SCOPE
101# ifdef _WIN32
102# ifdef DLL_EXPORT /* defined by libtool (if required) */
103# define LTDL_SCOPE __declspec(dllexport)
104# endif
105# ifdef LIBLTDL_DLL_IMPORT /* define if linking with this dll */
106# define LTDL_SCOPE extern __declspec(dllimport)
107# endif
108# endif
109# ifndef LTDL_SCOPE /* static linking or !_WIN32 */
110# define LTDL_SCOPE extern
111# endif
112#endif
113
114#include <stdlib.h>
115
116/* Defining error strings alongside their symbolic names in a macro in
117 this way allows us to expand the macro in different contexts with
118 confidence that the enumeration of symbolic names will map correctly
119 onto the table of error strings. */
120#define ltdl_error_table \
121 LTDL_ERROR(UNKNOWN, "unknown error") \
122 LTDL_ERROR(DLOPEN_NOT_SUPPORTED, "dlopen support not available")\
123 LTDL_ERROR(INVALID_LOADER, "invalid loader") \
124 LTDL_ERROR(INIT_LOADER, "loader initialization failed") \
125 LTDL_ERROR(REMOVE_LOADER, "loader removal failed") \
126 LTDL_ERROR(FILE_NOT_FOUND, "file not found") \
127 LTDL_ERROR(DEPLIB_NOT_FOUND, "dependency library not found") \
128 LTDL_ERROR(NO_SYMBOLS, "no symbols defined") \
129 LTDL_ERROR(CANNOT_OPEN, "can't open the module") \
130 LTDL_ERROR(CANNOT_CLOSE, "can't close the module") \
131 LTDL_ERROR(SYMBOL_NOT_FOUND, "symbol not found") \
132 LTDL_ERROR(NO_MEMORY, "not enough memory") \
133 LTDL_ERROR(INVALID_HANDLE, "invalid module handle") \
134 LTDL_ERROR(BUFFER_OVERFLOW, "internal buffer overflow") \
135 LTDL_ERROR(INVALID_ERRORCODE, "invalid errorcode") \
136 LTDL_ERROR(SHUTDOWN, "library already shutdown")
137
138/* Enumerate the symbolic error names. */
139#if defined(__STDC__) || defined(__cplusplus)
140# define LTDL_ERROR(name, diagnostic) LTDL_ERROR_##name,
141#else
142# define LTDL_ERROR(name, diagnostic) LTDL_ERROR_/**/name,
143#endif
144enum {
145 ltdl_error_table
146 LTDL_ERROR_MAX
147};
148#undef LTDL_ERROR
149
150/* An opaque handle for a successfully lt_dlopened module instance. */
151#ifdef _LTDL_COMPILE_
152typedef struct lt_dlhandle_t *lt_dlhandle;
153#else
154typedef lt_ptr_t lt_dlhandle;
155#endif
156
157/* A preopened symbol. Arrays of this type comprise the exported
158 symbols for a dlpreopened module. */
159typedef struct {
160 const char *name;
161 lt_ptr_t address;
162} lt_dlsymlist;
163
164/* Read only information pertaining to a loaded module. */
165typedef struct {
166 char *filename; /* file name */
167 char *name; /* module name */
168 int ref_count; /* number of times lt_dlopened minus
169 number of times lt_dlclosed. */
170} lt_dlinfo;
171
172/* An opaque handle for a module loaded by a system call. This is only
173 used internally by ltdl loaders, and by user module loaders. */
174typedef lt_ptr_t lt_module_t;
175
176/* An opaque handle for a module loader. */
177#ifdef _LTDL_COMPILE_
178typedef struct lt_dlloader_t lt_dlloader_t;
179#else
180typedef lt_ptr_t lt_dlloader_t;
181#endif
182
183typedef lt_ptr_t lt_dlloader_data_t;
184
185/* Function pointer types for creating user defined module loaders. */
186typedef lt_module_t lt_module_open_t LTDL_PARAMS((lt_dlloader_data_t loader_data, const char *filename));
187typedef int lt_module_close_t LTDL_PARAMS((lt_dlloader_data_t loader_data, lt_module_t handle));
188typedef lt_ptr_t lt_find_sym_t LTDL_PARAMS((lt_dlloader_data_t loader_data, lt_module_t handle, const char *symbol));
189typedef int lt_dlloader_exit_t LTDL_PARAMS((lt_dlloader_data_t loader_data));
190
191__BEGIN_DECLS
192/* Initialisation and finalisation functions for libltdl. */
193extern int lt_dlinit LTDL_PARAMS((void));
194extern int lt_dlexit LTDL_PARAMS((void));
195
196/* Module search path manipultation. */
197extern int lt_dladdsearchdir LTDL_PARAMS((const char *search_dir));
198extern int lt_dlsetsearchpath LTDL_PARAMS((const char *search_path));
199extern const char *lt_dlgetsearchpath LTDL_PARAMS((void));
200
201/* Portable libltdl versions of the system dlopen() API. */
202extern lt_dlhandle lt_dlopen LTDL_PARAMS((const char *filename));
203extern lt_dlhandle lt_dlopenext LTDL_PARAMS((const char *filename));
204extern lt_ptr_t lt_dlsym LTDL_PARAMS((lt_dlhandle handle, const char *name));
205extern const char *lt_dlerror LTDL_PARAMS((void));
206extern int lt_dlclose LTDL_PARAMS((lt_dlhandle handle));
207
208/* Support for preloaded modules through lt_dlopen() API. */
209extern int lt_dlpreload LTDL_PARAMS((const lt_dlsymlist *preloaded));
210extern int lt_dlpreload_default LTDL_PARAMS((const lt_dlsymlist *preloaded));
211
212#define LTDL_SET_PRELOADED_SYMBOLS() LTDL_STMT_START{ \
213 extern const lt_dlsymlist lt_preloaded_symbols[]; \
214 lt_dlpreload_default(lt_preloaded_symbols); \
215 }LTDL_STMT_END
216
217/* Managing user data associated with a loaded modules. */
218extern const lt_dlinfo *lt_dlgetinfo LTDL_PARAMS((lt_dlhandle handle));
219extern int lt_dlforeach LTDL_PARAMS((
220 int (*func)(lt_dlhandle handle, lt_ptr_t data), lt_ptr_t data));
221
222/* User module loader API. */
223struct lt_user_dlloader {
224 const char *sym_prefix;
225 lt_module_open_t *module_open;
226 lt_module_close_t *module_close;
227 lt_find_sym_t *find_sym;
228 lt_dlloader_exit_t *dlloader_exit;
229 lt_dlloader_data_t dlloader_data;
230};
231
232extern lt_dlloader_t *lt_dlloader_next LTDL_PARAMS((lt_dlloader_t *place));
233extern lt_dlloader_t *lt_dlloader_find LTDL_PARAMS((const char *loader_name));
234extern const char *lt_dlloader_name LTDL_PARAMS((lt_dlloader_t *place));
235extern lt_dlloader_data_t *lt_dlloader_data LTDL_PARAMS((lt_dlloader_t *place));
236extern lt_dlloader_t *lt_find_dlloader LTDL_PARAMS((const char *loader_name));
237extern int lt_dlloader_add LTDL_PARAMS((lt_dlloader_t *place, const struct lt_user_dlloader *dlloader, const char *loader_name));
238extern int lt_dlloader_remove LTDL_PARAMS((const char *loader_name));
239
240/* Integrated lt_dlerror() messages for user loaders. */
241extern int lt_dladderror LTDL_PARAMS((const char *diagnostic));
242extern int lt_dlseterror LTDL_PARAMS((int errorcode));
243
244/* Pointers to memory management functions to be used by libltdl. */
245LTDL_SCOPE lt_ptr_t (*lt_dlmalloc)LTDL_PARAMS((size_t size));
246LTDL_SCOPE void (*lt_dlfree)LTDL_PARAMS((lt_ptr_t ptr));
247
248__END_DECLS
249
250#endif /* !_LTDL_H_ */
Note: See TracBrowser for help on using the repository browser.