ultrix4.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * dynloader.c
  4.  *   This dynamic loader uses Andrew Yu's libdl-1.0 package for Ultrix 4.x.
  5.  *   (Note that pg_dlsym and pg_dlclose are actually macros defined in
  6.  *   "port-protos.h".)
  7.  *
  8.  * Copyright (c) 1994, Regents of the University of California
  9.  *
  10.  *
  11.  * IDENTIFICATION
  12.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/port/dynloader/ultrix4.c,v 1.5 1999/02/13 23:17:29 momjian Exp $
  13.  *
  14.  *-------------------------------------------------------------------------
  15.  */
  16. #include <stdio.h>
  17. #include <postgres.h>
  18. #include "dl.h"
  19. #include <utils/dynamic_loader.h>
  20. #include "postgres.h"
  21. #include "fmgr.h"
  22. #include "port-protos.h"
  23. #include "utils/elog.h"
  24. extern char *pg_pathname;
  25. void *
  26. pg_dlopen(char *filename)
  27. {
  28. static int dl_initialized = 0;
  29. void    *handle;
  30. /*
  31.  * initializes the dynamic loader with the executable's pathname.
  32.  * (only needs to do this the first time pg_dlopen is called.)
  33.  */
  34. if (!dl_initialized)
  35. {
  36. if (!dl_init(pg_pathname))
  37. return NULL;
  38. /*
  39.  * if there are undefined symbols, we want dl to search from the
  40.  * following libraries also.
  41.  */
  42. dl_setLibraries("/usr/lib/libm_G0.a:/usr/lib/libc_G0.a");
  43. dl_initialized = 1;
  44. }
  45. /*
  46.  * open the file. We do the symbol resolution right away so that we
  47.  * will know if there are undefined symbols. (This is in fact the same
  48.  * semantics as "ld -A". ie. you cannot have undefined symbols.
  49.  */
  50. if ((handle = dl_open(filename, DL_NOW)) == NULL)
  51. {
  52. int count;
  53. char   **list = dl_undefinedSymbols(&count);
  54. /* list the undefined symbols, if any */
  55. if (count)
  56. {
  57. elog(NOTICE, "dl: Undefined:");
  58. while (*list)
  59. {
  60. elog(NOTICE, "  %s", *list);
  61. list++;
  62. }
  63. }
  64. }
  65. return (void *) handle;
  66. }