103 lines
2 KiB
C
103 lines
2 KiB
C
/* Copyright (C) 1986-2001 by Digital Mars. $Revision: 1.1.1.1 $ */
|
|
#if __SC__ || __RCC__
|
|
#pragma once
|
|
#endif
|
|
|
|
#ifndef __SETJMP_H
|
|
#define __SETJMP_H 1
|
|
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Define _CRTAPI1 (for compatibility with the NT SDK) */
|
|
#ifndef _CRTAPI1
|
|
#define _CRTAPI1 __cdecl
|
|
#endif
|
|
|
|
/* Define _CRTAPI2 (for compatibility with the NT SDK) */
|
|
#ifndef _CRTAPI2
|
|
#define _CRTAPI2 __cdecl
|
|
#endif
|
|
|
|
/* Define CRTIMP */
|
|
#ifndef _CRTIMP
|
|
#if defined(_WIN32) && defined(_DLL)
|
|
#define _CRTIMP __declspec(dllimport)
|
|
#else
|
|
#define _CRTIMP
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(_WIN32)
|
|
#define _JBLEN 16
|
|
#elif __INTSIZE == 4
|
|
#define _JBLEN 10
|
|
#else
|
|
#define _JBLEN 9
|
|
#endif
|
|
|
|
typedef int jmp_buf[_JBLEN];
|
|
|
|
#if __OS2__ && __INTSIZE == 4
|
|
#define __CLIB __stdcall
|
|
#else
|
|
#define __CLIB __cdecl
|
|
#endif
|
|
|
|
#if defined(_WINDOWS) && __INTSIZE == 2
|
|
int __far __pascal Catch(int __far *);
|
|
void __far __pascal Throw(int const __far *,int);
|
|
#define _setjmp(A) Catch(A)
|
|
#define longjmp(A,B) Throw(A,B)
|
|
#else
|
|
int __CLIB _setjmp(jmp_buf);
|
|
int __CLIB setjmp(jmp_buf); /* prototype provided for backward compatability */
|
|
void __CLIB longjmp(jmp_buf,int);
|
|
|
|
#if _WIN32
|
|
int __CLIB _inline_setjmp(jmp_buf);
|
|
#undef _setjmp
|
|
#define _setjmp(x) _inline_setjmp(x)
|
|
|
|
/*
|
|
* Define jump buffer layout for setjmp/longjmp under NT that unwinds stack
|
|
*/
|
|
typedef struct __JUMP_BUFFER {
|
|
unsigned long Ebp;
|
|
unsigned long Ebx;
|
|
unsigned long Edi;
|
|
unsigned long Esi;
|
|
unsigned long Esp;
|
|
unsigned long Eip;
|
|
unsigned long Except_Registration;
|
|
unsigned long TryLevel;
|
|
unsigned long Reserved;
|
|
unsigned long Unwind_Handler;
|
|
unsigned long ExceptData[6];
|
|
} _JUMP_BUFFER;
|
|
|
|
#endif
|
|
|
|
#if M_UNIX || M_XENIX
|
|
#if !__STDC__ || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
|
|
|
|
#define _SIGJBLEN 128
|
|
|
|
typedef int sigjmp_buf[_SIGJBLEN];
|
|
|
|
extern int __CLIB sigsetjmp(sigjmp_buf, int);
|
|
extern void __CLIB siglongjmp(sigjmp_buf, int);
|
|
#endif
|
|
#endif /* M_UNIX || M_XENIX */
|
|
|
|
#endif /* _WINDOWS */
|
|
|
|
#define setjmp _setjmp
|
|
|
|
#if __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|