summaryrefslogtreecommitdiff
path: root/src/backend/port/dynloader
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/port/dynloader')
-rw-r--r--src/backend/port/dynloader/beos.c80
-rw-r--r--src/backend/port/dynloader/beos.h17
2 files changed, 47 insertions, 50 deletions
diff --git a/src/backend/port/dynloader/beos.c b/src/backend/port/dynloader/beos.c
index f1ed5281b6..ea97057e62 100644
--- a/src/backend/port/dynloader/beos.c
+++ b/src/backend/port/dynloader/beos.c
@@ -8,53 +8,65 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/beos.c,v 1.2 2000/10/03 03:11:15 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/beos.c,v 1.3 2000/10/07 14:39:11 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
-#include <kernel/OS.h>
-#include <image.h>
-#include <errno.h>
+#include "utils/dynamic_loader.h"
+#include "utils/elog.h"
-#include "dynloader.h"
-extern char pg_pathname[];
-
-void *
-beos_dlopen(const char *filename)
+void *
+pg_dlopen(char *filename)
{
- image_id id = -1;
+ image_id* im;
+
+ /* Handle memory allocation to store the Id of the shared object*/
+ im=(image_id*)(malloc(sizeof(image_id)));
+
+ /* Add-on loading */
+ *im=beos_dl_open(filename);
+
+ return im;
+}
- if ((id = load_add_on(filename)) < 0)
- return NULL;
- return (void *) id;
+char *
+pg_dlerror()
+{
+ static char errmsg[] = "Load Add-On failed";
+ return errmsg;
}
-void
-beos_dlclose(void *handle)
+PGFunction
+pg_dlsym(void *handle, char *funcname)
{
- image_id id = (image_id) handle;
- unload_add_on(id);
- return;
+ PGFunction fpt;
+
+ /* Checking that "Handle" is valid */
+ if ((handle) && ((*(int*)(handle))>=0))
+ {
+ /* Loading symbol */
+ if(get_image_symbol(*((int*)(handle)),funcname,B_SYMBOL_TYPE_TEXT,(void**)&fpt)==B_OK);
+ {
+ return fpt;
+ }
+ elog(NOTICE, "loading symbol '%s' failed ",funcname);
+ }
+ elog(NOTICE, "add-on not loaded correctly");
+ return NULL;
}
-void *
-beos_dlsym(void *handle, const char *name)
-{
- image_id id = (image_id)handle;
- void *addr;
-
- if (get_image_symbol(id, name, B_SYMBOL_TYPE_ANY, &addr) != B_OK)
- return NULL;
-
- return addr;
-}
-
-char *
-beos_dlerror()
+void
+pg_dlclose(void *handle)
{
- return (char *)strerror(errno);
-}
+ /* Checking that "Handle" is valid */
+ if ((handle) && ((*(int*)(handle))>=0))
+ {
+ if (beos_dl_close(*(image_id*)handle)!=B_OK)
+ elog(NOTICE, "error while unloading add-on");
+ free(handle);
+ }
+} \ No newline at end of file
diff --git a/src/backend/port/dynloader/beos.h b/src/backend/port/dynloader/beos.h
index 9cc3743034..7ef1677e5e 100644
--- a/src/backend/port/dynloader/beos.h
+++ b/src/backend/port/dynloader/beos.h
@@ -7,27 +7,12 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: beos.h,v 1.2 2000/10/03 03:11:15 momjian Exp $
+ * $Id: beos.h,v 1.3 2000/10/07 14:39:11 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#ifndef PORT_PROTOS_H
#define PORT_PROTOS_H
-#include "postgres.h"
-
-#include "fmgr.h"
-#include "utils/dynamic_loader.h"
-
-char *beos_dlerror(void);
-void *beos_dlopen(const char *filename);
-void *beos_dlsym(void *handle, const char *name);
-void beos_dlclose(void *handle);
-
-#define pg_dlopen(f) beos_dlopen(f)
-#define pg_dlsym beos_dlsym
-#define pg_dlclose beos_dlclose
-#define pg_dlerror beos_dlerror
-
#endif /* PORT_PROTOS_H */