3
3
* available with a PostgreSQL-compatible license.Kudos Wilfredo
4
4
* Sánchez <wsanchez@apple.com>.
5
5
*
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 $
7
7
*/
8
-
9
8
#include "postgres.h"
9
+
10
10
#include <mach-o/dyld.h>
11
+
11
12
#include "dynloader.h"
12
13
14
+
15
+ static NSObjectFileImageReturnCode cofiff_result = NSObjectFileImageFailure ;
16
+
17
+
13
18
void *
14
19
pg_dlopen (char * filename )
15
20
{
16
21
NSObjectFileImage image ;
17
22
18
- if ( NSCreateObjectFileImageFromFile (filename ,& image )!=
19
- NSObjectFileImageSuccess )
23
+ cofiff_result = NSCreateObjectFileImageFromFile (filename ,& image );
24
+ if ( cofiff_result != NSObjectFileImageSuccess )
20
25
return NULL ;
21
26
return NSLinkModule (image ,filename ,
22
- NSLINKMODULE_OPTION_BINDNOW |
23
- NSLINKMODULE_OPTION_RETURN_ON_ERROR );
27
+ NSLINKMODULE_OPTION_BINDNOW |
28
+ NSLINKMODULE_OPTION_RETURN_ON_ERROR );
24
29
}
25
30
26
31
void
27
32
pg_dlclose (void * handle )
28
33
{
29
34
NSUnLinkModule (handle , FALSE);
30
- return ;
31
35
}
32
36
33
37
PGFunction
@@ -53,5 +57,38 @@ pg_dlsym(void *handle, char *funcname)
53
57
char *
54
58
pg_dlerror (void )
55
59
{
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 ;
57
94
}