dl_hpux.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:1k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*==============================================================================
  2.   $Id: dl_hpux.c,v 1.1.1.1 2004/01/21 01:36:35 raph Exp $
  3.   simple dlopen()-like implementation above HP-UX shl_xxx() API
  4.   Written by Miodrag Vallat <miod@mikmod.org>, released in the public domain
  5. ==============================================================================*/
  6. /*
  7.  * This implementation currently only works on hppa systems.
  8.  * It could be made working on m68k (hp9000s300) series, but my HP-UX 5.5
  9.  * disk is dead and I don't have the system tapes...
  10.  */
  11. #include <dl.h>
  12. #include <malloc.h>
  13. #include <string.h>
  14. #ifdef HAVE_CONFIG_H
  15. #include "config.h" /* const */
  16. #endif
  17. #include "dlfcn.h"
  18. void *dlopen(const char *name, int flags)
  19. {
  20. shl_t handle;
  21. char *library;
  22. if (name == NULL || *name == '')
  23. return NULL;
  24. /* By convention, libmikmod will look for "foo.so" while on HP-UX the
  25.    name would be "foo.sl". Change the last letter here. */
  26. library = strdup(name);
  27. library[strlen(library) - 1] = 'l';
  28. handle = shl_load(library,
  29. (flags & RTLD_LAZY ? BIND_DEFERRED : BIND_IMMEDIATE) | DYNAMIC_PATH,
  30.     0L);
  31. free(library);
  32. return (void *)handle;
  33. }
  34. int dlclose(void *handle)
  35. {
  36. return shl_unload((shl_t)handle);
  37. }
  38. void *dlsym(void *handle, const char *sym)
  39. {
  40. shl_t h = (shl_t)handle;
  41. void *address;
  42. if (shl_findsym(&h, sym, TYPE_UNDEFINED, &address) == 0)
  43. return address;
  44. return NULL;
  45. }
  46. /* ex:set ts=4: */