2006-09-19 02:49:20 +04:00
/*
Unix SMB / CIFS implementation .
Samba system utilities
Copyright ( C ) Andrew Tridgell 1992 - 1998
Copyright ( C ) Jeremy Allison 1998 - 2002
* * NOTE ! The following LGPL license applies to the replace
* * library . This does NOT imply that all of Samba is released
* * under the LGPL
This library is free software ; you can redistribute it and / or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation ; either
2007-07-10 05:44:42 +04:00
version 3 of the License , or ( at your option ) any later version .
2006-09-19 02:49:20 +04:00
This library is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public
2007-07-10 07:42:26 +04:00
License along with this library ; if not , see < http : //www.gnu.org/licenses/>.
2006-09-19 02:49:20 +04:00
*/
# include "replace.h"
2007-11-06 07:26:52 +03:00
# ifdef HAVE_DL_H
# include <dl.h>
# endif
2006-09-19 02:49:20 +04:00
# ifndef HAVE_DLOPEN
2007-06-02 13:10:08 +04:00
# ifdef DLOPEN_TAKES_UNSIGNED_FLAGS
void * rep_dlopen ( const char * name , unsigned int flags )
# else
2006-10-18 07:26:58 +04:00
void * rep_dlopen ( const char * name , int flags )
2007-06-02 13:10:08 +04:00
# endif
2006-09-19 02:49:20 +04:00
{
2007-11-06 07:26:52 +03:00
# ifdef HAVE_SHL_LOAD
2008-02-20 22:05:51 +03:00
if ( name = = NULL )
return PROG_HANDLE ;
2007-11-06 07:26:52 +03:00
return ( void * ) shl_load ( name , flags , 0 ) ;
# else
2006-09-19 02:49:20 +04:00
return NULL ;
2007-11-06 07:26:52 +03:00
# endif
2006-09-19 02:49:20 +04:00
}
# endif
# ifndef HAVE_DLSYM
2006-10-18 07:26:58 +04:00
void * rep_dlsym ( void * handle , const char * symbol )
2006-09-19 02:49:20 +04:00
{
2007-11-06 07:26:52 +03:00
# ifdef HAVE_SHL_FINDSYM
void * sym_addr ;
if ( ! shl_findsym ( ( shl_t * ) & handle , symbol , TYPE_UNDEFINED , & sym_addr ) )
return sym_addr ;
# endif
2006-09-19 02:49:20 +04:00
return NULL ;
}
# endif
# ifndef HAVE_DLERROR
2006-10-18 07:26:58 +04:00
char * rep_dlerror ( void )
2006-09-19 02:49:20 +04:00
{
return " dynamic loading of objects not supported on this platform " ;
}
# endif
# ifndef HAVE_DLCLOSE
2006-10-18 07:26:58 +04:00
int rep_dlclose ( void * handle )
2006-09-19 02:49:20 +04:00
{
2007-11-06 07:26:52 +03:00
# ifdef HAVE_SHL_CLOSE
return shl_unload ( ( shl_t ) handle ) ;
# else
2006-09-19 02:49:20 +04:00
return 0 ;
2007-11-06 07:26:52 +03:00
# endif
2006-09-19 02:49:20 +04:00
}
# endif