64#define SAME_INODE(A,B) ((A).st_ino == (B).inode && (A).st_dev == (B).device)
66#define SAME_INODE(A,B) false
133 errmsg(
"could not find function \"%s\" in file \"%s\"",
214 errmsg(
"could not access file \"%s\": %m",
234 errmsg(
"out of memory")));
252 errmsg(
"could not load library \"%s\": %s",
289 (
errmsg(
"incompatible library \"%s\": missing magic block",
291 errhint(
"Extension libraries are required to use the PG_MODULE_MAGIC macro.")));
337 (
errmsg(
"incompatible library \"%s\": version mismatch",
339 errdetail(
"Server is version %d, library is version %s.",
351 (
errmsg(
"incompatible library \"%s\": ABI mismatch",
353 errdetail(
"Server has ABI \"%s\", library has \"%s\".",
372 _(
"Server has %s = %d, library has %d."),
382 _(
"Server has %s = %d, library has %d."),
392 _(
"Server has %s = %d, library has %d."),
402 _(
"Server has %s = %s, library has %s."),
407 if (details.
len == 0)
409 _(
"Magic block has unexpected length or padding difference."));
412 (
errmsg(
"incompatible library \"%s\": magic block mismatch",
527 errmsg(
"access to library \"%s\" is not allowed",
554 errmsg(
"invalid macro name in path: %s",
575 const char *macro,
const char *
macro_val)
625 errmsg(
"component in parameter \"%s\" is not an absolute path",
path_param)));
#define Assert(condition)
#define FLEXIBLE_ARRAY_MEMBER
#define MemSet(start, val, len)
static char * expand_dynamic_library_name(const char *name)
static const Pg_abi_values magic_data
static DynamicFileList * file_tail
void RestoreLibraryState(char *start_address)
char * find_in_path(const char *basename, const char *path, const char *path_param, const char *macro, const char *macro_val)
char * Dynamic_library_path
static void * internal_load_library(const char *libname)
void SerializeLibraryState(Size maxsize, char *start_address)
DynamicFileList * get_next_loaded_module(DynamicFileList *dfptr)
void load_file(const char *filename, bool restricted)
static pg_noreturn void incompatible_module_error(const char *libname, const Pg_abi_values *module_magic_data)
void ** find_rendezvous_variable(const char *varName)
Size EstimateLibraryStateSpace(void)
void * lookup_external_function(void *filehandle, const char *funcname)
static DynamicFileList * file_list
DynamicFileList * get_first_loaded_module(void)
void * load_external_function(const char *filename, const char *funcname, bool signalNotFound, void **filehandle)
void get_loaded_module_details(DynamicFileList *dfptr, const char **library_path, const char **module_name, const char **module_version)
static void check_restricted_library_name(const char *name)
char * substitute_path_macro(const char *str, const char *macro, const char *value)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
HTAB * hash_create(const char *tabname, int64 nelem, const HASHCTL *info, int flags)
int errdetail_internal(const char *fmt,...)
int errcode_for_file_access(void)
int errdetail(const char *fmt,...)
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
bool pg_file_exists(const char *name)
#define PG_MAGIC_FUNCTION_NAME_STRING
const Pg_magic_struct *(* PGModuleMagicFunction)(void)
#define PG_MODULE_ABI_DATA
char pkglib_path[MAXPGPATH]
char * pstrdup(const char *in)
void pfree(void *pointer)
#define is_absolute_path(filename)
char * first_path_var_separator(const char *pathlist)
void canonicalize_path(char *path)
char * first_dir_separator(const char *filename)
size_t strlcpy(char *dst, const char *src, size_t siz)
char * psprintf(const char *fmt,...)
Size add_size(Size s1, Size s2)
void appendStringInfo(StringInfo str, const char *fmt,...)
void appendStringInfoString(StringInfo str, const char *s)
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
const Pg_magic_struct * magic
char filename[FLEXIBLE_ARRAY_MEMBER]
void * dlopen(const char *file, int mode)
void * dlsym(void *handle, const char *symbol)
int dlclose(void *handle)