diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2000-11-09 19:00:50 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2000-11-09 19:00:50 +0000 |
commit | 700032ad6f0d8e4f429918fbc8d69439c7ebfbe3 (patch) | |
tree | dccc03cd67251beead2f5b10bb886ed723f0ec99 /src/backend/port/dynloader/darwin.c | |
parent | 6b70f3862cc0328677aa9b7adbb3e095ba7227b0 (diff) | |
download | postgresql-700032ad6f0d8e4f429918fbc8d69439c7ebfbe3.tar.gz postgresql-700032ad6f0d8e4f429918fbc8d69439c7ebfbe3.zip |
Real dynamic loader code
Diffstat (limited to 'src/backend/port/dynloader/darwin.c')
-rw-r--r-- | src/backend/port/dynloader/darwin.c | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/src/backend/port/dynloader/darwin.c b/src/backend/port/dynloader/darwin.c index fa39a7dd319..55ae1692183 100644 --- a/src/backend/port/dynloader/darwin.c +++ b/src/backend/port/dynloader/darwin.c @@ -1,36 +1,42 @@ /* - * This is a place holder until someone supplies a dynamic loader - * interface for this platform. + * These routines were taken from the Apache source, but were made + * available with a PostgreSQL-compatible license. Kudos Wilfredo + * Sánchez <wsanchez@apple.com>. * - * $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.c,v 1.1 2000/10/31 19:55:19 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.c,v 1.2 2000/11/09 19:00:50 petere Exp $ */ -#include "postgres.h" -#include "fmgr.h" -#include "utils/dynamic_loader.h" +#include <mach-o/dyld.h> #include "dynloader.h" -void * -pg_dlopen(char *filename) +void *pg_dlopen(const char *filename) { - return (void *) NULL; + NSObjectFileImage image; + + if (NSCreateObjectFileImageFromFile(filename, &image) != + NSObjectFileImageSuccess) + return NULL; + return NSLinkModule(image, filename, TRUE); } -PGFunction -pg_dlsym(void *handle, char *funcname) +void pg_dlclose(void *handle) { - return NULL; + NSUnLinkModule(handle,FALSE); + return; } -void -pg_dlclose(void *handle) +PGFunction *pg_dlsym(void *handle, const char *funcname) { + NSSymbol symbol; + char *symname = (char*)malloc(strlen(funcname)+2); + + sprintf(symname, "_%s", funcname); + symbol = NSLookupAndBindSymbol(symname); + free(symname); + return (PGFunction *) NSAddressOfSymbol(symbol); } -char * -pg_dlerror() +const char *pg_dlerror(void) { - static char errmsg[] = "the dynamic loader for darwin doesn't exist yet"; - - return errmsg; + return "no error message available"; } |