1998-02-27
1998-02-27 08:41:45 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>
-
9649497b52f75540e9de252427fa8596918bf19b
(69 lines)
(+66/-3)
[
Show
| Annotate
]
Branch: 7.9
lots of changes
Rev: src/acconfig.h:1.16
Rev: src/array.c:1.30
Rev: src/array.h:1.11
Rev: src/builtin_functions.c:1.74
Rev: src/compilation.h:1.7
Rev: src/configure.in:1.160
Rev: src/dynamic_load.c:1.24
Rev: src/interpret.c:1.69
Rev: src/interpret.h:1.19
Rev: src/language.yacc:1.61
Rev: src/las.c:1.53
Rev: src/main.c:1.42
Rev: src/modules/Makefile.in:1.15
Rev: src/modules/dynamic_module_makefile.in:1.31
Rev: src/modules/spider/dumudp.c:1.34
Rev: src/modules/static_module_makefile.in:1.25
Rev: src/modules/system/system.c:1.42
Rev: src/program.c:1.64
Rev: src/program.h:1.33
8:
# include "pike_macros.h"
#endif
- #if !defined(HAVE_DLOPEN) && defined(HAVE_DLD_LINK) && defined(HAVE_DLD_GET_FUNC)
+ #if !defined(HAVE_DLOPEN)
+
+ #if defined(HAVE_DLD_LINK) && defined(HAVE_DLD_GET_FUNC)
#define USE_DLD
-
+ #define HAVE_SOME_DLOPEN
+ #define EMULATE_DLOPEN
+ #else
+ #if defined(HAVE_LOADLIBRARY) && defined(HAVE_FREELIBRARY) && \
+ defined(HAVE_GETPROCADDRESS) && defined(HAVE_WINBASE_H)
+ #define USE_LOADLIBRARY
+ #define HAVE_SOME_DLOPEN
+ #define EMULATE_DLOPEN
#endif
-
+ #endif
+ #else
+ #define HAVE_SOME_DLOPEN
+ #endif
- #if defined(HAVE_DLOPEN) || defined(USE_DLD)
+
-
+ #ifdef HAVE_SOME_DLOPEN
+
typedef void (*modfun)(void);
-
+ #ifdef USE_LOADLIBRARY
+ #include <windows.h>
+
+ static TCHAR *convert_string(char *str, int len)
+ {
+ int e;
+ TCHAR *ret=(TCHAR *)xalloc((len+1) * sizeof(TCHAR));
+ for(e=0;e<len;e++) ret[e]=EXTRACT_UCHAR(str+e);
+ ret[e]=0;
+ return ret;
+ }
+
+ static void *dlopen(char *foo, int how)
+ {
+ TCHAR *tmp;
+ HINSTANCE ret;
+ tmp=convert_string(foo, strlen(foo));
+ ret=LoadLibrary(tmp);
+ free((char *)tmp);
+ return (void *)ret;
+ }
+
+ static char * dlerror(void)
+ {
+ static char buffer[200];
+ sprintf(buffer,"LoadLibrary failed with error: %d",GetLastError());
+ return buffer;
+ }
+
+ static void *dlsym(void *module, char * function)
+ {
+ return (void *)GetProcAddress((HMODULE)module,
+ function);
+ }
+
+ static void dlclose(void *module)
+ {
+ FreeLibrary((HMODULE)module);
+ }
+
+ #define dlinit()
+
+ #endif
+
#ifdef USE_DLD
#include <dld.h>
static void *dlopen(char *foo, int how)
57: Inside #if defined(HAVE_DLOPEN) || defined(USE_DLD)
}
- #else
+ #endif
+
+ #ifndef EMULATE_DLOPEN
+
#ifdef HAVE_DLFCN_H
#include <dlfcn.h>
#endif