"Fossies" - the Fresh Open Source Software Archive

Member "bind-9.17.5/libltdl/ltdl.h" (4 Sep 2020, 5709 Bytes) of package /linux/misc/dns/bind9/9.17.5/bind-9.17.5.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "ltdl.h" see the Fossies "Dox" file reference documentation.

    1 /* ltdl.h -- generic dlopen functions
    2 
    3    Copyright (C) 1998-2000, 2004-2005, 2007-2008, 2011-2015 Free
    4    Software Foundation, Inc.
    5    Written by Thomas Tanner, 1998
    6 
    7    NOTE: The canonical source of this file is maintained with the
    8    GNU Libtool package.  Report bugs to bug-libtool@gnu.org.
    9 
   10 GNU Libltdl is free software; you can redistribute it and/or
   11 modify it under the terms of the GNU Lesser General Public
   12 License as published by the Free Software Foundation; either
   13 version 2 of the License, or (at your option) any later version.
   14 
   15 As a special exception to the GNU Lesser General Public License,
   16 if you distribute this file as part of a program or library that
   17 is built using GNU Libtool, you may include this file under the
   18 same distribution terms that you use for the rest of that program.
   19 
   20 GNU Libltdl is distributed in the hope that it will be useful,
   21 but WITHOUT ANY WARRANTY; without even the implied warranty of
   22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   23 GNU Lesser General Public License for more details.
   24 
   25 You should have received a copy of the GNU Lesser General Public
   26 License along with GNU Libltdl; see the file COPYING.LIB.  If not, a
   27 copy can be downloaded from  http://www.gnu.org/licenses/lgpl.html,
   28 or obtained by writing to the Free Software Foundation, Inc.,
   29 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
   30 */
   31 
   32 /* Only include this header file once. */
   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 /* LT_STRLEN can be used safely on NULL pointers.  */
   44 #define LT_STRLEN(s)    (((s) && (s)[0]) ? strlen (s) : 0)
   45 
   46 
   47 /* --- DYNAMIC MODULE LOADING API --- */
   48 
   49 
   50 typedef struct lt__handle *lt_dlhandle; /* A loaded module.  */
   51 
   52 /* Initialisation and finalisation functions for libltdl. */
   53 LT_SCOPE int        lt_dlinit       (void);
   54 LT_SCOPE int        lt_dlexit       (void);
   55 
   56 /* Module search path manipulation.  */
   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 /* User module loading advisors.  */
   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 /* Portable libltdl versions of the system dlopen() API. */
   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 /* --- PRELOADED MODULE SUPPORT --- */
   88 
   89 
   90 /* A preopened symbol. Arrays of this type comprise the exported
   91    symbols for a dlpreopened module. */
   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 /* Ensure C linkage.  */
  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 /* --- MODULE INFORMATION --- */
  115 
  116 
  117 /* Associating user data with loaded modules. */
  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 /* Read only information pertaining to a loaded module. */
  131 typedef struct {
  132   char *    filename;   /* file name */
  133   char *    name;       /* module name */
  134   int       ref_count;  /* number of times lt_dlopened minus
  135                    number of times lt_dlclosed. */
  136   unsigned int  is_resident:1;  /* module can't be unloaded. */
  137   unsigned int  is_symglobal:1; /* module symbols can satisfy
  138                    subsequently loaded modules.  */
  139   unsigned int  is_symlocal:1;  /* module symbols are only available
  140                    locally. */
  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 /* Deprecated module residency management API. */
  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 /*!defined LTDL_H*/