#include "postgres.h"#include "dynloader.h"#include "miscadmin.h"
Go to the source code of this file.
Functions | |
| void * | pg_dlopen (char *filename) |
| PGFunction | pg_dlsym (void *handle, char *funcname) |
| void | pg_dlclose (void *handle) |
| char * | pg_dlerror (void) |
| void pg_dlclose | ( | void * | handle | ) |
| char* pg_dlerror | ( | void | ) |
Definition at line 124 of file linux.c.
References cofiff_result, and NULL.
{
#ifndef HAVE_DLD_H
return "dynaloader unspported";
#else
return dld_strerror(dld_errno);
#endif
}
| void* pg_dlopen | ( | char * | filename | ) |
Definition at line 32 of file linux.c.
References cofiff_result, elog, ERROR, sort-test::list, my_exec_path, and WARNING.
{
#ifndef HAVE_DLD_H
elog(ERROR, "dynamic load not supported");
return NULL;
#else
static int dl_initialized = 0;
/*
* initializes the dynamic loader with the executable's pathname. (only
* needs to do this the first time pg_dlopen is called.)
*/
if (!dl_initialized)
{
if (dld_init(dld_find_executable(my_exec_path)))
return NULL;
/*
* if there are undefined symbols, we want dl to search from the
* following libraries also.
*/
dl_initialized = 1;
}
/*
* link the file, then check for undefined symbols!
*/
if (dld_link(filename))
return NULL;
/*
* If undefined symbols: try to link with the C and math libraries! This
* could be smarter, if the dynamic linker was able to handle shared libs!
*/
if (dld_undefined_sym_count > 0)
{
if (dld_link("/usr/lib/libc.a"))
{
elog(WARNING, "could not link C library");
return NULL;
}
if (dld_undefined_sym_count > 0)
{
if (dld_link("/usr/lib/libm.a"))
{
elog(WARNING, "could not link math library");
return NULL;
}
if (dld_undefined_sym_count > 0)
{
int count = dld_undefined_sym_count;
char **list = dld_list_undefined_sym();
/* list the undefined symbols, if any */
do
{
elog(WARNING, "\"%s\" is undefined", *list);
list++;
count--;
} while (count > 0);
dld_unlink_by_file(filename, 1);
return NULL;
}
}
}
return (void *) strdup(filename);
#endif
}
| PGFunction pg_dlsym | ( | void * | handle, | |
| char * | funcname | |||
| ) |
Definition at line 104 of file linux.c.
{
#ifndef HAVE_DLD_H
return NULL;
#else
return (PGFunction) dld_get_func((funcname));
#endif
}
1.7.1