/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos72X src/bos/usr/include/setjmp.h 1.14.3.3                           */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 1985,2021              */
/* All Rights Reserved                                                    */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or            */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.      */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/* @(#)01       1.14.3.3  src/bos/usr/include/setjmp.h, incstd, bos72X, x2021_25A9 6/4/21 03:15:37 */ 

/*
 * COMPONENT_NAME: (INCSTD)
 *
 * FUNCTIONS:
 *
 * ORIGINS: 27
 *
 * (C) COPYRIGHT International Business Machines Corp. 1985, 1995
 * All Rights Reserved
 * Licensed Materials - Property of IBM
 *
 * US Government Users Restricted Rights - Use, duplication or
 * disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 */

#ifndef _H_SETJMP
#define _H_SETJMP

#ifndef _H_STANDARDS
#include <standards.h>
#endif /* _H_STANDARDS */

#include <comp_macros.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 *
 *      The ANSI and POSIX standards require that certain values be in setjmp.h.
 *      They also require that if _ANSI_C_SOURCE or _POSIX_SOURCE is defined 
 *      then ONLY those standard specific values are present. This header 
 *      includes all the ANSI and POSIX required entries.
 *
 */

#ifdef _ANSI_C_SOURCE
#include <sys/m_setjmp.h>	/* define _JBLEN */

typedef __MTYPE jmp_buf[_JBLEN];

#if defined(_ALL_SOURCE) && (defined(__EXTABI__) || defined(__AIXEXTABI))
/* Extended ABI versions */
#define setjmp		setjmpx
#define longjmp		longjmpx
#define sigsetjmp 	sigsetjmpx
#define siglongjmp 	siglongjmpx
#define _setjmp		_setjmpx
#define _longjmp	_longjmpx
#define ukey_setjmp	ukey_setjmpx
#endif /* _ALL_SOURCE && (__EXTABI__ || __AIXEXTABI) */

#ifdef   _NO_PROTO
extern _NOTHROW(_NORETURN(void, longjmp), ());
extern int _NOTHROW(setjmp, ()) _RETURNS_TWICE;

#else  /*_NO_PROTO */

extern _NOTHROW(_NORETURN(void, longjmp), (jmp_buf, int));
extern int _NOTHROW(setjmp, (jmp_buf)) _RETURNS_TWICE;

#endif /*_NO_PROTO */

#if __STDC__ == 1
#ifndef setjmp
#define	setjmp(__X)	setjmp(__X)
#endif
#endif	/* __STDC__ */

#endif /* _ANSI_C_SOURCE */

#ifdef _POSIX_SOURCE

typedef __MTYPE sigjmp_buf[_JBLEN];
 
#ifdef _NO_PROTO
extern int _NOTHROW(sigsetjmp, ()) _RETURNS_TWICE;
extern _NOTHROW(_NORETURN(void, siglongjmp), ());
#if _XOPEN_SOURCE_EXTENDED==1
extern int _NOTHROW(_setjmp, ()) _RETURNS_TWICE;
extern _NOTHROW(_NORETURN(void, _longjmp), ());
#endif /* _XOPEN_SOURCE_EXTENDED */
#else /* _NO_PROTO */
extern int _NOTHROW(sigsetjmp, (sigjmp_buf, int)) _RETURNS_TWICE;
extern _NOTHROW(_NORETURN(void, siglongjmp), (sigjmp_buf, int));
#if _XOPEN_SOURCE_EXTENDED==1
extern int _NOTHROW(_setjmp, (jmp_buf)) _RETURNS_TWICE;
extern _NOTHROW(_NORETURN(void, _longjmp), (jmp_buf, int));
#endif /* _XOPEN_SOURCE_EXTENDED */
#endif /* _NO_PROTO */

#if __STDC__ == 1
#define	sigsetjmp(__X, __Y)	sigsetjmp(__X, __Y)
#endif	/* __STDC__ */

#endif /* _POSIX_SOURCE */

#ifdef _ALL_SOURCE

typedef __MTYPE ukey_jmp_buf[_UKJBLEN];

extern int ukey_setjmp(ukey_jmp_buf) _RETURNS_TWICE;

#pragma reachable (setjmp, _setjmp, sigsetjmp, ukey_setjmp)
#pragma leaves (longjmp, _longjmp, siglongjmp)

#endif /* _ALL_SOURCE */

#ifdef __cplusplus
}
#endif
#endif /* _H_SETJMP */
