Skip to content

Commit ff5456f

Browse files
committed
Add code to provide useful dynamic-linking error messages on OS X.
1 parent e138630 commit ff5456f

File tree

1 file changed

+45
-8
lines changed

1 file changed

+45
-8
lines changed

src/backend/port/dynloader/darwin.c

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,35 @@
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+
1318
void *
1419
pg_dlopen(char *filename)
1520
{
1621
NSObjectFileImage image;
1722

18-
if (NSCreateObjectFileImageFromFile(filename, &image) !=
19-
NSObjectFileImageSuccess)
23+
cofiff_result = NSCreateObjectFileImageFromFile(filename, &image);
24+
if (cofiff_result != NSObjectFileImageSuccess)
2025
return NULL;
2126
return 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

2631
void
2732
pg_dlclose(void *handle)
2833
{
2934
NSUnLinkModule(handle, FALSE);
30-
return;
3135
}
3236

3337
PGFunction
@@ -53,5 +57,38 @@ pg_dlsym(void *handle, char *funcname)
5357
char *
5458
pg_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
}

0 commit comments

Comments
 (0)