1/* 2 * $Id: module.c,v 1.5 2003-02-17 02:03:12 srittau Exp $ 3 */ 4 5#ifdef HAVE_CONFIG_H 6#include "config.h" 7#endif /* HAVE_CONFIG_H */ 8 9#include <stdlib.h> 10#include <string.h> 11#include <atalk/util.h> 12 13#ifndef HAVE_DLFCN_H 14#ifdef MACOSX_SERVER 15#include <mach-o/dyld.h> 16 17void *mod_open(const char *path) 18{ 19 NSObjectFileImage file; 20 21 if (NSCreateObjectFileImageFromFile(path, &file) != 22 NSObjectFileImageSuccess) 23 return NULL; 24 return NSLinkModule(file, path, TRUE); 25} 26 27void *mod_symbol(void *module, const char *name) 28{ 29 NSSymbol symbol; 30 char *underscore; 31 32 if ((underscore = (char *) malloc(strlen(name) + 2)) == NULL) 33 return NULL; 34 strcpy(underscore, "_"); 35 strcat(underscore, name); 36 symbol = NSLookupAndBindSymbol(underscore); 37 free(underscore); 38 39 return NSAddressOfSymbol(symbol); 40} 41 42void mod_close(void *module) 43{ 44 NSUnLinkModule(module, FALSE); 45} 46#endif /* MACOSX_SERVER */ 47 48#else /* HAVE_DLFCN_H */ 49 50#include <dlfcn.h> 51 52#ifdef DLSYM_PREPEND_UNDERSCORE 53void *mod_symbol(void *module, const char *name) 54{ 55 void *symbol; 56 char *underscore; 57 58 if (!module) 59 return NULL; 60 61 if ((underscore = (char *) malloc(strlen(name) + 2)) == NULL) 62 return NULL; 63 64 strcpy(underscore, "_"); 65 strcat(underscore, name); 66 symbol = dlsym(module, underscore); 67 free(underscore); 68 69 return symbol; 70} 71#endif /* DLSYM_PREPEND_UNDERSCORE */ 72#endif /* HAVE_DLFCN_H */ 73