OSDN Git Service

Add nextstep port, courtesy of Ovidiu Predescu.
authorBryan Henderson <bryanh@giraffe.netgate.net>
Mon, 13 Jan 1997 01:26:29 +0000 (01:26 +0000)
committerBryan Henderson <bryanh@giraffe.netgate.net>
Mon, 13 Jan 1997 01:26:29 +0000 (01:26 +0000)
src/backend/port/nextstep/Makefile [new file with mode: 0644]
src/backend/port/nextstep/dynloader.c [new file with mode: 0644]
src/backend/port/nextstep/machine.h [new file with mode: 0644]
src/backend/port/nextstep/port-protos.h [new file with mode: 0644]
src/backend/port/nextstep/port.c [new file with mode: 0644]

diff --git a/src/backend/port/nextstep/Makefile b/src/backend/port/nextstep/Makefile
new file mode 100644 (file)
index 0000000..1912ffa
--- /dev/null
@@ -0,0 +1,31 @@
+#-------------------------------------------------------------------------
+#
+# Makefile--
+#    Makefile for port/next (NeXTStep 3.3 specific stuff)
+#
+#-------------------------------------------------------------------------
+
+SRCDIR = ../../..
+include ../../../Makefile.global
+
+INCLUDE_OPT = -I../.. \
+              -I../../../include
+
+CFLAGS+=$(INCLUDE_OPT)
+
+OBJS = dynloader.o port.o
+
+all: SUBSYS.o
+
+SUBSYS.o: $(OBJS)
+       $(LD) -r -o SUBSYS.o $(OBJS)
+
+depend dep:
+       $(CC) -MM $(INCLUDE_OPT) *.c >depend
+
+clean:
+       rm -f SUBSYS.o $(OBJS)
+
+ifeq (depend,$(wildcard depend))
+include depend
+endif
diff --git a/src/backend/port/nextstep/dynloader.c b/src/backend/port/nextstep/dynloader.c
new file mode 100644 (file)
index 0000000..af183d4
--- /dev/null
@@ -0,0 +1,72 @@
+#include <mach-o/rld.h>
+#include <streams/streams.h>
+#include <stdlib.h>
+
+static char* lastError = NULL;
+
+static NXStream* OpenError()
+{
+    return NXOpenMemory(NULL, 0, NX_WRITEONLY);
+}
+
+static void CloseError(NXStream* s)
+{
+    if (s)
+       NXCloseMemory (s, NX_FREEBUFFER);
+}
+
+static void TransferError(NXStream* s)
+{
+    char *buffer;
+    int len, maxlen;
+
+    if (lastError)
+        free (lastError);
+    NXGetMemoryBuffer (s, &buffer, &len, &maxlen);
+    lastError = malloc (len + 1);
+    strcpy (lastError, buffer);
+}
+
+void* next_dlopen(char* name)
+{
+    int rld_success;
+    NXStream* errorStream;
+    char* result = NULL;
+    char **p;
+       
+    errorStream = OpenError();
+    p = calloc (2, sizeof(void*));
+    p[0] = name;
+    rld_success = rld_load(errorStream, NULL, p, NULL);
+    free (p);
+
+    if (!rld_success) {
+       TransferError (errorStream);
+       result = (char*)1;
+    }
+    CloseError (errorStream);
+    return result;
+}
+
+int next_dlclose(void* handle)
+{
+    return 0;
+}
+
+void* next_dlsym (void *handle, char *symbol)
+{
+    NXStream* errorStream = OpenError();
+    char symbuf[1024];
+    unsigned long symref = 0;
+
+    sprintf(symbuf, "_%s", symbol);
+    if (!rld_lookup (errorStream, symbuf, &symref))
+       TransferError(errorStream);
+    CloseError(errorStream);
+    return (void*) symref;
+}
+
+char* next_dlerror(void)
+{
+    return lastError;
+}
diff --git a/src/backend/port/nextstep/machine.h b/src/backend/port/nextstep/machine.h
new file mode 100644 (file)
index 0000000..ef2585c
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef MACHINE_H
+#define MACHINE_H
+
+#define BLCKSZ 8192
+
+#endif
diff --git a/src/backend/port/nextstep/port-protos.h b/src/backend/port/nextstep/port-protos.h
new file mode 100644 (file)
index 0000000..93fec76
--- /dev/null
@@ -0,0 +1,27 @@
+/*-------------------------------------------------------------------------
+ *
+ * port-protos.h--
+ *    port-specific prototypes for NeXT
+ *
+  
+-------------------------------------------------------------------------
+ */
+#ifndef PORT_PROTOS_H
+#define PORT_PROTOS_H
+
+#include "fmgr.h"                      /* for func_ptr */
+#include "utils/dynamic_loader.h"
+
+void* next_dlopen(char* name);
+int next_dlclose(void* handle);
+void* next_dlsym (void *handle, char *symbol);
+char* next_dlerror(void);
+
+#define        pg_dlopen(f)    next_dlopen
+#define        pg_dlsym        next_dlsym
+#define        pg_dlclose      next_dlclose
+#define        pg_dlerror      next_dlerror
+
+/* port.c */
+
+#endif /* PORT_PROTOS_H */
diff --git a/src/backend/port/nextstep/port.c b/src/backend/port/nextstep/port.c
new file mode 100644 (file)
index 0000000..3da87b3
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef _POSIX_SOURCE
+# include <libc.h>
+#else
+# include <unistd.h>
+# include <stdlib.h>
+#endif
+
+#include <string.h>
+#include <sys/signal.h>
+
+
+void putenv(char* name)
+{
+    extern char** environ;
+    static int was_mallocated = 0;
+    int size;
+
+    /* Compute the size of environ array including the final NULL */
+    for (size = 1; environ[size++];)
+       /* nothing */;
+
+    if (!was_mallocated) {
+       char** tmp = environ;
+       int i;
+
+       was_mallocated = 1;
+       environ = malloc (size * sizeof(char*));
+       for (i = 0; i < size; i++)
+           environ[i] = tmp[i];
+    }
+
+    environ = realloc (environ, (size + 1) * sizeof (char*));
+    environ[size - 1] = strcpy (malloc (strlen (name) + 1), name);
+    environ[size] = NULL;
+}
+
+char* strdup (const char* string)
+{
+    return strcpy (malloc (strlen (string) + 1), string);
+}
+
+#ifndef _POSIX_SOURCE
+int sigaddset(int *set, int signo)
+{
+    *set |= sigmask(signo);
+    return *set;
+}
+
+int sigemptyset(int *set)
+{
+    return (*set = 0);
+}
+
+char *getcwd(char *buf, size_t size)
+{
+    return getwd (buf);
+}
+#endif