root/libltdl/libltdl/lt__private.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   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)*/

/* [previous][next][first][last][top][bottom][index][help] */