63 char* binary_name_so=
NULL;
68 if (proc_path !=
NULL)
73 int binary_name_so_length = 3 + strlen(
DL_TAIL) + strlen(binary_name) + strlen(
DIR_SEPP) + strlen(proc_path);
74 binary_name_so = (
char *)
omAlloc0( binary_name_so_length *
sizeof(
char) );
75 while((p!=
NULL)&&(*p!=
'\0'))
79 strcpy(binary_name_so,p);
82 strcat(binary_name_so,binary_name);
84 if(!access(binary_name_so, R_OK)) { found=
TRUE;
break; }
87 if (found) handle =
dynl_open(binary_name_so);
92 Warn(
"Could not find dynamic library: %s%s (path %s)",
93 binary_name,
DL_TAIL,proc_path);
96 Warn(
"See the INSTALL section in the Singular manual for details.");
106 void *proc_ptr =
NULL;
112 Warn(
"Could load a procedure from a dynamic library");
115 Warn(
"See the INSTALL section in the Singular manual for details.");
132 #define HAVE_ELF_SYSTEM
136 #if (defined(__APPLE__) && defined(__MACH__)) && (!defined(HAVE_ELF_SYSTEM))
137 #define HAVE_ELF_SYSTEM
141 #if defined(__sun) && defined(__SVR4)
142 #define HAVE_ELF_SYSTEM
145 #if defined(HAVE_ELF_SYSTEM)
147 #define DL_IMPLEMENTED
154 return dlopen(filename,RTLD_NOW|RTLD_NOLOAD) !=
NULL;
162 if ((filename==
NULL) || (dlopen(filename,RTLD_NOW|RTLD_NOLOAD)==
NULL))
163 return(dlopen(filename, RTLD_NOW|RTLD_GLOBAL));
165 Werror(
"module %s already loaded",filename);
175 if (kernel_handle ==
NULL)
179 return(dlsym(handle, symbol));
184 return(dlclose (handle));
196 #if defined(HPUX_9) || defined(HPUX_10)
197 #define DL_IMPLEMENTED
200 typedef char *((*func_ptr) ());
206 struct shl_descriptor *desc;
207 for (
int idx = 0; shl_get(idx, &desc) != -1; ++idx)
209 if (strcmp(filename, desc->filename) == 0)
return TRUE;
216 shl_t handle = shl_load(filename, BIND_DEFERRED, 0);
218 return ((
void *) handle);
221 void *
dynl_sym(
void *handle,
const char *symbol)
226 handle = PROG_HANDLE;
228 if (shl_findsym((shl_t *) & handle, symbol, TYPE_PROCEDURE, &f) == -1)
230 if (shl_findsym((shl_t *) & handle, symbol, TYPE_UNDEFINED, &f) == -1)
240 shl_unload((shl_t) handle);
246 static char errmsg[] =
"shl_load failed";
255 #ifndef DL_IMPLEMENTED
267 void *
dynl_sym(
void *handle,
const char *symbol)
279 static char errmsg[] =
"support for dynamic loading not implemented";
unsigned char * proc[NUM_PROC]
void * dynl_open_binary_warn(const char *binary_name, const char *msg)
static void * kernel_handle
void * dynl_sym(void *handle, const char *symbol)
void * dynl_open(char *filename)
void * dynl_sym_warn(void *handle, const char *proc, const char *msg)
int dynl_check_opened(char *filename)
static BOOLEAN warn_handle
char * feGetResource(const char id, int warn)
int dynl_close(void *handle)
#define DYNL_KERNEL_HANDLE
void Werror(const char *fmt,...)
const char * dynl_error()