X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=src%2Fsysdll.c;h=bc911c422ed38afda0ffb3c510c4ba2975ce73b6;hp=f3398739563e17ca3b5b8d501d979e4adc9e3330;hb=d81014e89b5102527e5b50aac62edeed2955671d;hpb=77dcef404dc78635f6ffa8f71a803d2bc7cc8921 diff --git a/src/sysdll.c b/src/sysdll.c index f339873..bc911c4 100644 --- a/src/sysdll.c +++ b/src/sysdll.c @@ -23,71 +23,75 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include #endif +#include +#include "lisp.h" #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. -** -** 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) #include #ifndef RTLD_LAZY # define RTLD_LAZY 1 #endif /* RTLD_LAZY isn't defined under FreeBSD - ick */ -#ifndef RTLD_GLOBAL -# define RTLD_GLOBAL 0 +#ifndef RTLD_NOW +# define RTLD_NOW 2 #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); + return (dll_handle) dlopen (fname, RTLD_NOW); } int dll_close (dll_handle h) { - return dlclose((void *)h); + return dlclose ((void *) 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); *buf = '_'; - (void)strcpy(buf + 1, n); + strcpy (buf + 1, n); n = buf; #endif - return (dll_func)dlsym ((void *)h, n); + return (dll_func) dlsym ((void *) h, 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 = '_'; + 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 @@ -97,59 +101,49 @@ 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; + /* shl_load will hang hard if passed a NULL fname. */ + if (fname == NULL) return NULL; - if (h) - { - hp = (shl_t *)malloc (sizeof (shl_t)); - if (!hp) - shl_unload(h); - else - *hp = h; - } - return (dll_handle)hp; + return (dll_handle) shl_load (fname, BIND_DEFERRED,0L); } int dll_close (dll_handle h) { - shl_t hp = *((shl_t *)h); - free (hp); - return shl_unload(h); + return shl_unload ((shl_t) h); } dll_func -dll_function (dll_handle h, CONST char *n) +dll_function (dll_handle h, const char *n) { long handle = 0L; - if (shl_findsym ((shl_t *)h, n, TYPE_PROCEDURE, &handle)) + if (shl_findsym ((shl_t *) &h, n, TYPE_PROCEDURE, &handle)) return NULL; - return (dll_func)handle; + return (dll_func) handle; } dll_var -dll_variable (dll_handle h, CONST char *n) +dll_variable (dll_handle h, const char *n) { long handle = 0L; - if (shl_findsym ((shl_t *)h, n, TYPE_DATA, &handle)) + if (shl_findsym ((shl_t *) &h, n, TYPE_DATA, &handle)) return NULL; - return (dll_var)handle; + return (dll_var) handle; } -CONST char * +const char * dll_error (dll_handle h) { /* #### WTF?! Shouldn't this at least attempt to get strerror or @@ -160,7 +154,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; @@ -175,13 +169,13 @@ dll_init (CONST char *arg) } dll_handle -dll_open (CONST char *fname) +dll_open (const char *fname) { rc = dld_link (fname); if (rc) return NULL; - return (dll_handle)1; + return (dll_handle) 1; } int @@ -197,27 +191,32 @@ 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); + 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); + return dld_get_symbol (n); } -#elif defined(_WINDOWS) || defined(WIN32) +#elif defined (WIN32_NATIVE) + +#define WIN32_LEAN_AND_MEAN +#include +#undef WIN32_LEAN_AND_MEAN + 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); + return (dll_handle) LoadLibrary (fname); } int @@ -227,18 +226,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); + 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); + return (dll_func) GetProcAddress (h, n); } -CONST char * +const char * dll_error (dll_handle h) { return "Windows DLL Error"; @@ -246,13 +245,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; } @@ -264,18 +263,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";