XEmacs 21.4.13 "Rational FORTRAN".
[chise/xemacs-chise.git.1] / src / sysdll.c
index f339873..bc911c4 100644 (file)
@@ -23,71 +23,75 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 #include <config.h>
 #endif
 
+#include <stdlib.h>
+#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 <dlfcn.h>
 
 #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 <dl.h>
 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 <dld.h>
 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 <windows.h>
+#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";