Alien-LibJIT
view release on metacpan or search on metacpan
libjit/jitdynamic/jit-dynlib.c view on Meta::CPAN
}
else
{
sym = NSLookupSymbolInModule((NSModule)handle, symbol);
}
/* Did we find the symbol? */
if(sym == 0)
{
return 0;
}
/* Convert the symbol into the address that we require */
return (void *)NSAddressOfSymbol(sym);
}
void *jit_dynlib_get_symbol(jit_dynlib_handle_t handle, const char *symbol)
{
void *value = GetSymbol(handle, (char *)symbol);
char *newName;
if(value)
{
return value;
}
newName = (char *)jit_malloc(jit_strlen(symbol) + 2);
if(newName)
{
/* Try again with '_' prepended to the name */
newName[0] = '_';
jit_strcpy(newName + 1, symbol);
value = GetSymbol(handle, newName);
if(value)
{
jit_free(newName);
return value;
}
jit_free(newName);
}
if(dynlib_debug)
{
fprintf(stderr, "%s: could not find the specified symbol\n", symbol);
}
return 0;
}
const char *jit_dynlib_get_suffix(void)
{
return "dylib";
}
#elif defined(JIT_WIN32_PLATFORM) /* Native Win32 or Cygwin */
jit_dynlib_handle_t jit_dynlib_open(const char *name)
{
void *libHandle;
char *newName = 0;
#if defined(JIT_WIN32_CYGWIN) && defined(HAVE_SYS_CYGWIN_H) && \
defined(HAVE_CYGWIN_CONV_TO_WIN32_PATH)
/* Use Cygwin to expand the path */
{
char buf[4096];
if(cygwin_conv_to_win32_path(name, buf) == 0)
{
newName = jit_strdup(buf);
if(!newName)
{
return 0;
}
}
}
#endif
/* Attempt to load the library */
libHandle = (void *)LoadLibrary((newName ? newName : name));
if(libHandle == 0)
{
if(dynlib_debug)
{
fprintf(stderr, "%s: could not load dynamic library\n",
(newName ? newName : name));
}
if(newName)
{
jit_free(newName);
}
return 0;
}
if(newName)
{
jit_free(newName);
}
return libHandle;
}
void jit_dynlib_close(jit_dynlib_handle_t handle)
{
FreeLibrary((HINSTANCE)handle);
}
void *jit_dynlib_get_symbol(jit_dynlib_handle_t handle, const char *symbol)
{
void *procAddr;
procAddr = (void *)GetProcAddress((HINSTANCE)handle, symbol);
if(procAddr == 0)
{
if(dynlib_debug)
{
fprintf(stderr, "%s: could not resolve symbol", symbol);
}
return 0;
}
return procAddr;
}
const char *jit_dynlib_get_suffix(void)
{
return "dll";
}
( run in 0.784 second using v1.01-cache-2.11-cpan-5b529ec07f3 )