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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * dynloader.c
  4.  *   Dynamic Loader for Postgres for Linux, generated from those for
  5.  *   Ultrix.
  6.  *
  7.  *   You need to install the dld library on your Linux system!
  8.  *
  9.  * Copyright (c) 1994, Regents of the University of California
  10.  *
  11.  *
  12.  * IDENTIFICATION
  13.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/port/dynloader/linux.c,v 1.11 1999/02/21 03:49:13 scrappy Exp $
  14.  *
  15.  *-------------------------------------------------------------------------
  16.  */
  17. #include <stdio.h>
  18. #include <string.h>
  19. #include "postgres.h"
  20. #ifdef HAVE_DLD_H
  21. #include <dld.h>
  22. #endif
  23. #include "dynloader.h"
  24. #include "utils/elog.h"
  25. #include "fmgr.h"
  26. #ifdef NOT_USED
  27. extern char *pg_pathname;
  28. void *
  29. pg_dlopen(char *filename)
  30. {
  31. #ifndef HAVE_DLD_H
  32. elog(ERROR, "dynamic load not supported");
  33. return NULL;
  34. #else
  35. static int dl_initialized = 0;
  36. /*
  37.  * initializes the dynamic loader with the executable's pathname.
  38.  * (only needs to do this the first time pg_dlopen is called.)
  39.  */
  40. if (!dl_initialized)
  41. {
  42. if (dld_init(dld_find_executable(pg_pathname)))
  43. return NULL;
  44. /*
  45.  * if there are undefined symbols, we want dl to search from the
  46.  * following libraries also.
  47.  */
  48. dl_initialized = 1;
  49. }
  50. /*
  51.  * link the file, then check for undefined symbols!
  52.  */
  53. if (dld_link(filename))
  54. return NULL;
  55. /*
  56.  * If undefined symbols: try to link with the C and math libraries!
  57.  * This could be smarter, if the dynamic linker was able to handle
  58.  * shared libs!
  59.  */
  60. if (dld_undefined_sym_count > 0)
  61. {
  62. if (dld_link("/usr/lib/libc.a"))
  63. {
  64. elog(NOTICE, "dld: Cannot link C library!");
  65. return NULL;
  66. }
  67. if (dld_undefined_sym_count > 0)
  68. {
  69. if (dld_link("/usr/lib/libm.a"))
  70. {
  71. elog(NOTICE, "dld: Cannot link math library!");
  72. return NULL;
  73. }
  74. if (dld_undefined_sym_count > 0)
  75. {
  76. int count = dld_undefined_sym_count;
  77. char   **list = dld_list_undefined_sym();
  78. /* list the undefined symbols, if any */
  79. elog(NOTICE, "dld: Undefined:");
  80. do
  81. {
  82. elog(NOTICE, "  %s", *list);
  83. list++;
  84. count--;
  85. } while (count > 0);
  86. dld_unlink_by_file(filename, 1);
  87. return NULL;
  88. }
  89. }
  90. }
  91. return (void *) strdup(filename);
  92. #endif
  93. }
  94. char *
  95. pg_dlerror()
  96. {
  97. #ifndef HAVE_DLD_H
  98. return "dynaloader unspported";
  99. #else
  100. return dld_strerror(dld_errno);
  101. #endif
  102. }
  103. #endif