33 * available with a PostgreSQL-compatible license.Kudos Wilfredo
44 * Sánchez <wsanchez@apple.com>.
55 *
6- * $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.c,v 1.6 2002/10/01 05:06:44 tgl Exp $
6+ * $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.c,v 1.7 2003/04/13 01:19:06 tgl Exp $
77 */
8-
98#include "postgres.h"
9+
1010#include <mach-o/dyld.h>
11+
1112#include "dynloader.h"
1213
14+
15+ static NSObjectFileImageReturnCode cofiff_result = NSObjectFileImageFailure ;
16+
17+
1318void *
1419pg_dlopen (char * filename )
1520{
1621NSObjectFileImage image ;
1722
18- if ( NSCreateObjectFileImageFromFile (filename ,& image )!=
19- NSObjectFileImageSuccess )
23+ cofiff_result = NSCreateObjectFileImageFromFile (filename ,& image );
24+ if ( cofiff_result != NSObjectFileImageSuccess )
2025return NULL ;
2126return NSLinkModule (image ,filename ,
22- NSLINKMODULE_OPTION_BINDNOW |
23- NSLINKMODULE_OPTION_RETURN_ON_ERROR );
27+ NSLINKMODULE_OPTION_BINDNOW |
28+ NSLINKMODULE_OPTION_RETURN_ON_ERROR );
2429}
2530
2631void
2732pg_dlclose (void * handle )
2833{
2934NSUnLinkModule (handle , FALSE);
30- return ;
3135}
3236
3337PGFunction
@@ -53,5 +57,38 @@ pg_dlsym(void *handle, char *funcname)
5357char *
5458pg_dlerror (void )
5559{
56- return "no error message available" ;
60+ NSLinkEditErrors c ;
61+ int errorNumber ;
62+ const char * fileName ;
63+ const char * errorString = NULL ;
64+
65+ switch (cofiff_result )
66+ {
67+ case NSObjectFileImageSuccess :
68+ /* must have failed in NSLinkModule */
69+ NSLinkEditError (& c ,& errorNumber ,& fileName ,& errorString );
70+ if (errorString == NULL || * errorString == '\0' )
71+ errorString = "unknown link-edit failure" ;
72+ break ;
73+ case NSObjectFileImageFailure :
74+ errorString = "failed to open object file" ;
75+ break ;
76+ case NSObjectFileImageInappropriateFile :
77+ errorString = "inappropriate object file" ;
78+ break ;
79+ case NSObjectFileImageArch :
80+ errorString = "object file is for wrong architecture" ;
81+ break ;
82+ case NSObjectFileImageFormat :
83+ errorString = "object file has wrong format" ;
84+ break ;
85+ case NSObjectFileImageAccess :
86+ errorString = "insufficient permissions for object file" ;
87+ break ;
88+ default :
89+ errorString = "unknown failure to open object file" ;
90+ break ;
91+ }
92+
93+ return (char * )errorString ;
5794}