⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exc.c

📁 关系型数据库 Postgresql 6.5.2
💻 C
字号:
/*------------------------------------------------------------------------- * * exc.c *	  POSTGRES exception handling code. * * Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION *	  $Header: /usr/local/cvsroot/pgsql/src/backend/utils/error/exc.c,v 1.25.2.1 1999/08/02 05:25:04 scrappy Exp $ * * NOTE *	  XXX this code needs improvement--check for state violations and *	  XXX reset after handling an exception. * *------------------------------------------------------------------------- */#include <errno.h>#include "postgres.h"#include "storage/ipc.h"#include "utils/exc.h"static void ExcUnCaught(Exception *excP, ExcDetail detail, ExcData data,			ExcMessage message);static void ExcPrint(Exception *excP, ExcDetail detail, ExcData data,		 ExcMessage message);/* * Global Variables */static bool ExceptionHandlingEnabled = false;char	   *ExcFileName = NULL;Index		ExcLineNumber = 0;ExcFrame   *ExcCurFrameP = NULL;static ExcProc *ExcUnCaughtP = NULL;extern char *ProgramName;/* * Exported Functions *//* * EnableExceptionHandling *		Enables/disables the exception handling system. * * Note: *		This must be called before any exceptions occur.  I.e., call this first! *		This routine will not return if an error is detected. *		This does not follow the usual Enable... protocol. *		This should be merged more closely with the error logging and tracing *		packages. * * Exceptions: *		none *//* * Excection handling should be supported by the language, thus there should * be no need to explicitly enable exception processing. * * This function should probably not be called, ever.  Currently it does * almost nothing.	If there is a need for this intialization and checking. * then this function should be converted to the new-style Enable code and * called by all the other module Enable functions. */voidEnableExceptionHandling(bool on){	if (on == ExceptionHandlingEnabled)	{		/* XXX add logging of failed state */		proc_exit(255);		/* ExitPostgres(FatalExitStatus); */	}	if (on)	{							/* initialize */		;	}	else	{							/* cleanup */		ExcFileName = NULL;		ExcLineNumber = 0;		ExcCurFrameP = NULL;		ExcUnCaughtP = NULL;	}	ExceptionHandlingEnabled = on;}static voidExcPrint(Exception *excP,		 ExcDetail detail,		 ExcData data,		 ExcMessage message){	extern int	errno;	extern int	sys_nerr;#ifdef	lint	data = data;#endif	fflush(stdout);				/* In case stderr is buffered */#if		0	if (ProgramName != NULL && *ProgramName != '\0')		fprintf(stderr, "%s: ", ProgramName);#endif	if (message != NULL)		fprintf(stderr, "%s", message);	else if (excP->message != NULL)		fprintf(stderr, "%s", excP->message);	else#ifdef	lint		fprintf(stderr, "UNNAMED EXCEPTION 0x%lx", excP);#else		fprintf(stderr, "UNNAMED EXCEPTION 0x%lx", (long) excP);#endif	fprintf(stderr, " (%ld)", detail);	if (errno > 0 && errno < sys_nerr)		fprintf(stderr, " [%s]", strerror(errno));	else if (errno != 0)		fprintf(stderr, " [Error %d]", errno);	fprintf(stderr, "\n");	fflush(stderr);}#ifdef NOT_USEDExcProc    *ExcGetUnCaught(void){	return ExcUnCaughtP;}#endif#ifdef NOT_USEDExcProc    *ExcSetUnCaught(ExcProc *newP){	ExcProc    *oldP = ExcUnCaughtP;	ExcUnCaughtP = newP;	return oldP;}#endifstatic voidExcUnCaught(Exception *excP,			ExcDetail detail,			ExcData data,			ExcMessage message){	ExcPrint(excP, detail, data, message);	ExcAbort(excP, detail, data, message);}voidExcRaise(Exception *excP,		 ExcDetail detail,		 ExcData data,		 ExcMessage message){	ExcFrame   *efp;	efp = ExcCurFrameP;	if (efp == NULL)	{		if (ExcUnCaughtP != NULL)			(*ExcUnCaughtP) (excP, detail, data, message);		ExcUnCaught(excP, detail, data, message);	}	else	{		efp->id = excP;		efp->detail = detail;		efp->data = data;		efp->message = message;		ExcCurFrameP = efp->link;#if defined (JMP_BUF)		longjmp(efp->context, 1);#else		siglongjmp(efp->context, 1);#endif	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -