Macros | Enumerations | Functions
mod_raw.h File Reference

Go to the source code of this file.

Macros

#define DYNL_KERNEL_HANDLE   ((void*) 0x1)
 

Enumerations

enum  lib_types {
  LT_NONE, LT_NOTFOUND, LT_SINGULAR, LT_ELF,
  LT_HPUX, LT_MACH_O, LT_BUILTIN
}
 

Functions

void * dynl_open_binary_warn (const char *binary_name, const char *msg=NULL)
 
void * dynl_sym_warn (void *handle, const char *proc, const char *msg=NULL)
 
int dynl_check_opened (char *filename)
 
void * dynl_open (char *filename)
 
void * dynl_sym (void *handle, const char *symbol)
 
int dynl_close (void *handle)
 
const char * dynl_error ()
 

Macro Definition Documentation

§ DYNL_KERNEL_HANDLE

#define DYNL_KERNEL_HANDLE   ((void*) 0x1)

Definition at line 32 of file mod_raw.h.

Enumeration Type Documentation

§ lib_types

enum lib_types
Enumerator
LT_NONE 
LT_NOTFOUND 
LT_SINGULAR 
LT_ELF 
LT_HPUX 
LT_MACH_O 
LT_BUILTIN 

Definition at line 16 of file mod_raw.h.

Function Documentation

§ dynl_check_opened()

int dynl_check_opened ( char *  filename)

Definition at line 146 of file mod_raw.cc.

149 {
150  return dlopen(filename,RTLD_NOW|RTLD_NOLOAD) != NULL;
151 }
#define NULL
Definition: omList.c:10

§ dynl_close()

int dynl_close ( void *  handle)

Definition at line 178 of file mod_raw.cc.

179 {
180  return(dlclose (handle));
181 }

§ dynl_error()

const char* dynl_error ( )

Definition at line 183 of file mod_raw.cc.

184 {
185  return(dlerror());
186 }

§ dynl_open()

void* dynl_open ( char *  filename)

Definition at line 153 of file mod_raw.cc.

156 {
157 // glibc 2.2:
158  if ((filename==NULL) || (dlopen(filename,RTLD_NOW|RTLD_NOLOAD)==NULL))
159  return(dlopen(filename, RTLD_NOW|RTLD_GLOBAL));
160  else
161  Werror("module %s already loaded",filename);
162  return NULL;
163 // alternative
164 // return(dlopen(filename, RTLD_NOW|RTLD_GLOBAL));
165 }
#define NULL
Definition: omList.c:10
void Werror(const char *fmt,...)
Definition: reporter.cc:189

§ dynl_open_binary_warn()

void* dynl_open_binary_warn ( const char *  binary_name,
const char *  msg = NULL 
)

Definition at line 56 of file mod_raw.cc.

57 {
58  void* handle = NULL;
59  char* binary_name_so=NULL;
61 
62  // try P_PROCS_DIR (%P)
63  char* proc_path = feGetResource('P');
64  if (proc_path != NULL)
65  {
66  char *p;
67  char *q;
68  p=proc_path;
69  int binary_name_so_length = 3 + strlen(DL_TAIL) + strlen(binary_name) + strlen(DIR_SEPP) + strlen(proc_path);
70  binary_name_so = (char *)omAlloc0( binary_name_so_length * sizeof(char) );
71  while((p!=NULL)&&(*p!='\0'))
72  {
73  q=strchr(p,fePathSep);
74  if (q!=NULL) *q='\0';
75  strcpy(binary_name_so,p);
76  if (q!=NULL) *q=fePathSep;
77  strcat(binary_name_so,DIR_SEPP);
78  strcat(binary_name_so,binary_name);
79  strcat(binary_name_so,DL_TAIL);
80  if(!access(binary_name_so, R_OK)) { found=TRUE; break; }
81  if (q!=NULL) p=q+1; else p=NULL;
82  }
83  if (found) handle = dynl_open(binary_name_so);
84  }
85 
86  if (handle == NULL && ! warn_handle)
87  {
88  Warn("Could not find dynamic library: %s%s (path %s)",
89  binary_name, DL_TAIL,proc_path);
90  if (found) Warn("Error message from system: %s", dynl_error());
91  if (msg != NULL) Warn("%s", msg);
92  Warn("See the INSTALL section in the Singular manual for details.");
93  warn_handle = TRUE;
94  }
95  omfree((ADDRESS)binary_name_so );
96 
97  return handle;
98 }
#define DL_TAIL
Definition: mod_raw.cc:52
#define FALSE
Definition: auxiliary.h:95
return P p
Definition: myNF.cc:203
#define TRUE
Definition: auxiliary.h:99
void * ADDRESS
Definition: auxiliary.h:116
const char fePathSep
Definition: feResource.h:57
void * dynl_open(char *filename)
Definition: mod_raw.cc:153
bool found
Definition: facFactorize.cc:56
static BOOLEAN warn_handle
Definition: mod_raw.cc:49
char * feGetResource(const char id, int warn)
Definition: feResource.cc:155
#define omfree(addr)
Definition: omAllocDecl.h:237
#define DIR_SEPP
Definition: feResource.h:7
#define NULL
Definition: omList.c:10
int BOOLEAN
Definition: auxiliary.h:86
#define omAlloc0(size)
Definition: omAllocDecl.h:211
const char * dynl_error()
Definition: mod_raw.cc:183
#define Warn
Definition: emacs.cc:80

§ dynl_sym()

void* dynl_sym ( void *  handle,
const char *  symbol 
)

Definition at line 167 of file mod_raw.cc.

168 {
169  if (handle == DYNL_KERNEL_HANDLE)
170  {
171  if (kernel_handle == NULL)
173  handle = kernel_handle;
174  }
175  return(dlsym(handle, symbol));
176 }
static void * kernel_handle
Definition: mod_raw.cc:145
void * dynl_open(char *filename)
Definition: mod_raw.cc:153
#define NULL
Definition: omList.c:10
#define DYNL_KERNEL_HANDLE
Definition: mod_raw.h:32

§ dynl_sym_warn()

void* dynl_sym_warn ( void *  handle,
const char *  proc,
const char *  msg = NULL 
)

Definition at line 100 of file mod_raw.cc.

101 {
102  void *proc_ptr = NULL;
103  if (handle != NULL)
104  {
105  proc_ptr = dynl_sym(handle, proc);
106  if (proc_ptr == NULL && ! warn_proc)
107  {
108  Warn("Could load a procedure from a dynamic library");
109  Warn("Error message from system: %s", dynl_error());
110  if (msg != NULL) Warn("%s", msg);
111  Warn("See the INSTALL section in the Singular manual for details.");
112  warn_proc = TRUE;
113  }
114  }
115  return proc_ptr;
116 }
unsigned char * proc[NUM_PROC]
Definition: checklibs.c:14
#define TRUE
Definition: auxiliary.h:99
void * dynl_sym(void *handle, const char *symbol)
Definition: mod_raw.cc:167
static BOOLEAN warn_proc
Definition: mod_raw.cc:50
#define NULL
Definition: omList.c:10
const char * dynl_error()
Definition: mod_raw.cc:183
#define Warn
Definition: emacs.cc:80