Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 700032a

Browse files
committed
Real dynamic loader code
1 parent 6b70f38 commit 700032a

File tree

2 files changed

+32
-23
lines changed

2 files changed

+32
-23
lines changed

src/backend/port/dynloader/darwin.c

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,42 @@
11
/*
2-
* This is a place holder until someone supplies a dynamic loader
3-
* interface for this platform.
2+
* These routines were taken from the Apache source, but were made
3+
* available with a PostgreSQL-compatible license. Kudos Wilfredo
4+
* Sánchez <wsanchez@apple.com>.
45
*
5-
* $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.c,v 1.1 2000/10/31 19:55:19 petere Exp $
6+
* $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.c,v 1.2 2000/11/09 19:00:50 petere Exp $
67
*/
78

8-
#include "postgres.h"
9-
#include "fmgr.h"
10-
#include "utils/dynamic_loader.h"
9+
#include <mach-o/dyld.h>
1110
#include "dynloader.h"
1211

13-
void *
14-
pg_dlopen(char *filename)
12+
void *pg_dlopen(const char *filename)
1513
{
16-
return (void *) NULL;
14+
NSObjectFileImage image;
15+
16+
if (NSCreateObjectFileImageFromFile(filename, &image) !=
17+
NSObjectFileImageSuccess)
18+
return NULL;
19+
return NSLinkModule(image, filename, TRUE);
1720
}
1821

19-
PGFunction
20-
pg_dlsym(void *handle, char *funcname)
22+
void pg_dlclose(void *handle)
2123
{
22-
return NULL;
24+
NSUnLinkModule(handle,FALSE);
25+
return;
2326
}
2427

25-
void
26-
pg_dlclose(void *handle)
28+
PGFunction *pg_dlsym(void *handle, const char *funcname)
2729
{
30+
NSSymbol symbol;
31+
char *symname = (char*)malloc(strlen(funcname)+2);
32+
33+
sprintf(symname, "_%s", funcname);
34+
symbol = NSLookupAndBindSymbol(symname);
35+
free(symname);
36+
return (PGFunction *) NSAddressOfSymbol(symbol);
2837
}
2938

30-
char *
31-
pg_dlerror()
39+
const char *pg_dlerror(void)
3240
{
33-
static char errmsg[] = "the dynamic loader for darwin doesn't exist yet";
34-
35-
return errmsg;
41+
return "no error message available";
3642
}

src/backend/port/dynloader/darwin.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
/* $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.h,v 1.1 2000/10/31 19:55:19 petere Exp $ */
2-
void *pg_dlopen(char *filename);
3-
PGFunction pg_dlsym(void *handle, char *funcname);
1+
/* $Header: /cvsroot/pgsql/src/backend/port/dynloader/darwin.h,v 1.2 2000/11/09 19:00:50 petere Exp $ */
2+
3+
#include "fmgr.h"
4+
5+
void *pg_dlopen(const char *filename);
6+
PGFunction pg_dlsym(void *handle, const char *funcname);
47
void pg_dlclose(void *handle);
5-
char *pg_dlerror();
8+
const char *pg_dlerror(void);

0 commit comments

Comments
 (0)