mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-16 06:00:32 +02:00
99 lines
1.8 KiB
C
99 lines
1.8 KiB
C
/*-------------------------------------------------------------------------
|
||
*
|
||
* exc.h
|
||
* POSTGRES exception handling definitions.
|
||
*
|
||
*
|
||
* Copyright (c) 1994, Regents of the University of California
|
||
*
|
||
* $Id: exc.h,v 1.15 1999/02/13 23:22:18 momjian Exp $
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
#ifndef EXC_H
|
||
#define EXC_H
|
||
|
||
#include <setjmp.h>
|
||
|
||
#include "config.h"
|
||
|
||
extern char *ExcFileName;
|
||
extern Index ExcLineNumber;
|
||
|
||
/*
|
||
* ExcMessage and Exception are now defined in c.h
|
||
*/
|
||
#if defined(JMP_BUF)
|
||
typedef jmp_buf ExcContext;
|
||
|
||
#else
|
||
typedef sigjmp_buf ExcContext;
|
||
|
||
#endif
|
||
|
||
typedef Exception *ExcId;
|
||
typedef long ExcDetail;
|
||
typedef char *ExcData;
|
||
|
||
typedef struct ExcFrame
|
||
{
|
||
struct ExcFrame *link;
|
||
ExcContext context;
|
||
ExcId id;
|
||
ExcDetail detail;
|
||
ExcData data;
|
||
ExcMessage message;
|
||
} ExcFrame;
|
||
|
||
extern ExcFrame *ExcCurFrameP;
|
||
|
||
/* These are not used anywhere 1998/6/15 */
|
||
#define ExcBegin() \
|
||
do { \
|
||
ExcFrame exception; \
|
||
\
|
||
exception.link = ExcCurFrameP; \
|
||
if (sigsetjmp(exception.context, 1) == 0) \
|
||
{ \
|
||
ExcCurFrameP = &exception;
|
||
|
||
#define ExcExcept() \
|
||
} \
|
||
ExcCurFrameP = exception.link; \
|
||
} \
|
||
else \
|
||
{ \
|
||
{
|
||
|
||
#define ExcEnd() \
|
||
} \
|
||
} \
|
||
} while(0)
|
||
|
||
#define raise4(x, t, d, message) \
|
||
ExcRaise(&(x), (ExcDetail)(t), (ExcData)(d), (ExcMessage)(message))
|
||
|
||
#define reraise() \
|
||
raise4(*exception.id,exception.detail,exception.data,exception.message)
|
||
|
||
typedef void ExcProc (Exception *, ExcDetail, ExcData, ExcMessage);
|
||
|
||
|
||
/*
|
||
* prototypes for functions in exc.c
|
||
*/
|
||
extern void EnableExceptionHandling(bool on);
|
||
extern void ExcRaise(Exception *excP,
|
||
ExcDetail detail,
|
||
ExcData data,
|
||
ExcMessage message);
|
||
|
||
|
||
/*
|
||
* prototypes for functions in excabort.c
|
||
*/
|
||
extern void ExcAbort(const Exception *excP, ExcDetail detail, ExcData data,
|
||
ExcMessage message);
|
||
|
||
#endif /* EXC_H */
|