From 2de3d96f6923791e580967cb55b1a44c9685bb62 Mon Sep 17 00:00:00 2001 From: Bryan Henderson Date: Mon, 13 Jan 1997 01:26:29 +0000 Subject: [PATCH] Add nextstep port, courtesy of Ovidiu Predescu. --- src/backend/port/nextstep/Makefile | 31 ++++++++++++++ src/backend/port/nextstep/dynloader.c | 72 +++++++++++++++++++++++++++++++++ src/backend/port/nextstep/machine.h | 6 +++ src/backend/port/nextstep/port-protos.h | 27 +++++++++++++ src/backend/port/nextstep/port.c | 58 ++++++++++++++++++++++++++ 5 files changed, 194 insertions(+) create mode 100644 src/backend/port/nextstep/Makefile create mode 100644 src/backend/port/nextstep/dynloader.c create mode 100644 src/backend/port/nextstep/machine.h create mode 100644 src/backend/port/nextstep/port-protos.h create mode 100644 src/backend/port/nextstep/port.c diff --git a/src/backend/port/nextstep/Makefile b/src/backend/port/nextstep/Makefile new file mode 100644 index 0000000000..1912ffa923 --- /dev/null +++ b/src/backend/port/nextstep/Makefile @@ -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 index 0000000000..af183d436d --- /dev/null +++ b/src/backend/port/nextstep/dynloader.c @@ -0,0 +1,72 @@ +#include +#include +#include + +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 index 0000000000..ef2585ccb0 --- /dev/null +++ b/src/backend/port/nextstep/machine.h @@ -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 index 0000000000..93fec7642f --- /dev/null +++ b/src/backend/port/nextstep/port-protos.h @@ -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 index 0000000000..3da87b32eb --- /dev/null +++ b/src/backend/port/nextstep/port.c @@ -0,0 +1,58 @@ +#ifndef _POSIX_SOURCE +# include +#else +# include +# include +#endif + +#include +#include + + +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 -- 2.11.0