* 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
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;
}