diff --git a/contrib/os2client/Makefile b/contrib/os2client/Makefile new file mode 100644 index 0000000000..b8ace03f29 --- /dev/null +++ b/contrib/os2client/Makefile @@ -0,0 +1,91 @@ +#------------------------------------------------------------------------- +# +# Makefile +# Makefile for libpq library +# +# Copyright (c) 1994, Regents of the University of California +# +# +# IDENTIFICATION +# $Header: /cvsroot/pgsql/contrib/os2client/Attic/Makefile,v 1.1 1998/10/31 04:10:52 scrappy Exp $ +# +#------------------------------------------------------------------------- + +SO_MAJOR_VERSION=1 +SO_MINOR_VERSION=1 + +SRCDIR= ../../src + +INTERFACES= $(SRCDIR)/interfaces/libpq + +PORTNAME=OS2 + +CC=gcc +CFLAGS=-I. -I$(SRCDIR)/include +CFLAGS+=-DFRONTEND -DTCPIPV4 -DHAVE_CRYPT_H + +CP= copy + +AR=ar + +AROPT=rc + +RANLIB= ar s + +LDFLAGS= -L. + +OBJS= fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-lobj.o fe-print.o \ + dllist.o pqsignal.o pqcomprim.o + +EXEOBJS= psql.o stringutils.o + +all: libpq.a c.h psql + +fe-auth.o: $(INTERFACES)/fe-auth.c + $(CC) $(CFLAGS) -c $(INTERFACES)/fe-auth.c + +fe-connect.o: $(INTERFACES)/fe-connect.c + $(CC) $(CFLAGS) -c $(INTERFACES)/fe-connect.c + +fe-exec.o: $(INTERFACES)/fe-exec.c + $(CC) $(CFLAGS) -c $(INTERFACES)/fe-exec.c + +fe-lobj.o: $(INTERFACES)/fe-lobj.c + $(CC) $(CFLAGS) -c $(INTERFACES)/fe-lobj.c + +fe-misc.o: $(INTERFACES)/fe-misc.c + $(CC) $(CFLAGS) -c $(INTERFACES)/fe-misc.c + +fe-print.o: $(INTERFACES)/fe-print.c + $(CC) $(CFLAGS) -c $(INTERFACES)/fe-print.c + +pqsignal.o: $(INTERFACES)/pqsignal.c + $(CC) $(CFLAGS) -c $(INTERFACES)/pqsignal.c + +dllist.o: $(SRCDIR)/backend/lib/dllist.c + $(CC) $(CFLAGS) -c $(SRCDIR)/backend/lib/dllist.c + +pqcomprim.o: $(SRCDIR)/backend/libpq/pqcomprim.c + $(CC) $(CFLAGS) -c $(SRCDIR)/backend/libpq/pqcomprim.c + +libpq.a: $(OBJS) + $(AR) $(AROPT) libpq.a $(OBJS) + $(RANLIB) libpq.a + +psql: $(EXEOBJS) + $(CC) -o psql.exe $(EXEOBJS) $(LDFLAGS) -llibpq -lsocket -lufc + +psql.o: $(SRCDIR)/bin/psql/psql.c + $(CC) $(CFLAGS) -I$(INTERFACES) -c $(SRCDIR)/bin/psql/psql.c + +stringutils.o: $(SRCDIR)/bin/psql/stringutils.c + $(CC) $(CFLAGS) -I$(INTERFACES) -c $(SRCDIR)/bin/psql/stringutils.c + +c.h: $(SRCDIR)/include/c.h + rm -f c.h + $(CP) portname c.h + cat $(SRCDIR)/include/c.h >> c.h + +clean: + rm -f libpq.a $(OBJS) $(EXEOBJS) psql.exe c.h dllist.c pqcomprim.c + diff --git a/contrib/os2client/README b/contrib/os2client/README new file mode 100644 index 0000000000..306cda27ea --- /dev/null +++ b/contrib/os2client/README @@ -0,0 +1,50 @@ + +19981029 libpq.a and psql.exe Version 6.4 for OS/2 +--------------------------------------------------- + + +Requirements: + +emx 0.9c or newer under OS/2 +GNU crypt library for emx+gcc version 2.0.6 (available from + ftp://ftp.leo.org/pub/comp/os/os2/leo/crypt/gnuufc.zip) + + +Also a patch is needed for sys/socket.h around line 291. The lines +with the pluses need to be added, the other lines are already there +and are only for reference: + + +#define MT_IFADDR 13 + ++#ifndef MAXSOCKETS ++#define MAXSOCKETS 2048 ++#endif + +struct mbstat { + u_short m_mbufs; + u_short m_clusters; + + +Possible problems: + + You will also need to #define TCPIPV4 + + Make sure both socket.a and ufc.a are linked in to the executable +AFTER libpq.a. + +The following include files will be needed in order to use the library. +You only need to include one (libpq-fe.h) but these need to be present: + +postgres_ext.h +libpq/pqcomm.h +lib/dllist.h" +c.h + + +Good luck and enjoy!! + +Vince Vielhaber + + + diff --git a/contrib/os2client/c.h b/contrib/os2client/c.h new file mode 100644 index 0000000000..5fbc5ae22e --- /dev/null +++ b/contrib/os2client/c.h @@ -0,0 +1,829 @@ +#undef PORTNAME +#define PORTNAME OS2 +/*------------------------------------------------------------------------- + * + * c.h-- + * Fundamental C definitions. This is included by every .c file in + * postgres. + * + * + * Copyright (c) 1994, Regents of the University of California + * + * $Id: c.h,v 1.1 1998/10/31 04:10:53 scrappy Exp $ + * + *------------------------------------------------------------------------- + */ +/* + * TABLE OF CONTENTS + * + * When adding stuff to this file, please try and put stuff + * into the relevant section, or add new sections as appropriate. + * + * section description + * ------- ------------------------------------------------ + * 1) bool, true, false, TRUE, FALSE + * 2) __STDC__, non-ansi C definitions: + * Pointer typedef, NULL + * cpp magic macros + * type prefixes: const, signed, volatile, inline + * 3) standard system types + * 4) datum type + * 5) IsValid macros for system types + * 6) offsetof, lengthof, endof + * 7) exception handling definitions, Assert, Trap, etc macros + * 8) Min, Max, Abs, StrNCpy macros + * 9) externs + * 10) Berkeley-specific defs + * 11) system-specific hacks + * + * NOTES + * + * This file is MACHINE AND COMPILER dependent!!! (For now.) + * + * ---------------------------------------------------------------- + */ +#ifndef C_H +#define C_H + +/* We have to include stdlib.h here because it defines many of these macros + on some platforms, and we only want our definitions used if stdlib.h doesn't + have its own. +*/ +#include + +/* ---------------------------------------------------------------- + * Section 1: bool, true, false, TRUE, FALSE + * ---------------------------------------------------------------- + */ +/* + * bool -- + * Boolean value, either true or false. + * + */ +#define false ((char) 0) +#define true ((char) 1) +#ifndef __cplusplus +#ifndef bool +typedef char bool; +#endif /* ndef bool */ +#endif /* not C++ */ +typedef bool *BoolPtr; + +#ifndef TRUE +#define TRUE 1 +#endif /* TRUE */ + +#ifndef FALSE +#define FALSE 0 +#endif /* FALSE */ + +/* ---------------------------------------------------------------- + * Section 2: __STDC__, non-ansi C definitions: + * + * cpp magic macros + * Pointer typedef, NULL + * type prefixes: const, signed, volatile, inline + * ---------------------------------------------------------------- + */ + +#ifdef __STDC__ /* ANSI C */ + +/* + * Pointer -- + * Variable holding address of any memory resident object. + */ + +/* + * XXX Pointer arithmetic is done with this, so it can't be void * + * under "true" ANSI compilers. + */ +typedef char *Pointer; + +#ifndef NULL +/* + * NULL -- + * Null pointer. + */ +#define NULL ((void *) 0) +#endif /* !defined(NULL) */ + +#define HAVE_ANSI_CPP /* all ANSI C compilers must have this! */ +#if defined(NEED_STD_HDRS) +#undef NEED_STD_HDRS /* all ANSI systems must have + * stddef/stdlib */ +#endif /* NEED_STD_HDRS */ + +#else /* !defined(__STDC__) *//* NOT ANSI C */ + +/* + * Pointer -- + * Variable containing address of any memory resident object. + */ +typedef char *Pointer; + +#ifndef NULL +/* + * NULL -- + * Null pointer. + */ +#define NULL 0 +#endif /* !defined(NULL) */ + +/* + * const -- + * Type modifier. Identifies read only variables. + * + * Example: + * extern const Version RomVersion; + */ +#ifndef WIN32 +#define const /* const */ +#endif + +/* + * signed -- + * Type modifier. Identifies signed integral types. + */ +#define signed /* signed */ + +/* + * volatile -- + * Type modifier. Identifies variables which may change in ways not + * noticeable by the compiler, e.g. via asynchronous interrupts. + * + * Example: + * extern volatile unsigned int NumberOfInterrupts; + */ +#define volatile /* volatile */ + +#endif /* !defined(__STDC__) */ /* NOT ANSI C */ + +/* + * CppAsString -- + * Convert the argument to a string, using the C preprocessor. + * CppConcat -- + * Concatenate two arguments together, using the C preprocessor. + */ +#if defined(HAVE_ANSI_CPP) + +#define CppAsString(identifier) #identifier +#define CppConcat(x, y) x##y + +#else /* !HAVE_ANSI_CPP */ + +#define CppAsString(identifier) "identifier" + +/* + * CppIdentity -- On Reiser based cpp's this is used to concatenate + * two tokens. That is + * CppIdentity(A)B ==> AB + * We renamed it to _private_CppIdentity because it should not + * be referenced outside this file. On other cpp's it + * produces A B. + */ +#define _priv_CppIdentity(x)x +#define CppConcat(x, y) _priv_CppIdentity(x)y + +#endif /* !HAVE_ANSI_CPP */ + +#ifndef __GNUC__ /* GNU cc */ +#endif + +#ifndef __GNUC__ /* GNU cc */ +#define inline +/* + * dummyret is used to set return values in macros that use ?: to make + * assignments. gcc wants these to be void, other compilers like char + */ +#define dummyret char +#else +#define dummyret void +#endif + +#if defined(NEED_STD_HDRS) +/* + * You're doomed. We've removed almost all of our own C library + * extern declarations because they conflict on the different + * systems. You'll have to write your own stdlib.h. + */ +#include "stdlib.h" +#else /* NEED_STD_HDRS */ +#include +#include +#endif /* NEED_STD_HDRS */ + +/* ---------------------------------------------------------------- + * Section 3: standard system types + * ---------------------------------------------------------------- + */ + +/* + * intN -- + * Signed integer, EXACTLY N BITS IN SIZE, + * used for numerical computations and the + * frontend/backend protocol. + */ +typedef signed char int8; /* == 8 bits */ +typedef signed short int16; /* == 16 bits */ +typedef signed int int32; /* == 32 bits */ + +/* + * uintN -- + * Unsigned integer, EXACTLY N BITS IN SIZE, + * used for numerical computations and the + * frontend/backend protocol. + */ +typedef unsigned char uint8; /* == 8 bits */ +typedef unsigned short uint16; /* == 16 bits */ +typedef unsigned int uint32; /* == 32 bits */ + +/* + * floatN -- + * Floating point number, AT LEAST N BITS IN SIZE, + * used for numerical computations. + * + * Since sizeof(floatN) may be > sizeof(char *), always pass + * floatN by reference. + */ +typedef float float32data; +typedef double float64data; +typedef float *float32; +typedef double *float64; + +/* + * boolN -- + * Boolean value, AT LEAST N BITS IN SIZE. + */ +typedef uint8 bool8; /* >= 8 bits */ +typedef uint16 bool16; /* >= 16 bits */ +typedef uint32 bool32; /* >= 32 bits */ + +/* + * bitsN -- + * Unit of bitwise operation, AT LEAST N BITS IN SIZE. + */ +typedef uint8 bits8; /* >= 8 bits */ +typedef uint16 bits16; /* >= 16 bits */ +typedef uint32 bits32; /* >= 32 bits */ + +/* + * wordN -- + * Unit of storage, AT LEAST N BITS IN SIZE, + * used to fetch/store data. + */ +typedef uint8 word8; /* >= 8 bits */ +typedef uint16 word16; /* >= 16 bits */ +typedef uint32 word32; /* >= 32 bits */ + +/* + * Size -- + * Size of any memory resident object, as returned by sizeof. + */ +typedef unsigned int Size; + +/* + * Index -- + * Index into any memory resident array. + * + * Note: + * Indices are non negative. + */ +typedef unsigned int Index; + +#define MAXDIM 6 +typedef struct +{ + int indx[MAXDIM]; +} IntArray; + +/* + * Offset -- + * Offset into any memory resident array. + * + * Note: + * This differs from an Index in that an Index is always + * non negative, whereas Offset may be negative. + */ +typedef signed int Offset; + +/* ---------------------------------------------------------------- + * Section 4: datum type + support macros + * ---------------------------------------------------------------- + */ +/* + * datum.h -- + * POSTGRES abstract data type datum representation definitions. + * + * Note: + * + * Port Notes: + * Postgres makes the following assumption about machines: + * + * sizeof(Datum) == sizeof(long) >= sizeof(void *) >= 4 + * + * Postgres also assumes that + * + * sizeof(char) == 1 + * + * and that + * + * sizeof(short) == 2 + * + * If your machine meets these requirements, Datums should also be checked + * to see if the positioning is correct. + * + * This file is MACHINE AND COMPILER dependent!!! + */ + +typedef unsigned long Datum; /* XXX sizeof(long) >= sizeof(void *) */ +typedef Datum *DatumPtr; + +#define GET_1_BYTE(datum) (((Datum) (datum)) & 0x000000ff) +#define GET_2_BYTES(datum) (((Datum) (datum)) & 0x0000ffff) +#define GET_4_BYTES(datum) (((Datum) (datum)) & 0xffffffff) +#define SET_1_BYTE(value) (((Datum) (value)) & 0x000000ff) +#define SET_2_BYTES(value) (((Datum) (value)) & 0x0000ffff) +#define SET_4_BYTES(value) (((Datum) (value)) & 0xffffffff) + +/* + * DatumGetChar -- + * Returns character value of a datum. + */ + +#define DatumGetChar(X) ((char) GET_1_BYTE(X)) + +/* + * CharGetDatum -- + * Returns datum representation for a character. + */ + +#define CharGetDatum(X) ((Datum) SET_1_BYTE(X)) + +/* + * Int8GetDatum -- + * Returns datum representation for an 8-bit integer. + */ + +#define Int8GetDatum(X) ((Datum) SET_1_BYTE(X)) + +/* + * DatumGetUInt8 -- + * Returns 8-bit unsigned integer value of a datum. + */ + +#define DatumGetUInt8(X) ((uint8) GET_1_BYTE(X)) + +/* + * UInt8GetDatum -- + * Returns datum representation for an 8-bit unsigned integer. + */ + +#define UInt8GetDatum(X) ((Datum) SET_1_BYTE(X)) + +/* + * DatumGetInt16 -- + * Returns 16-bit integer value of a datum. + */ + +#define DatumGetInt16(X) ((int16) GET_2_BYTES(X)) + +/* + * Int16GetDatum -- + * Returns datum representation for a 16-bit integer. + */ + +#define Int16GetDatum(X) ((Datum) SET_2_BYTES(X)) + +/* + * DatumGetUInt16 -- + * Returns 16-bit unsigned integer value of a datum. + */ + +#define DatumGetUInt16(X) ((uint16) GET_2_BYTES(X)) + +/* + * UInt16GetDatum -- + * Returns datum representation for a 16-bit unsigned integer. + */ + +#define UInt16GetDatum(X) ((Datum) SET_2_BYTES(X)) + +/* + * DatumGetInt32 -- + * Returns 32-bit integer value of a datum. + */ + +#define DatumGetInt32(X) ((int32) GET_4_BYTES(X)) + +/* + * Int32GetDatum -- + * Returns datum representation for a 32-bit integer. + */ + +#define Int32GetDatum(X) ((Datum) SET_4_BYTES(X)) + +/* + * DatumGetUInt32 -- + * Returns 32-bit unsigned integer value of a datum. + */ + +#define DatumGetUInt32(X) ((uint32) GET_4_BYTES(X)) + +/* + * UInt32GetDatum -- + * Returns datum representation for a 32-bit unsigned integer. + */ + +#define UInt32GetDatum(X) ((Datum) SET_4_BYTES(X)) + +/* + * DatumGetObjectId -- + * Returns object identifier value of a datum. + */ + +#define DatumGetObjectId(X) ((Oid) GET_4_BYTES(X)) + +/* + * ObjectIdGetDatum -- + * Returns datum representation for an object identifier. + */ + +#define ObjectIdGetDatum(X) ((Datum) SET_4_BYTES(X)) + +/* + * DatumGetPointer -- + * Returns pointer value of a datum. + */ + +#define DatumGetPointer(X) ((Pointer) X) + +/* + * PointerGetDatum -- + * Returns datum representation for a pointer. + */ + +#define PointerGetDatum(X) ((Datum) X) + +/* + * DatumGetName -- + * Returns name value of a datum. + */ + +#define DatumGetName(X) ((Name) DatumGetPointer((Datum) X)) + +/* + * NameGetDatum -- + * Returns datum representation for a name. + */ + +#define NameGetDatum(X) PointerGetDatum((Pointer) X) + + +/* + * DatumGetFloat32 -- + * Returns 32-bit floating point value of a datum. + * This is really a pointer, of course. + */ + +#define DatumGetFloat32(X) ((float32) DatumGetPointer((Datum) X)) + +/* + * Float32GetDatum -- + * Returns datum representation for a 32-bit floating point number. + * This is really a pointer, of course. + */ + +#define Float32GetDatum(X) PointerGetDatum((Pointer) X) + +/* + * DatumGetFloat64 -- + * Returns 64-bit floating point value of a datum. + * This is really a pointer, of course. + */ + +#define DatumGetFloat64(X) ((float64) DatumGetPointer(X)) + +/* + * Float64GetDatum -- + * Returns datum representation for a 64-bit floating point number. + * This is really a pointer, of course. + */ + +#define Float64GetDatum(X) PointerGetDatum((Pointer) X) + +/* ---------------------------------------------------------------- + * Section 5: IsValid macros for system types + * ---------------------------------------------------------------- + */ +/* + * BoolIsValid -- + * True iff bool is valid. + */ +#define BoolIsValid(boolean) ((boolean) == false || (boolean) == true) + +/* + * PointerIsValid -- + * True iff pointer is valid. + */ +#define PointerIsValid(pointer) (bool)((void*)(pointer) != NULL) + +/* + * PointerIsInBounds -- + * True iff pointer is within given bounds. + * + * Note: + * Assumes the bounded interval to be [min,max), + * i.e. closed on the left and open on the right. + */ +#define PointerIsInBounds(pointer, min, max) \ + ((min) <= (pointer) && (pointer) < (max)) + +/* + * PointerIsAligned -- + * True iff pointer is properly aligned to point to the given type. + */ +#define PointerIsAligned(pointer, type) \ + (((long)(pointer) % (sizeof (type))) == 0) + +/* ---------------------------------------------------------------- + * Section 6: offsetof, lengthof, endof + * ---------------------------------------------------------------- + */ +/* + * offsetof -- + * Offset of a structure/union field within that structure/union. + * + * XXX This is supposed to be part of stddef.h, but isn't on + * some systems (like SunOS 4). + */ +#ifndef offsetof +#define offsetof(type, field) ((long) &((type *)0)->field) +#endif /* offsetof */ + +/* + * lengthof -- + * Number of elements in an array. + */ +#define lengthof(array) (sizeof (array) / sizeof ((array)[0])) + +/* + * endof -- + * Address of the element one past the last in an array. + */ +#define endof(array) (&array[lengthof(array)]) + +/* ---------------------------------------------------------------- + * Section 7: exception handling definitions + * Assert, Trap, etc macros + * ---------------------------------------------------------------- + */ +/* + * Exception Handling definitions + */ + +typedef char *ExcMessage; +typedef struct Exception +{ + ExcMessage message; +} Exception; + +/* + * USE_ASSERT_CHECKING, if defined, turns on all the assertions. + * - plai 9/5/90 + * + * It should _NOT_ be defined in releases or in benchmark copies + */ + +/* + * Trap -- + * Generates an exception if the given condition is true. + * + */ +#define Trap(condition, exception) \ + { if ((assert_enabled) && (condition)) \ + ExceptionalCondition(CppAsString(condition), &(exception), \ + (char*)NULL, __FILE__, __LINE__); } + +/* + * TrapMacro is the same as Trap but it's intended for use in macros: + * + * #define foo(x) (AssertM(x != 0) && bar(x)) + * + * Isn't CPP fun? + */ +#define TrapMacro(condition, exception) \ + ((bool) ((! assert_enabled) || (! condition) || \ + (ExceptionalCondition(CppAsString(condition), \ + &(exception), \ + (char*) NULL, __FILE__, __LINE__)))) + +#ifndef USE_ASSERT_CHECKING +#define Assert(condition) +#define AssertMacro(condition) (void)true +#define AssertArg(condition) +#define AssertState(condition) +#define assert_enabled 0 +#else +#define Assert(condition) \ + Trap(!(condition), FailedAssertion) + +#define AssertMacro(condition) \ + (void)TrapMacro(!(condition), FailedAssertion) + +#define AssertArg(condition) \ + Trap(!(condition), BadArg) + +#define AssertState(condition) \ + Trap(!(condition), BadState) + +extern int assert_enabled; + +#endif /* USE_ASSERT_CHECKING */ + +/* + * LogTrap -- + * Generates an exception with a message if the given condition is true. + * + */ +#define LogTrap(condition, exception, printArgs) \ + { if ((assert_enabled) && (condition)) \ + ExceptionalCondition(CppAsString(condition), &(exception), \ + form printArgs, __FILE__, __LINE__); } + +/* + * LogTrapMacro is the same as LogTrap but it's intended for use in macros: + * + * #define foo(x) (LogAssertMacro(x != 0, "yow!") && bar(x)) + */ +#define LogTrapMacro(condition, exception, printArgs) \ + ((bool) ((! assert_enabled) || (! condition) || \ + (ExceptionalCondition(CppAsString(condition), \ + &(exception), \ + form printArgs, __FILE__, __LINE__)))) + +#ifndef USE_ASSERT_CHECKING +#define LogAssert(condition, printArgs) +#define LogAssertMacro(condition, printArgs) true +#define LogAssertArg(condition, printArgs) +#define LogAssertState(condition, printArgs) +#else +#define LogAssert(condition, printArgs) \ + LogTrap(!(condition), FailedAssertion, printArgs) + +#define LogAssertMacro(condition, printArgs) \ + LogTrapMacro(!(condition), FailedAssertion, printArgs) + +#define LogAssertArg(condition, printArgs) \ + LogTrap(!(condition), BadArg, printArgs) + +#define LogAssertState(condition, printArgs) \ + LogTrap(!(condition), BadState, printArgs) + +extern int assertEnable(int val); + +#ifdef ASSERT_CHECKING_TEST +extern int assertTest(int val); + +#endif +#endif /* USE_ASSERT_CHECKING */ + +/* ---------------------------------------------------------------- + * Section 8: Min, Max, Abs macros + * ---------------------------------------------------------------- + */ +/* + * Max -- + * Return the maximum of two numbers. + */ +#define Max(x, y) ((x) > (y) ? (x) : (y)) + +/* + * Min -- + * Return the minimum of two numbers. + */ +#define Min(x, y) ((x) < (y) ? (x) : (y)) + +/* + * Abs -- + * Return the absolute value of the argument. + */ +#define Abs(x) ((x) >= 0 ? (x) : -(x)) + +/* + * StrNCpy -- + * Does string copy, and forces terminating NULL + */ +/* we do this so if the macro is used in an if action, it will work */ +#define StrNCpy(dst,src,len) \ +( \ + ((len) > 0) ? \ + ( \ + strncpy((dst),(src),(len)-1), \ + *((dst)+(len)-1)='\0' \ + ) \ + : \ + (dummyret)NULL,(void)(dst) \ +) + +/* Get a bit mask of the bits set in non-int32 aligned addresses */ +#define INT_ALIGN_MASK (sizeof(int32) - 1) + +/* + * This function gets call too often, so we inline it if we can. + * Are we aligned for int32? + * We have to cast the pointer to int so we can do the AND + * We got the 64 number by testing this against the stock memset() on + * BSD/OS 3.0. Larger values were slower. + */ +#define MemSet(start, val, len) do \ + { \ + if (((long)(start) & INT_ALIGN_MASK) == 0 && \ + ((len) & INT_ALIGN_MASK) == 0 && \ + (val) == 0 && \ + (len) <= 64) \ + { \ + int32 *_i = (int32 *)(start); \ + int32 *_stop = (int32 *)((char *)(start) + (len)); \ + \ + while (_i < _stop) \ + *_i++ = 0; \ + } \ + else \ + memset((start), (val), (len)); \ + } while (0) + +/* ---------------------------------------------------------------- + * Section 9: externs + * ---------------------------------------------------------------- + */ + +extern Exception FailedAssertion; +extern Exception BadArg; +extern Exception BadState; + +/* in utils/error/assert.c */ +extern int ExceptionalCondition(char *conditionName, + Exception *exceptionP, char *details, + char *fileName, int lineNumber); + + +/* ---------------- + * form is used by assert and the exception handling stuff + * ---------------- + */ +extern char *form(const char *fmt,...); + + + +/* ---------------------------------------------------------------- + * Section 10: berkeley-specific configuration + * + * this section contains settings which are only relevant to the UC Berkeley + * sites. Other sites can ignore this + * ---------------------------------------------------------------- + */ + +/* ---------------- + * storage managers + * + * These are experimental and are not supported in the code that + * we distribute to other sites. + * ---------------- + */ +#ifdef NOT_USED +#define STABLE_MEMORY_STORAGE +#endif + + + +/* ---------------------------------------------------------------- + * Section 11: system-specific hacks + * + * This should be limited to things that absolutely have to be + * included in every source file. The changes should be factored + * into a separate file so that changes to one port don't require + * changes to c.h (and everyone recompiling their whole system). + * ---------------------------------------------------------------- + */ + +#ifdef FIXADE +#if defined(hpux) +#include "port/hpux/fixade.h" /* for unaligned access fixup */ +#endif /* hpux */ +#endif + +#if defined(sun) && defined(sparc) && !defined(__SVR4) +#define memmove(d, s, l) bcopy(s, d, l) +#include +#endif + +/* These are for things that are one way on Unix and another on NT */ +#define NULL_DEV "/dev/null" +#define COPY_CMD "cp" +#define SEP_CHAR '/' + +/* ---------------- + * end of c.h + * ---------------- + */ +#endif /* C_H */ diff --git a/contrib/os2client/config.h b/contrib/os2client/config.h new file mode 100644 index 0000000000..d09a59630a --- /dev/null +++ b/contrib/os2client/config.h @@ -0,0 +1,26 @@ + +#ifndef TCPIPV4 +# define TCPIPV4 +#endif + +#ifndef MAXSOCKETS +#define MAXSOCKETS 2048 +#endif + +/* + * DEF_PGPORT is the TCP port number on which the Postmaster listens by + * default. This can be overriden by command options, environment variables, + * and the postconfig hook. (set by build script) + */ + +#define DEF_PGPORT "5432" + +#define HAVE_TERMIOS_H +#define HAVE_ENDIAN_H + +#define SOCKET_SIZE_TYPE size_t + +#define strcasecmp(s1, s2) stricmp(s1, s2) + + + diff --git a/contrib/os2client/libpq.a b/contrib/os2client/libpq.a new file mode 100644 index 0000000000..467782861d Binary files /dev/null and b/contrib/os2client/libpq.a differ diff --git a/contrib/os2client/portname b/contrib/os2client/portname new file mode 100644 index 0000000000..08a7a48043 --- /dev/null +++ b/contrib/os2client/portname @@ -0,0 +1,2 @@ +#undef PORTNAME +#define PORTNAME OS2 diff --git a/contrib/os2client/psql.exe b/contrib/os2client/psql.exe new file mode 100755 index 0000000000..d208e383be Binary files /dev/null and b/contrib/os2client/psql.exe differ