X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fsysdll.c;h=2bcfc67242577e565a3cf7a04bd03b7c2abe9627;hb=864248d400b03a9410f40b1f79991ff9e28aa58e;hp=d5f309c3638e84a142a7abe999796e193841df80;hpb=6883ee56ec887c2c48abe5b06b5e66aa74031910;p=chise%2Fxemacs-chise.git- diff --git a/src/sysdll.c b/src/sysdll.c index d5f309c..2bcfc67 100644 --- a/src/sysdll.c +++ b/src/sysdll.c @@ -24,23 +24,20 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #endif #include -#include -#include -#include #include "sysdll.h" -/* This whole file is conditional upon HAVE_DLL */ +/* This whole file is conditional upon HAVE_SHLIB */ #ifdef HAVE_SHLIB /* Thankfully, most systems follow the ELFish dlopen() method. ** HAVE__DLOPEN is lame, but SCO has their dl* functions as _dl*, and ** unless you include dlfcn.h you don't get the macros to mask them, and -** autoconf fails to find them. +** autoconf fails to find them. No longer true as of 5.0.5. ** ** Anybody who wants to use this on SCO needs to have their configure.in ** look for _dlopen() as well as dlopen() */ -#if defined(HAVE_DLOPEN) || defined(HAVE__DLOPEN) +#if defined(HAVE_DLOPEN) || defined(HAVE__DLOPEN) || defined(HAVE_DLFCN_H) #include #ifndef RTLD_LAZY @@ -52,13 +49,13 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #endif int -dll_init (CONST char *arg) +dll_init (const char *arg) { return 0; } dll_handle -dll_open (CONST char *fname) +dll_open (const char *fname) { return (dll_handle)dlopen (fname, RTLD_LAZY | RTLD_GLOBAL); } @@ -70,7 +67,7 @@ dll_close (dll_handle h) } dll_func -dll_function (dll_handle h, CONST char *n) +dll_function (dll_handle h, const char *n) { #ifdef DLSYM_NEEDS_UNDERSCORE char *buf = alloca_array (char, strlen (n) + 2); @@ -82,16 +79,24 @@ dll_function (dll_handle h, CONST char *n) } dll_var -dll_variable (dll_handle h, CONST char *n) +dll_variable (dll_handle h, const char *n) { +#ifdef DLSYM_NEEDS_UNDERSCORE + char *buf = alloca_array (char, strlen (n) + 2); + *buf = '_'; + (void)strcpy(buf + 1, n); + n = buf; +#endif return (dll_var)dlsym ((void *)h, n); } -CONST char * +const char * dll_error (dll_handle h) { -#ifdef HAVE_DLERROR - return (CONST char *)dlerror (); +#if defined(HAVE_DLERROR) || defined(dlerror) + return (const char *)dlerror (); +#elif defined(HAVE__DLERROR) + return (const char *)_dlerror(); #else return "Shared library error"; #endif @@ -101,13 +106,13 @@ dll_error (dll_handle h) /* This is the HP/UX version */ #include int -dll_init (CONST char *arg) +dll_init (const char *arg) { return 0; } dll_handle -dll_open (CONST char *fname) +dll_open (const char *fname) { shl_t h = shl_load (fname, BIND_DEFERRED,0L); shl_t *hp = NULL; @@ -132,7 +137,7 @@ dll_close (dll_handle h) } dll_func -dll_function (dll_handle h, CONST char *n) +dll_function (dll_handle h, const char *n) { long handle = 0L; @@ -143,7 +148,7 @@ dll_function (dll_handle h, CONST char *n) } dll_var -dll_variable (dll_handle h, CONST char *n) +dll_variable (dll_handle h, const char *n) { long handle = 0L; @@ -153,7 +158,7 @@ dll_variable (dll_handle h, CONST char *n) return (dll_var)handle; } -CONST char * +const char * dll_error (dll_handle h) { /* #### WTF?! Shouldn't this at least attempt to get strerror or @@ -164,7 +169,7 @@ dll_error (dll_handle h) #elif defined(HAVE_INIT_DLD) #include int -dll_init (CONST char *arg) +dll_init (const char *arg) { char *real_exe = dld_find_executable (arg); int rc; @@ -179,7 +184,7 @@ dll_init (CONST char *arg) } dll_handle -dll_open (CONST char *fname) +dll_open (const char *fname) { rc = dld_link (fname); if (rc) @@ -201,25 +206,25 @@ dll_close (dll_handle h) } DLL_FUNC -dll_function (dll_handle h, CONST char *n) +dll_function (dll_handle h, const char *n) { return dld_get_func(n); } DLL_FUNC -dll_variable (dll_handle h, CONST char *n) +dll_variable (dll_handle h, const char *n) { return dld_get_symbol(n); } #elif defined(_WINDOWS) || defined(WIN32) int -dll_init (CONST char *arg) +dll_init (const char *arg) { return 0; } dll_handle -dll_open (CONST char *fname) +dll_open (const char *fname) { return (dll_handle)LoadLibrary (fname); } @@ -231,18 +236,18 @@ dll_close (dll_handle h) } dll_func -dll_function (dll_handle h, CONST char *n) +dll_function (dll_handle h, const char *n) { return (dll_func)GetProcAddress (h,n); } dll_func -dll_variable (dll_handle h, CONST char *n) +dll_variable (dll_handle h, const char *n) { return (dll_func)GetProcAddress (h,n); } -CONST char * +const char * dll_error (dll_handle h) { return "Windows DLL Error"; @@ -250,13 +255,13 @@ dll_error (dll_handle h) #else /* Catchall if we don't know about this systems method of dynamic loading */ int -dll_init (CONST char *arg) +dll_init (const char *arg) { return -1; } dll_handle -dll_open (CONST char *fname) +dll_open (const char *fname) { return NULL; } @@ -268,18 +273,18 @@ dll_close (dll_handle h) } dll_func -dll_function (dll_handle h, CONST char *n) +dll_function (dll_handle h, const char *n) { return NULL; } dll_func -dll_variable (dll_handle h, CONST char *n) +dll_variable (dll_handle h, const char *n) { return NULL; } -CONST char * +const char * dll_error (dll_handle h) { return "Shared libraries not implemented on this system";