root/lib/replace/dlfcn.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rep_dlopen
  2. rep_dlsym
  3. rep_dlerror
  4. rep_dlclose

   1 /* 
   2    Unix SMB/CIFS implementation.
   3    Samba system utilities
   4    Copyright (C) Andrew Tridgell 1992-1998
   5    Copyright (C) Jeremy Allison 1998-2002
   6    Copyright (C) Jelmer Vernooij 2006
   7 
   8      ** NOTE! The following LGPL license applies to the replace
   9      ** library. This does NOT imply that all of Samba is released
  10      ** under the LGPL
  11    
  12    This library is free software; you can redistribute it and/or
  13    modify it under the terms of the GNU Lesser General Public
  14    License as published by the Free Software Foundation; either
  15    version 3 of the License, or (at your option) any later version.
  16 
  17    This library is distributed in the hope that it will be useful,
  18    but WITHOUT ANY WARRANTY; without even the implied warranty of
  19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  20    Lesser General Public License for more details.
  21 
  22    You should have received a copy of the GNU Lesser General Public
  23    License along with this library; if not, see <http://www.gnu.org/licenses/>.
  24 */
  25 
  26 #include "replace.h"
  27 #ifdef HAVE_DL_H
  28 #include <dl.h>
  29 #endif
  30 
  31 #ifndef HAVE_DLOPEN
  32 #ifdef DLOPEN_TAKES_UNSIGNED_FLAGS
  33 void *rep_dlopen(const char *name, unsigned int flags)
     /* [<][>][^][v][top][bottom][index][help] */
  34 #else
  35 void *rep_dlopen(const char *name, int flags)
  36 #endif
  37 {
  38 #ifdef HAVE_SHL_LOAD
  39         if (name == NULL)
  40                 return PROG_HANDLE;
  41         return (void *)shl_load(name, flags, 0);
  42 #else
  43         return NULL;
  44 #endif
  45 }
  46 #endif
  47 
  48 #ifndef HAVE_DLSYM
  49 void *rep_dlsym(void *handle, const char *symbol)
     /* [<][>][^][v][top][bottom][index][help] */
  50 {
  51 #ifdef HAVE_SHL_FINDSYM
  52         void *sym_addr;
  53         if (!shl_findsym((shl_t *)&handle, symbol, TYPE_UNDEFINED, &sym_addr))
  54                 return sym_addr;
  55 #endif
  56     return NULL;
  57 }
  58 #endif
  59 
  60 #ifndef HAVE_DLERROR
  61 char *rep_dlerror(void)
     /* [<][>][^][v][top][bottom][index][help] */
  62 {
  63         return "dynamic loading of objects not supported on this platform";
  64 }
  65 #endif
  66 
  67 #ifndef HAVE_DLCLOSE
  68 int rep_dlclose(void *handle)
     /* [<][>][^][v][top][bottom][index][help] */
  69 {
  70 #ifdef HAVE_SHL_CLOSE
  71         return shl_unload((shl_t)handle);
  72 #else
  73         return 0;
  74 #endif
  75 }
  76 #endif

/* [<][>][^][v][top][bottom][index][help] */