diff options
Diffstat (limited to 'src/include/c.h')
-rw-r--r-- | src/include/c.h | 537 |
1 files changed, 271 insertions, 266 deletions
diff --git a/src/include/c.h b/src/include/c.h index 9a4bad2b7bf..cf9367c0fd1 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -1,46 +1,46 @@ /*------------------------------------------------------------------------- * * c.h-- - * Fundamental C definitions. This is included by every .c file in - * postgres. + * 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.16 1997/08/25 04:15:40 momjian Exp $ + * $Id: c.h,v 1.17 1997/09/07 04:55:35 momjian Exp $ * *------------------------------------------------------------------------- */ /* - * TABLE OF CONTENTS + * TABLE OF CONTENTS * - * When adding stuff to this file, please try and put stuff - * into the relevant section, or add new sections as appropriate. + * 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 + * 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 + * NOTES * - * This file is MACHINE AND COMPILER dependent!!! (For now.) + * This file is MACHINE AND COMPILER dependent!!! (For now.) * * ---------------------------------------------------------------- */ -#ifndef C_H +#ifndef C_H #define C_H /* We have to include stdlib.h here because it defines many of these macros @@ -50,410 +50,413 @@ #include <stdlib.h> /* ---------------------------------------------------------------- - * Section 1: bool, true, false, TRUE, FALSE + * Section 1: bool, true, false, TRUE, FALSE * ---------------------------------------------------------------- */ /* * bool -- - * Boolean value, either true or false. + * Boolean value, either true or false. * */ #define false ((char) 0) #define true ((char) 1) #ifndef __cplusplus typedef char bool; -#endif /* not C++ */ -typedef bool *BoolPtr; + +#endif /* not C++ */ +typedef bool *BoolPtr; #ifndef TRUE #define TRUE 1 -#endif /* TRUE */ +#endif /* TRUE */ #ifndef FALSE #define FALSE 0 -#endif /* FALSE */ +#endif /* FALSE */ /* ---------------------------------------------------------------- - * Section 2: __STDC__, non-ansi C definitions: + * Section 2: __STDC__, non-ansi C definitions: * - * cpp magic macros - * Pointer typedef, NULL - * type prefixes: const, signed, volatile, inline + * cpp magic macros + * Pointer typedef, NULL + * type prefixes: const, signed, volatile, inline * ---------------------------------------------------------------- */ -#ifdef __STDC__ /* ANSI C */ +#ifdef __STDC__ /* ANSI C */ /* * Pointer -- - * Variable holding address of any memory resident object. + * 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. + * XXX Pointer arithmetic is done with this, so it can't be void * + * under "true" ANSI compilers. */ -typedef char *Pointer; +typedef char *Pointer; -#ifndef NULL +#ifndef NULL /* * NULL -- - * Null pointer. + * Null pointer. */ #define NULL ((void *) 0) -#endif /* !defined(NULL) */ +#endif /* !defined(NULL) */ -#define HAVE_ANSI_CPP /* all ANSI C compilers must have this! */ +#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 */ +#undef NEED_STD_HDRS /* all ANSI systems must have + * stddef/stdlib */ +#endif /* NEED_STD_HDRS */ -#else /* !defined(__STDC__) */ /* NOT ANSI C */ +#else /* !defined(__STDC__) *//* NOT ANSI C */ /* * Pointer -- - * Variable containing address of any memory resident object. + * Variable containing address of any memory resident object. */ -typedef char *Pointer; +typedef char *Pointer; -#ifndef NULL +#ifndef NULL /* * NULL -- - * Null pointer. + * Null pointer. */ #define NULL 0 -#endif /* !defined(NULL) */ +#endif /* !defined(NULL) */ /* * const -- - * Type modifier. Identifies read only variables. + * Type modifier. Identifies read only variables. * * Example: - * extern const Version RomVersion; + * extern const Version RomVersion; */ -#define const /* const */ +#define const /* const */ /* * signed -- - * Type modifier. Identifies signed integral types. + * Type modifier. Identifies signed integral types. */ -#define signed /* signed */ +#define signed /* signed */ /* * volatile -- - * Type modifier. Identifies variables which may change in ways not - * noticeable by the compiler, e.g. via asynchronous interrupts. + * 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; + * extern volatile unsigned int NumberOfInterrupts; */ -#define volatile /* volatile */ +#define volatile /* volatile */ -#endif /* !defined(__STDC__) */ /* NOT ANSI C */ +#endif /* !defined(__STDC__) *//* NOT ANSI C */ /* * CppAsString -- - * Convert the argument to a string, using the C preprocessor. + * Convert the argument to a string, using the C preprocessor. * CppConcat -- - * Concatenate two arguments together, using the C preprocessor. + * Concatenate two arguments together, using the C preprocessor. */ #if defined(HAVE_ANSI_CPP) -#define CppAsString(identifier) #identifier -#define CppConcat(x, y) x##y +#define CppAsString(identifier) #identifier +#define CppConcat(x, y) x##y -#else /* !HAVE_ANSI_CPP */ +#else /* !HAVE_ANSI_CPP */ -#define CppAsString(identifier) "identifier" +#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. + * 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 +#define CppConcat(x, y) _priv_CppIdentity(x)y -#endif /* !HAVE_ANSI_CPP */ +#endif /* !HAVE_ANSI_CPP */ -#ifndef __GNUC__ /* GNU cc */ -# define inline +#ifndef __GNUC__ /* GNU cc */ +#define inline #endif #if defined(NEED_STD_HDRS) /* - * You're doomed. We've removed almost all of our own C library + * 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 */ +#else /* NEED_STD_HDRS */ #include <stddef.h> #include <stdlib.h> -#endif /* NEED_STD_HDRS */ +#endif /* NEED_STD_HDRS */ /* ---------------------------------------------------------------- - * Section 3: standard system types + * Section 3: standard system types * ---------------------------------------------------------------- */ /* * intN -- - * Signed integer, AT LEAST N BITS IN SIZE, - * used for numerical computations. + * Signed integer, AT LEAST N BITS IN SIZE, + * used for numerical computations. */ -typedef signed char int8; /* >= 8 bits */ -typedef signed short int16; /* >= 16 bits */ -typedef signed int int32; /* >= 32 bits */ +typedef signed char int8; /* >= 8 bits */ +typedef signed short int16; /* >= 16 bits */ +typedef signed int int32; /* >= 32 bits */ /* * uintN -- - * Unsigned integer, AT LEAST N BITS IN SIZE, - * used for numerical computations. + * Unsigned integer, AT LEAST N BITS IN SIZE, + * used for numerical computations. */ -typedef unsigned char uint8; /* >= 8 bits */ -typedef unsigned short uint16; /* >= 16 bits */ -typedef unsigned int uint32; /* >= 32 bits */ +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. + * 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. + * Since sizeof(floatN) may be > sizeof(char *), always pass + * floatN by reference. */ -typedef float float32data; -typedef double float64data; -typedef float *float32; -typedef double *float64; +typedef float float32data; +typedef double float64data; +typedef float *float32; +typedef double *float64; /* * boolN -- - * Boolean value, AT LEAST N BITS IN SIZE. + * Boolean value, AT LEAST N BITS IN SIZE. */ -typedef uint8 bool8; /* >= 8 bits */ -typedef uint16 bool16; /* >= 16 bits */ -typedef uint32 bool32; /* >= 32 bits */ +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. + * 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 */ +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. + * 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 */ +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. + * Size of any memory resident object, as returned by sizeof. */ -typedef unsigned int Size; +typedef unsigned int Size; /* * Index -- - * Index into any memory resident array. + * Index into any memory resident array. * * Note: - * Indices are non negative. + * Indices are non negative. */ -typedef unsigned int Index; +typedef unsigned int Index; #define MAXDIM 6 -typedef struct { - int indx[MAXDIM]; -} IntArray; +typedef struct +{ + int indx[MAXDIM]; +} IntArray; /* * Offset -- - * Offset into any memory resident array. + * 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. + * This differs from an Index in that an Index is always + * non negative, whereas Offset may be negative. */ -typedef signed int Offset; +typedef signed int Offset; /* ---------------------------------------------------------------- - * Section 4: datum type + support macros + * Section 4: datum type + support macros * ---------------------------------------------------------------- */ /* * datum.h -- - * POSTGRES abstract data type datum representation definitions. + * POSTGRES abstract data type datum representation definitions. * * Note: * * Port Notes: - * Postgres makes the following assumption about machines: + * Postgres makes the following assumption about machines: * - * sizeof(Datum) == sizeof(long) >= sizeof(void *) >= 4 + * sizeof(Datum) == sizeof(long) >= sizeof(void *) >= 4 * - * Postgres also assumes that + * Postgres also assumes that * - * sizeof(char) == 1 + * sizeof(char) == 1 * - * and that + * and that * - * sizeof(short) == 2 + * sizeof(short) == 2 * - * If your machine meets these requirements, Datums should also be checked - * to see if the positioning is correct. + * 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!!! + * This file is MACHINE AND COMPILER dependent!!! */ typedef unsigned long Datum; /* XXX sizeof(long) >= sizeof(void *) */ -typedef Datum * DatumPtr; +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) +#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. + * Returns character value of a datum. */ #define DatumGetChar(X) ((char) GET_1_BYTE(X)) /* * CharGetDatum -- - * Returns datum representation for a character. + * Returns datum representation for a character. */ #define CharGetDatum(X) ((Datum) SET_1_BYTE(X)) /* * Int8GetDatum -- - * Returns datum representation for an 8-bit integer. + * 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. + * 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. + * 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. + * 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. + * 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. + * 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. + * 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. + * 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. + * 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. + * 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. + * 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. + * Returns object identifier value of a datum. */ #define DatumGetObjectId(X) ((Oid) GET_4_BYTES(X)) /* * ObjectIdGetDatum -- - * Returns datum representation for an object identifier. + * Returns datum representation for an object identifier. */ #define ObjectIdGetDatum(X) ((Datum) SET_4_BYTES(X)) /* * DatumGetPointer -- - * Returns pointer value of a datum. + * Returns pointer value of a datum. */ #define DatumGetPointer(X) ((Pointer) X) /* * PointerGetDatum -- - * Returns datum representation for a pointer. + * Returns datum representation for a pointer. */ #define PointerGetDatum(X) ((Datum) X) /* * DatumGetName -- - * Returns name value of a datum. + * Returns name value of a datum. */ #define DatumGetName(X) ((Name) DatumGetPointer((Datum) X)) /* * NameGetDatum -- - * Returns datum representation for a name. + * Returns datum representation for a name. */ #define NameGetDatum(X) PointerGetDatum((Pointer) X) @@ -461,143 +464,144 @@ typedef Datum * DatumPtr; /* * DatumGetFloat32 -- - * Returns 32-bit floating point value of a datum. - * This is really a pointer, of course. + * 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. + * 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. + * 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. + * 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 + * Section 5: IsValid macros for system types * ---------------------------------------------------------------- */ /* * BoolIsValid -- - * True iff bool is valid. + * True iff bool is valid. */ -#define BoolIsValid(boolean) ((boolean) == false || (boolean) == true) +#define BoolIsValid(boolean) ((boolean) == false || (boolean) == true) /* * PointerIsValid -- - * True iff pointer is valid. + * True iff pointer is valid. */ -#define PointerIsValid(pointer) (bool)((void*)(pointer) != NULL) +#define PointerIsValid(pointer) (bool)((void*)(pointer) != NULL) /* * PointerIsInBounds -- - * True iff pointer is within given bounds. + * 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. + * 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)) + ((min) <= (pointer) && (pointer) < (max)) /* * PointerIsAligned -- - * True iff pointer is properly aligned to point to the given type. + * True iff pointer is properly aligned to point to the given type. */ -#define PointerIsAligned(pointer, type) \ - (((long)(pointer) % (sizeof (type))) == 0) +#define PointerIsAligned(pointer, type) \ + (((long)(pointer) % (sizeof (type))) == 0) /* ---------------------------------------------------------------- - * Section 6: offsetof, lengthof, endof + * Section 6: offsetof, lengthof, endof * ---------------------------------------------------------------- */ /* * offsetof -- - * Offset of a structure/union field within that structure/union. + * 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). + * 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 */ +#endif /* offsetof */ /* * lengthof -- - * Number of elements in an array. + * Number of elements in an array. */ -#define lengthof(array) (sizeof (array) / sizeof ((array)[0])) +#define lengthof(array) (sizeof (array) / sizeof ((array)[0])) /* * endof -- - * Address of the element one past the last in an array. + * 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 + * Section 7: exception handling definitions + * Assert, Trap, etc macros * ---------------------------------------------------------------- */ /* * Exception Handling definitions */ -typedef char *ExcMessage; -typedef struct Exception { - ExcMessage message; -} Exception; +typedef char *ExcMessage; +typedef struct Exception +{ + ExcMessage message; +} Exception; /* * NO_ASSERT_CHECKING, if defined, turns off all the assertions. * - plai 9/5/90 * * It should _NOT_ be undef'ed in releases or in benchmark copies - * + * * #undef NO_ASSERT_CHECKING */ /* * Trap -- - * Generates an exception if the given condition is true. + * Generates an exception if the given condition is true. * */ #define Trap(condition, exception) \ - { if (condition) \ - ExceptionalCondition(CppAsString(condition), &(exception), \ - (char*)NULL, __FILE__, __LINE__); } + { if (condition) \ + ExceptionalCondition(CppAsString(condition), &(exception), \ + (char*)NULL, __FILE__, __LINE__); } -/* - * TrapMacro is the same as Trap but it's intended for use in macros: +/* + * TrapMacro is the same as Trap but it's intended for use in macros: * - * #define foo(x) (AssertM(x != 0) && bar(x)) + * #define foo(x) (AssertM(x != 0) && bar(x)) * - * Isn't CPP fun? + * Isn't CPP fun? */ #define TrapMacro(condition, exception) \ - ((bool) ((! condition) || \ - (ExceptionalCondition(CppAsString(condition), \ - &(exception), \ - (char*) NULL, __FILE__, __LINE__)))) - + ((bool) ((! condition) || \ + (ExceptionalCondition(CppAsString(condition), \ + &(exception), \ + (char*) NULL, __FILE__, __LINE__)))) + #ifdef NO_ASSERT_CHECKING #define Assert(condition) #define AssertMacro(condition) true @@ -605,40 +609,40 @@ typedef struct Exception { #define AssertState(condition) #else #define Assert(condition) \ - Trap(!(condition), FailedAssertion) + Trap(!(condition), FailedAssertion) #define AssertMacro(condition) \ - TrapMacro(!(condition), FailedAssertion) + TrapMacro(!(condition), FailedAssertion) #define AssertArg(condition) \ - Trap(!(condition), BadArg) + Trap(!(condition), BadArg) #define AssertState(condition) \ - Trap(!(condition), BadState) + Trap(!(condition), BadState) -#endif /* NO_ASSERT_CHECKING */ +#endif /* NO_ASSERT_CHECKING */ /* * LogTrap -- - * Generates an exception with a message if the given condition is true. + * Generates an exception with a message if the given condition is true. * */ #define LogTrap(condition, exception, printArgs) \ - { if (condition) \ - ExceptionalCondition(CppAsString(condition), &(exception), \ - form printArgs, __FILE__, __LINE__); } + { if (condition) \ + ExceptionalCondition(CppAsString(condition), &(exception), \ + form printArgs, __FILE__, __LINE__); } -/* - * LogTrapMacro is the same as LogTrap but it's intended for use in macros: +/* + * LogTrapMacro is the same as LogTrap but it's intended for use in macros: * - * #define foo(x) (LogAssertMacro(x != 0, "yow!") && bar(x)) + * #define foo(x) (LogAssertMacro(x != 0, "yow!") && bar(x)) */ #define LogTrapMacro(condition, exception, printArgs) \ - ((bool) ((! condition) || \ - (ExceptionalCondition(CppAsString(condition), \ - &(exception), \ - form printArgs, __FILE__, __LINE__)))) - + ((bool) ((! condition) || \ + (ExceptionalCondition(CppAsString(condition), \ + &(exception), \ + form printArgs, __FILE__, __LINE__)))) + #ifdef NO_ASSERT_CHECKING #define LogAssert(condition, printArgs) #define LogAssertMacro(condition, printArgs) true @@ -646,73 +650,74 @@ typedef struct Exception { #define LogAssertState(condition, printArgs) #else #define LogAssert(condition, printArgs) \ - LogTrap(!(condition), FailedAssertion, printArgs) + LogTrap(!(condition), FailedAssertion, printArgs) #define LogAssertMacro(condition, printArgs) \ - LogTrapMacro(!(condition), FailedAssertion, printArgs) + LogTrapMacro(!(condition), FailedAssertion, printArgs) #define LogAssertArg(condition, printArgs) \ - LogTrap(!(condition), BadArg, printArgs) + LogTrap(!(condition), BadArg, printArgs) #define LogAssertState(condition, printArgs) \ - LogTrap(!(condition), BadState, printArgs) + LogTrap(!(condition), BadState, printArgs) -#endif /* NO_ASSERT_CHECKING */ +#endif /* NO_ASSERT_CHECKING */ /* ---------------------------------------------------------------- - * Section 8: Min, Max, Abs macros + * Section 8: Min, Max, Abs macros * ---------------------------------------------------------------- */ /* * Max -- - * Return the maximum of two numbers. + * Return the maximum of two numbers. */ -#define Max(x, y) ((x) > (y) ? (x) : (y)) +#define Max(x, y) ((x) > (y) ? (x) : (y)) /* * Min -- - * Return the minimum of two numbers. + * Return the minimum of two numbers. */ -#define Min(x, y) ((x) < (y) ? (x) : (y)) +#define Min(x, y) ((x) < (y) ? (x) : (y)) /* * Abs -- - * Return the absolute value of the argument. + * Return the absolute value of the argument. */ -#define Abs(x) ((x) >= 0 ? (x) : -(x)) +#define Abs(x) ((x) >= 0 ? (x) : -(x)) /* * strNcpy -- - * Does string copy, and forces terminating NULL + * 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) (strncpy((dst),(src),(len)),*((dst)+(len))='\0') /* ---------------------------------------------------------------- - * Section 9: externs + * Section 9: externs * ---------------------------------------------------------------- */ -extern Exception FailedAssertion; -extern Exception BadArg; -extern Exception BadState; +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); +extern int +ExceptionalCondition(char *conditionName, + Exception * exceptionP, char *details, + char *fileName, int lineNumber); /* ---------------- - * form is used by assert and the exception handling stuff + * form is used by assert and the exception handling stuff * ---------------- */ -extern char *form(const char *fmt, ...); +extern char *form(const char *fmt,...); /* ---------------------------------------------------------------- - * Section 10: berkeley-specific configuration + * Section 10: berkeley-specific configuration * * this section contains settings which are only relevant to the UC Berkeley * sites. Other sites can ignore this @@ -720,10 +725,10 @@ extern char *form(const char *fmt, ...); */ /* ---------------- - * storage managers + * storage managers * - * These are experimental and are not supported in the code that - * we distribute to other sites. + * These are experimental and are not supported in the code that + * we distribute to other sites. * ---------------- */ #ifdef SEQUOIA @@ -733,33 +738,33 @@ extern char *form(const char *fmt, ...); /* ---------------------------------------------------------------- - * Section 11: system-specific hacks + * 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). + * 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 */ +#if defined(hpux) +#include "port/hpux/fixade.h" /* for unaligned access fixup */ +#endif /* hpux */ #endif #if defined(sunos4) -#define memmove(d, s, l) bcopy(s, d, l) +#define memmove(d, s, l) bcopy(s, d, l) #include <unistd.h> #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 '/' +#define NULL_DEV "/dev/null" +#define COPY_CMD "cp" +#define SEP_CHAR '/' /* ---------------- - * end of c.h + * end of c.h * ---------------- */ -#endif /* C_H */ +#endif /* C_H */ |