diff --git a/src/backend/port/dynloader/darwin.c b/src/backend/port/dynloader/darwin.c index 5d1aa757ce..8810308a14 100644 --- a/src/backend/port/dynloader/darwin.c +++ b/src/backend/port/dynloader/darwin.c @@ -3,31 +3,35 @@ * available with a PostgreSQL-compatible license. Kudos Wilfredo * Sánchez . * - * $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.c,v 1.6 2002/10/01 05:06:44 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.c,v 1.7 2003/04/13 01:19:06 tgl Exp $ */ - #include "postgres.h" + #include + #include "dynloader.h" + +static NSObjectFileImageReturnCode cofiff_result = NSObjectFileImageFailure; + + void * pg_dlopen(char *filename) { NSObjectFileImage image; - if (NSCreateObjectFileImageFromFile(filename, &image) != - NSObjectFileImageSuccess) + cofiff_result = NSCreateObjectFileImageFromFile(filename, &image); + if (cofiff_result != NSObjectFileImageSuccess) return NULL; return NSLinkModule(image, filename, - NSLINKMODULE_OPTION_BINDNOW | - NSLINKMODULE_OPTION_RETURN_ON_ERROR); + NSLINKMODULE_OPTION_BINDNOW | + NSLINKMODULE_OPTION_RETURN_ON_ERROR); } void pg_dlclose(void *handle) { NSUnLinkModule(handle, FALSE); - return; } PGFunction @@ -53,5 +57,38 @@ pg_dlsym(void *handle, char *funcname) char * pg_dlerror(void) { - return "no error message available"; + NSLinkEditErrors c; + int errorNumber; + const char *fileName; + const char *errorString = NULL; + + switch (cofiff_result) + { + case NSObjectFileImageSuccess: + /* must have failed in NSLinkModule */ + NSLinkEditError(&c, &errorNumber, &fileName, &errorString); + if (errorString == NULL || *errorString == '\0') + errorString = "unknown link-edit failure"; + break; + case NSObjectFileImageFailure: + errorString = "failed to open object file"; + break; + case NSObjectFileImageInappropriateFile: + errorString = "inappropriate object file"; + break; + case NSObjectFileImageArch: + errorString = "object file is for wrong architecture"; + break; + case NSObjectFileImageFormat: + errorString = "object file has wrong format"; + break; + case NSObjectFileImageAccess: + errorString = "insufficient permissions for object file"; + break; + default: + errorString = "unknown failure to open object file"; + break; + } + + return (char *) errorString; }