/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos72Q src/bos/kernel/sys/errno.h 1.27.3.3                             */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 1985,2019              */
/* 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                                                     */
/* @(#)49       1.27.3.3  src/bos/kernel/sys/errno.h, incstd, bos72Q, q2019_13A4 2/6/19 00:41:57 */
/*
 * COMPONENT_NAME: (INCSTD) Standard Include Files
 *
 * FUNCTIONS: 
 *
 * ORIGINS: 27,71
 *
 * (C) COPYRIGHT International Business Machines Corp. 1985, 1996
 * 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.
 */
/*
 * (c) Copyright 1990, 1991, 1992 OPEN SOFTWARE FOUNDATION, INC. 
 * ALL RIGHTS RESERVED 
 */

#ifndef _H_ERRNO
#define _H_ERRNO
#include <standards.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 *	Error codes
 *
 *      The ANSI, POSIX, and XOPEN standards require that certain values be
 *	in errno.h.  The standards allow additional macro definitions,
 *      beginning with an E and an uppercase letter.
 *
 */
 
#ifdef _ANSI_C_SOURCE

#ifndef	_KERNEL

#if defined(_THREAD_SAFE) || defined(_THREAD_SAFE_ERRNO)
/*
 * Per thread errno is provided by the threads provider. Both the extern int
 * and the per thread value must be maintained by the threads library.
 */
extern	int	*_Errno( void );
#define errno	(*_Errno())

#else

extern int errno;

#endif	/* _THREAD_SAFE || _THREAD_SAFE_ERRNO */

#endif	/* _KERNEL */

#ifdef _ALL_SOURCE

extern	char	*sys_errlist[];
extern	int	sys_nerr;

#endif /* _ALL_SOURCE */

#define	EPERM	1	/* Operation not permitted		*/
#define	ENOENT	2	/* No such file or directory		*/
#define	ESRCH	3	/* No such process			*/
#define	EINTR	4	/* interrupted system call		*/
#define	EIO	5	/* I/O error				*/
#define	ENXIO	6	/* No such device or address		*/
#define	E2BIG	7	/* Arg list too long			*/
#define	ENOEXEC	8	/* Exec format error			*/
#define	EBADF	9	/* Bad file descriptor			*/
#define	ECHILD	10	/* No child processes			*/
#define	EAGAIN	11	/* Resource temporarily unavailable	*/
#define	ENOMEM	12	/* Not enough space			*/
#define	EACCES	13	/* Permission denied			*/
#define	EFAULT	14	/* Bad address				*/
#define	ENOTBLK	15	/* Block device required		*/
#define	EBUSY	16	/* Resource busy			*/
#define	EEXIST	17	/* File exists				*/
#define	EXDEV	18	/* Improper link			*/
#define	ENODEV	19	/* No such device			*/
#define	ENOTDIR	20	/* Not a directory			*/
#define	EISDIR	21	/* Is a directory			*/
#define	EINVAL	22	/* Invalid argument			*/
#define	ENFILE	23	/* Too many open files in system	*/
#define	EMFILE	24	/* Too many open files			*/
#define	ENOTTY	25	/* Inappropriate I/O control operation	*/
#define	ETXTBSY	26	/* Text file busy			*/
#define	EFBIG	27	/* File too large			*/
#define	ENOSPC	28	/* No space left on device		*/
#define	ESPIPE	29	/* Invalid seek				*/
#define	EROFS	30	/* Read only file system		*/
#define	EMLINK	31	/* Too many links			*/
#define	EPIPE	32	/* Broken pipe				*/
#define	EDOM	33	/* Domain error within math function	*/
#define	ERANGE	34	/* Result too large			*/
#define	ENOMSG	35	/* No message of desired type		*/
#define	EIDRM	36	/* Identifier removed			*/
#define	ECHRNG	37	/* Channel number out of range		*/
#define	EL2NSYNC 38	/* Level 2 not synchronized		*/
#define	EL3HLT	39	/* Level 3 halted			*/
#define	EL3RST	40	/* Level 3 reset			*/
#define	ELNRNG	41	/* Link number out of range		*/
#define	EUNATCH 42	/* Protocol driver not attached		*/
#define	ENOCSI	43	/* No CSI structure available		*/
#define	EL2HLT	44	/* Level 2 halted			*/
#define EDEADLK 45	/* Resource deadlock avoided		*/

#define ENOTREADY	46	/* Device not ready		*/
#define EWRPROTECT	47	/* Write-protected media 	*/
#define EFORMAT		48	/* Unformatted media 		*/

#define ENOLCK		49	/* No locks available 		*/

#define ENOCONNECT      50      /* no connection                */
#define ESTALE          52      /* no filesystem                */
#define	EDIST		53 	/* old, currently unused AIX errno*/ 

/* non-blocking and interrupt i/o */
/*
 * AIX returns EAGAIN where 4.3BSD used EWOULDBLOCK;
 * but, the standards insist on unique errno values for each errno.
 * A unique value is reserved for users that want to code case
 * statements for systems that return either EAGAIN or EWOULDBLOCK.
 */
#if _XOPEN_SOURCE_EXTENDED==1
#define EWOULDBLOCK     EAGAIN   /* Operation would block	*/
#else /* _XOPEN_SOURCE_EXTENDED */
#define EWOULDBLOCK	54
#endif /* _XOPEN_SOURCE_EXTENDED */

#define EINPROGRESS     55      /* Operation now in progress */
#define EALREADY        56      /* Operation already in progress */

/* ipc/network software */

	/* argument errors */
#define ENOTSOCK        57      /* Socket operation on non-socket */
#define EDESTADDRREQ    58      /* Destination address required */
#define EDESTADDREQ     EDESTADDRREQ /* Destination address required */
#define EMSGSIZE        59      /* Message too long */
#define EPROTOTYPE      60      /* Protocol wrong type for socket */
#define ENOPROTOOPT     61      /* Protocol not available */
#define EPROTONOSUPPORT 62      /* Protocol not supported */
#define ESOCKTNOSUPPORT 63      /* Socket type not supported */
#define EOPNOTSUPP      64      /* Operation not supported on socket */
#define EPFNOSUPPORT    65      /* Protocol family not supported */
#define EAFNOSUPPORT    66      /* Address family not supported by protocol family */
#define EADDRINUSE      67      /* Address already in use */
#define EADDRNOTAVAIL   68      /* Can't assign requested address */

	/* operational errors */
#define ENETDOWN        69      /* Network is down */
#define ENETUNREACH     70      /* Network is unreachable */
#define ENETRESET       71      /* Network dropped connection on reset */
#define ECONNABORTED    72      /* Software caused connection abort */
#define ECONNRESET      73      /* Connection reset by peer */
#define ENOBUFS         74      /* No buffer space available */
#define EISCONN         75      /* Socket is already connected */
#define ENOTCONN        76      /* Socket is not connected */
#define ESHUTDOWN       77      /* Can't send after socket shutdown */

#define ETIMEDOUT       78      /* Connection timed out */
#define ECONNREFUSED    79      /* Connection refused */

#define EHOSTDOWN       80      /* Host is down */
#define EHOSTUNREACH    81      /* No route to host */

/* ERESTART is used to determine if the system call is restartable */
#define ERESTART	82	/* restart the system call */

/* quotas and limits */
#define EPROCLIM	83	/* Too many processes */
#define	EUSERS		84	/* Too many users */
#define	ELOOP		85	/* Too many levels of symbolic links      */
#define	ENAMETOOLONG	86	/* File name too long			  */

/*
 * AIX returns EEXIST where 4.3BSD used ENOTEMPTY;
 * but, the standards insist on unique errno values for each errno.
 * A unique value is reserved for users that want to code case
 * statements for systems that return either EEXIST or ENOTEMPTY.
 */
#if defined(_ALL_SOURCE) && !defined(_LINUX_SOURCE_COMPAT)
#define ENOTEMPTY	EEXIST	/* Directory not empty */
#else	/* not _ALL_SOURCE */
#define ENOTEMPTY	87
#endif	/* _ALL_SOURCE */

/* disk quotas */
#define EDQUOT		88	/* Disc quota exceeded */

#define ECORRUPT        89      /* Invalid file system control data */
#define ESYSERROR	90	/* Internal system error */

/* network file system */
#define EREMOTE		93	/* Item is not local to host */

/* UNIX10: new errnos */
#define ENOTRECOVERABLE 94
#define EOWNERDEAD      95

/* errnos 96-108 reserved for future use compatible with AIX PS/2 */

#define ENOSYS		109	/* Function not implemented  POSIX */

/* disk device driver */
#define EMEDIA		110 	/* media surface error */
#define ESOFT           111     /* I/O completed, but needs relocation */

/* security */
#define ENOATTR		112 	/* no attribute found */
#define ESAD		113	/* security authentication denied */
#define ENOTRUST	114	/* not a trusted program */ 

/* BSD 4.3 RENO */
#define ETOOMANYREFS    115     /* Too many references: can't splice */

#define EILSEQ		116     /* Invalid wide character */
#define ECANCELED 	117     /* asynchronous i/o cancelled */

/* SVR4 STREAMS */
#define	ENOSR		118	/* temp out of streams resources */
#define	ETIME		119	/* I_STR ioctl timed out */
#define	EBADMSG		120	/* wrong message type at stream head */
#define	EPROTO		121	/* STREAMS protocol error */
#define	ENODATA		122	/* no message ready at stream head */
#define	ENOSTR		123	/* fd is not a stream */

#define	ECLONEME	ERESTART /* this is the way we clone a stream ... */

#define ENOTSUP		124	/* POSIX threads unsupported value */

#define EMULTIHOP       125     /* multihop is not allowed */
#define ENOLINK         126     /* the link has been severed */
#define EOVERFLOW       127     /* value too large to be stored in data type */

#endif /* _ANSI_C_SOURCE */

#ifdef __cplusplus
}
#endif

#endif /* _H_ERRNO */