| 43 | #endif |
| 44 | |
| 45 | void* dynl_open_binary_warn(const char* binary_name, const char* msg) |
| 46 | { |
| 47 | void* handle = NULL; |
| 48 | char* binary_name_so=NULL; |
| 49 | BOOLEAN found=FALSE; |
| 50 | |
| 51 | // try P_PROCS_DIR (%P) |
| 52 | char* proc_path = feGetResource('P'); |
| 53 | if (proc_path != NULL) |
| 54 | { |
| 55 | char *p; |
| 56 | char *q; |
| 57 | p=proc_path; |
| 58 | int binary_name_so_length = 3 + strlen(DL_TAIL) + strlen(binary_name) + strlen(DIR_SEPP) + strlen(proc_path); |
| 59 | binary_name_so = (char *)omAlloc0( binary_name_so_length * sizeof(char) ); |
| 60 | while((p!=NULL)&&(*p!='\0')) |
| 61 | { |
| 62 | q=strchr(p,fePathSep); |
| 63 | if (q!=NULL) *q='\0'; |
| 64 | strcpy(binary_name_so,p); |
| 65 | if (q!=NULL) *q=fePathSep; |
| 66 | strcat(binary_name_so,DIR_SEPP); |
| 67 | strcat(binary_name_so,binary_name); |
| 68 | strcat(binary_name_so,DL_TAIL); |
| 69 | if(!access(binary_name_so, R_OK)) { found=TRUE; break; } |
| 70 | if (q!=NULL) p=q+1; else p=NULL; |
| 71 | } |
| 72 | if (found) handle = dynl_open(binary_name_so); |
| 73 | } |
| 74 | |
| 75 | if (handle == NULL && ! warn_handle) |
| 76 | { |
| 77 | Warn("Could not find dynamic library: %s%s (path %s)", |
| 78 | binary_name, DL_TAIL,proc_path); |
| 79 | if (found) Warn("Error message from system: %s", dynl_error()); |
| 80 | if (msg != NULL) Warn("%s", msg); |
| 81 | WarnS("See the INSTALL section in the Singular manual for details."); |
| 82 | warn_handle = TRUE; |
| 83 | } |
| 84 | omfree((ADDRESS)binary_name_so ); |
| 85 | |
| 86 | return handle; |
| 87 | } |
| 88 | |
| 89 | void* dynl_sym_warn(void* handle, const char* proc, const char* msg) |
| 90 | { |
no test coverage detected