1#ifndef ERRNO_H 2#define ERRNO_H 3 4FILE_LICENCE ( GPL2_OR_LATER ); 5 6/** @file 7 * 8 * Error codes 9 * 10 * Return status codes as used within gPXE are designed to allow for 11 * maximum visibility into the source of an error even in an end-user 12 * build with no debugging. They are constructed as follows: 13 * 14 * Bits 7-0 : PXE error code 15 * 16 * This is the closest equivalent PXE error code 17 * (e.g. PXENV_STATUS_OUT_OF_RESOURCES), and is the only part of the 18 * error that will be returned via the PXE API, since PXE has 19 * predefined error codes. 20 * 21 * Bits 12-8 : Per-file disambiguator 22 * 23 * When the same error number can be generated from multiple points 24 * within a file, this field can be used to identify the unique 25 * instance. 26 * 27 * Bits 23-13 : File identifier 28 * 29 * This is a unique identifier for the file generating the error 30 * (e.g. ERRFILE_tcp for tcp.c). 31 * 32 * Bits 30-24 : POSIX error code 33 * 34 * This is the closest equivalent POSIX error code (e.g. ENOMEM). 35 * 36 * Bit 31 : Reserved 37 * 38 * Errors are usually return as negative error numbers (e.g. -EINVAL); 39 * bit 31 is therefore unusable. 40 * 41 * 42 * The convention within the code is that errors are negative and 43 * expressed using the POSIX error code and (optionally) a per-file 44 * disambiguator, e.g. 45 * 46 * return -EINVAL; 47 * 48 * or 49 * 50 * #define ETCP_BAD_CHECKSUM EUNIQ_02 51 * return -( EINVAL | ETCP_BAD_CHECKSUM ) 52 * 53 * By various bits of preprocessor magic, the PXE error code and file 54 * identifier are already incorporated into the definition of the 55 * POSIX error code, which keeps the code relatively clean. 56 * 57 * 58 * Functions that wish to return failures should be declared as 59 * returning an integer @c rc "Return status code". A return value of 60 * zero indicates success, a non-zero value indicates failure. The 61 * return value can be passed directly to strerror() in order to 62 * generate a human-readable error message, e.g. 63 * 64 * if ( ( rc = some_function ( ... ) ) != 0 ) { 65 * DBG ( "Whatever I was trying to do failed: %s\n", strerror ( rc ) ); 66 * return rc; 67 * } 68 * 69 * As illustrated in the above example, error returns should generally 70 * be directly propagated upward to the calling function. 71 * 72 */ 73 74/* Get definitions for file identifiers */ 75#include <gpxe/errfile.h> 76 77/* If we do not have a valid file identifier, generate a compiler 78 * warning upon usage of any error codes. (Don't just use a #warning, 79 * because some files include errno.h but don't ever actually use any 80 * error codes.) 81 */ 82#if ! ERRFILE 83extern char missing_errfile_declaration[] __attribute__ (( deprecated )); 84#undef ERRFILE 85#define ERRFILE ( 0 * ( ( int ) missing_errfile_declaration ) ) 86#endif 87 88/** Derive PXENV_STATUS code from gPXE error number */ 89#define PXENV_STATUS( rc ) ( (-(rc)) & 0x00ff ) 90 91/** 92 * @defgroup pxeerrors PXE error codes 93 * 94 * The names, meanings and values of these error codes are defined by 95 * the PXE specification. 96 * 97 * @{ 98 */ 99 100/* Generic errors */ 101#define PXENV_STATUS_SUCCESS 0x0000 102#define PXENV_STATUS_FAILURE 0x0001 103#define PXENV_STATUS_BAD_FUNC 0x0002 104#define PXENV_STATUS_UNSUPPORTED 0x0003 105#define PXENV_STATUS_KEEP_UNDI 0x0004 106#define PXENV_STATUS_KEEP_ALL 0x0005 107#define PXENV_STATUS_OUT_OF_RESOURCES 0x0006 108 109/* ARP errors (0x0010 to 0x001f) */ 110#define PXENV_STATUS_ARP_TIMEOUT 0x0011 111 112/* Base-Code state errors */ 113#define PXENV_STATUS_UDP_CLOSED 0x0018 114#define PXENV_STATUS_UDP_OPEN 0x0019 115#define PXENV_STATUS_TFTP_CLOSED 0x001a 116#define PXENV_STATUS_TFTP_OPEN 0x001b 117 118/* BIOS/system errors (0x0020 to 0x002f) */ 119#define PXENV_STATUS_MCOPY_PROBLEM 0x0020 120#define PXENV_STATUS_BIS_INTEGRITY_FAILURE 0x0021 121#define PXENV_STATUS_BIS_VALIDATE_FAILURE 0x0022 122#define PXENV_STATUS_BIS_INIT_FAILURE 0x0023 123#define PXENV_STATUS_BIS_SHUTDOWN_FAILURE 0x0024 124#define PXENV_STATUS_BIS_GBOA_FAILURE 0x0025 125#define PXENV_STATUS_BIS_FREE_FAILURE 0x0026 126#define PXENV_STATUS_BIS_GSI_FAILURE 0x0027 127#define PXENV_STATUS_BIS_BAD_CKSUM 0x0028 128 129/* TFTP/MTFTP errors (0x0030 to 0x003f) */ 130#define PXENV_STATUS_TFTP_CANNOT_ARP_ADDRESS 0x0030 131#define PXENV_STATUS_TFTP_OPEN_TIMEOUT 0x0032 132#define PXENV_STATUS_TFTP_UNKNOWN_OPCODE 0x0033 133#define PXENV_STATUS_TFTP_READ_TIMEOUT 0x0035 134#define PXENV_STATUS_TFTP_ERROR_OPCODE 0x0036 135#define PXENV_STATUS_TFTP_CANNOT_OPEN_CONNECTION 0x0038 136#define PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION 0x0039 137#define PXENV_STATUS_TFTP_TOO_MANY_PACKAGES 0x003a 138#define PXENV_STATUS_TFTP_FILE_NOT_FOUND 0x003b 139#define PXENV_STATUS_TFTP_ACCESS_VIOLATION 0x003c 140#define PXENV_STATUS_TFTP_NO_MCAST_ADDRESS 0x003d 141#define PXENV_STATUS_TFTP_NO_FILESIZE 0x003e 142#define PXENV_STATUS_TFTP_INVALID_PACKET_SIZE 0x003f 143 144/* Reserved errors 0x0040 to 0x004f) */ 145 146/* DHCP/BOOTP errors (0x0050 to 0x005f) */ 147#define PXENV_STATUS_DHCP_TIMEOUT 0x0051 148#define PXENV_STATUS_DHCP_NO_IP_ADDRESS 0x0052 149#define PXENV_STATUS_DHCP_NO_BOOTFILE_NAME 0x0053 150#define PXENV_STATUS_DHCP_BAD_IP_ADDRESS 0x0054 151 152/* Driver errors (0x0060 to 0x006f) */ 153#define PXENV_STATUS_UNDI_INVALID_FUNCTION 0x0060 154#define PXENV_STATUS_UNDI_MEDIATEST_FAILED 0x0061 155#define PXENV_STATUS_UNDI_CANNOT_INIT_NIC_FOR_MCAST 0x0062 156#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_NIC 0x0063 157#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_PHY 0x0064 158#define PXENV_STATUS_UNDI_CANNOT_READ_CONFIG_DATA 0x0065 159#define PXENV_STATUS_UNDI_CANNOT_READ_INIT_DATA 0x0066 160#define PXENV_STATUS_UNDI_BAD_MAC_ADDRESS 0x0067 161#define PXENV_STATUS_UNDI_BAD_EEPROM_CHECKSUM 0x0068 162#define PXENV_STATUS_UNDI_ERROR_SETTING_ISR 0x0069 163#define PXENV_STATUS_UNDI_INVALID_STATE 0x006a 164#define PXENV_STATUS_UNDI_TRANSMIT_ERROR 0x006b 165#define PXENV_STATUS_UNDI_INVALID_PARAMETER 0x006c 166 167/* ROM and NBP bootstrap errors (0x0070 to 0x007f) */ 168#define PXENV_STATUS_BSTRAP_PROMPT_MENU 0x0074 169#define PXENV_STATUS_BSTRAP_MCAST_ADDR 0x0076 170#define PXENV_STATUS_BSTRAP_MISSING_LIST 0x0077 171#define PXENV_STATUS_BSTRAP_NO_RESPONSE 0x0078 172#define PXENV_STATUS_BSTRAP_FILE_TOO_BIG 0x0079 173 174/* Environment NBP errors (0x0080 to 0x008f) */ 175 176/* Reserved errors (0x0090 to 0x009f) */ 177 178/* Miscellaneous errors (0x00a0 to 0x00af) */ 179#define PXENV_STATUS_BINL_CANCELED_BY_KEYSTROKE 0x00a0 180#define PXENV_STATUS_BINL_NO_PXE_SERVER 0x00a1 181#define PXENV_STATUS_NOT_AVAILABLE_IN_PMODE 0x00a2 182#define PXENV_STATUS_NOT_AVAILABLE_IN_RMODE 0x00a3 183 184/* BUSD errors (0x00b0 to 0x00bf) */ 185#define PXENV_STATUS_BUSD_DEVICE_NOT_SUPPORTED 0x00b0 186 187/* Loader errors (0x00c0 to 0x00cf) */ 188#define PXENV_STATUS_LOADER_NO_FREE_BASE_MEMORY 0x00c0 189#define PXENV_STATUS_LOADER_NO_BC_ROMID 0x00c1 190#define PXENV_STATUS_LOADER_BAD_BC_ROMID 0x00c2 191#define PXENV_STATUS_LOADER_BAD_BC_RUNTIME_IMAGE 0x00c3 192#define PXENV_STATUS_LOADER_NO_UNDI_ROMID 0x00c4 193#define PXENV_STATUS_LOADER_BAD_UNDI_ROMID 0x00c5 194#define PXENV_STATUS_LOADER_BAD_UNDI_DRIVER_IMAGE 0x00c6 195#define PXENV_STATUS_LOADER_NO_PXE_STRUCT 0x00c8 196#define PXENV_STATUS_LOADER_NO_PXENV_STRUCT 0x00c9 197#define PXENV_STATUS_LOADER_UNDI_START 0x00ca 198#define PXENV_STATUS_LOADER_BC_START 0x00cb 199 200/** @} */ 201 202/** 203 * @defgroup posixerrors POSIX error codes 204 * 205 * The names and meanings (but not the values) of these error codes 206 * are defined by POSIX. We choose to assign unique values which 207 * incorporate the closest equivalent PXE error code, so that code may 208 * simply use ENOMEM, rather than having to use the cumbersome 209 * (ENOMEM|PXENV_STATUS_OUT_OF_RESOURCES). 210 * 211 * @{ 212 */ 213 214/** Operation completed successfully */ 215#define ENOERR ( ERRFILE | PXENV_STATUS_SUCCESS | 0x00000000 ) 216 217/** Arg list too long */ 218#define E2BIG ( ERRFILE | PXENV_STATUS_BAD_FUNC | 0x01000000 ) 219 220/** Permission denied */ 221#define EACCES ( ERRFILE | PXENV_STATUS_TFTP_ACCESS_VIOLATION | 0x02000000 ) 222 223/** Address in use */ 224#define EADDRINUSE ( ERRFILE | PXENV_STATUS_UDP_OPEN | 0x03000000 ) 225 226/** Address not available */ 227#define EADDRNOTAVAIL ( ERRFILE | PXENV_STATUS_UDP_OPEN | 0x04000000 ) 228 229/** Address family not supported */ 230#define EAFNOSUPPORT ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x05000000 ) 231 232/** Resource temporarily unavailable */ 233#define EAGAIN ( ERRFILE | PXENV_STATUS_FAILURE | 0x06000000 ) 234 235/** Connection already in progress */ 236#define EALREADY ( ERRFILE | PXENV_STATUS_UDP_OPEN | 0x07000000 ) 237 238/** Bad file descriptor */ 239#define EBADF ( ERRFILE | PXENV_STATUS_TFTP_CLOSED | 0x08000000 ) 240 241/** Bad message */ 242#define EBADMSG ( ERRFILE | PXENV_STATUS_FAILURE | 0x09000000 ) 243 244/** Resource busy */ 245#define EBUSY ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x0a000000 ) 246 247/** Operation canceled */ 248#define ECANCELED \ 249 ( ERRFILE | PXENV_STATUS_BINL_CANCELED_BY_KEYSTROKE | 0x0b000000 ) 250 251/** No child processes */ 252#define ECHILD ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x0c000000 ) 253 254/** Connection aborted */ 255#define ECONNABORTED \ 256 ( ERRFILE | PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION | 0x0d000000 ) 257 258/** Connection refused */ 259#define ECONNREFUSED \ 260 ( ERRFILE | PXENV_STATUS_TFTP_CANNOT_OPEN_CONNECTION | 0x0e000000 ) 261 262/** Connection reset */ 263#define ECONNRESET \ 264 ( ERRFILE | PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION | 0x0f000000 ) 265 266/** Resource deadlock avoided */ 267#define EDEADLK ( ERRFILE | PXENV_STATUS_FAILURE | 0x10000000 ) 268 269/** Destination address required */ 270#define EDESTADDRREQ ( ERRFILE | PXENV_STATUS_BAD_FUNC | 0x11000000 ) 271 272/** Domain error */ 273#define EDOM ( ERRFILE | PXENV_STATUS_FAILURE | 0x12000000 ) 274 275/** Reserved */ 276#define EDQUOT ( ERRFILE | PXENV_STATUS_FAILURE | 0x13000000 ) 277 278/** File exists */ 279#define EEXIST ( ERRFILE | PXENV_STATUS_FAILURE | 0x14000000 ) 280 281/** Bad address */ 282#define EFAULT ( ERRFILE | PXENV_STATUS_MCOPY_PROBLEM | 0x15000000 ) 283 284/** File too large */ 285#define EFBIG ( ERRFILE | PXENV_STATUS_MCOPY_PROBLEM | 0x16000000 ) 286 287/** Host is unreachable */ 288#define EHOSTUNREACH ( ERRFILE | PXENV_STATUS_ARP_TIMEOUT | 0x17000000 ) 289 290/** Identifier removed */ 291#define EIDRM ( ERRFILE | PXENV_STATUS_FAILURE | 0x18000000 ) 292 293/** Illegal byte sequence */ 294#define EILSEQ ( ERRFILE | PXENV_STATUS_FAILURE | 0x19000000 ) 295 296/** Operation in progress */ 297#define EINPROGRESS ( ERRFILE | PXENV_STATUS_FAILURE | 0x1a000000 ) 298 299/** Interrupted function call */ 300#define EINTR ( ERRFILE | PXENV_STATUS_FAILURE | 0x1b000000 ) 301 302/** Invalid argument */ 303#define EINVAL ( ERRFILE | PXENV_STATUS_BAD_FUNC | 0x1c000000 ) 304 305/** Input/output error */ 306#define EIO \ 307 ( ERRFILE | PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION | 0x1d000000 ) 308 309/** Socket is connected */ 310#define EISCONN ( ERRFILE | PXENV_STATUS_UDP_OPEN | 0x1e000000 ) 311 312/** Is a directory */ 313#define EISDIR ( ERRFILE | PXENV_STATUS_FAILURE | 0x1f000000 ) 314 315/** Too many levels of symbolic links */ 316#define ELOOP ( ERRFILE | PXENV_STATUS_FAILURE | 0x20000000 ) 317 318/** Too many open files */ 319#define EMFILE ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x21000000 ) 320 321/** Too many links */ 322#define EMLINK ( ERRFILE | PXENV_STATUS_FAILURE | 0x22000000 ) 323 324/** Inappropriate message buffer length */ 325#define EMSGSIZE ( ERRFILE | PXENV_STATUS_BAD_FUNC | 0x23000000 ) 326 327/** Reserved */ 328#define EMULTIHOP ( ERRFILE | PXENV_STATUS_FAILURE | 0x24000000 ) 329 330/** Filename too long */ 331#define ENAMETOOLONG ( ERRFILE | PXENV_STATUS_FAILURE | 0x25000000 ) 332 333/** Network is down */ 334#define ENETDOWN ( ERRFILE | PXENV_STATUS_ARP_TIMEOUT | 0x26000000 ) 335 336/** Connection aborted by network */ 337#define ENETRESET ( ERRFILE | PXENV_STATUS_FAILURE | 0x27000000 ) 338 339/** Network unreachable */ 340#define ENETUNREACH ( ERRFILE | PXENV_STATUS_ARP_TIMEOUT | 0x28000000 ) 341 342/** Too many open files in system */ 343#define ENFILE ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x29000000 ) 344 345/** No buffer space available */ 346#define ENOBUFS ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x2a000000 ) 347 348/** No message is available on the STREAM head read queue */ 349#define ENODATA ( ERRFILE | PXENV_STATUS_FAILURE | 0x2b000000 ) 350 351/** No such device */ 352#define ENODEV ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x2c000000 ) 353 354/** No such file or directory */ 355#define ENOENT ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x2d000000 ) 356 357/** Exec format error */ 358#define ENOEXEC ( ERRFILE | PXENV_STATUS_FAILURE | 0x2e000000 ) 359 360/** No locks available */ 361#define ENOLCK ( ERRFILE | PXENV_STATUS_FAILURE | 0x2f000000 ) 362 363/** Reserved */ 364#define ENOLINK ( ERRFILE | PXENV_STATUS_FAILURE | 0x30000000 ) 365 366/** Not enough space */ 367#define ENOMEM ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x31000000 ) 368 369/** No message of the desired type */ 370#define ENOMSG ( ERRFILE | PXENV_STATUS_FAILURE | 0x32000000 ) 371 372/** Protocol not available */ 373#define ENOPROTOOPT ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x33000000 ) 374 375/** No space left on device */ 376#define ENOSPC ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x34000000 ) 377 378/** No STREAM resources */ 379#define ENOSR ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x35000000 ) 380 381/** Not a STREAM */ 382#define ENOSTR ( ERRFILE | PXENV_STATUS_FAILURE | 0x36000000 ) 383 384/** Function not implemented */ 385#define ENOSYS ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x37000000 ) 386 387/** The socket is not connected */ 388#define ENOTCONN ( ERRFILE | PXENV_STATUS_FAILURE | 0x38000000 ) 389 390/** Not a directory */ 391#define ENOTDIR ( ERRFILE | PXENV_STATUS_FAILURE | 0x39000000 ) 392 393/** Directory not empty */ 394#define ENOTEMPTY ( ERRFILE | PXENV_STATUS_FAILURE | 0x3a000000 ) 395 396/** Not a socket */ 397#define ENOTSOCK ( ERRFILE | PXENV_STATUS_FAILURE | 0x3b000000 ) 398 399/** Not supported */ 400#define ENOTSUP ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x3c000000 ) 401 402/** Inappropriate I/O control operation */ 403#define ENOTTY ( ERRFILE | PXENV_STATUS_FAILURE | 0x3d000000 ) 404 405/** No such device or address */ 406#define ENXIO ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x3e000000 ) 407 408/** Operation not supported on socket */ 409#define EOPNOTSUPP ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x3f000000 ) 410 411/** Value too large to be stored in data type */ 412#define EOVERFLOW ( ERRFILE | PXENV_STATUS_FAILURE | 0x40000000 ) 413 414/** Operation not permitted */ 415#define EPERM ( ERRFILE | PXENV_STATUS_TFTP_ACCESS_VIOLATION | 0x41000000 ) 416 417/** Broken pipe */ 418#define EPIPE ( ERRFILE | PXENV_STATUS_FAILURE | 0x42000000 ) 419 420/** Protocol error */ 421#define EPROTO ( ERRFILE | PXENV_STATUS_FAILURE | 0x43000000 ) 422 423/** Protocol not supported */ 424#define EPROTONOSUPPORT ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x44000000 ) 425 426/** Protocol wrong type for socket */ 427#define EPROTOTYPE ( ERRFILE | PXENV_STATUS_FAILURE | 0x45000000 ) 428 429/** Result too large */ 430#define ERANGE ( ERRFILE | PXENV_STATUS_FAILURE | 0x46000000 ) 431 432/** Read-only file system */ 433#define EROFS ( ERRFILE | PXENV_STATUS_FAILURE | 0x47000000 ) 434 435/** Invalid seek */ 436#define ESPIPE ( ERRFILE | PXENV_STATUS_FAILURE | 0x48000000 ) 437 438/** No such process */ 439#define ESRCH ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x49000000 ) 440 441/** Stale file handle */ 442#define ESTALE ( ERRFILE | PXENV_STATUS_FAILURE | 0x4a000000 ) 443 444/** STREAM ioctl() timeout */ 445#define ETIME ( ERRFILE | PXENV_STATUS_FAILURE | 0x4b000000 ) 446 447/** Operation timed out */ 448#define ETIMEDOUT ( ERRFILE | PXENV_STATUS_TFTP_READ_TIMEOUT | 0x4c000000 ) 449 450/** Text file busy */ 451#define ETXTBSY ( ERRFILE | PXENV_STATUS_FAILURE | 0x4d000000 ) 452 453/** Operation would block (different from EAGAIN!) */ 454#define EWOULDBLOCK ( ERRFILE | PXENV_STATUS_TFTP_OPEN | 0x4e000000 ) 455 456/** Improper link */ 457#define EXDEV ( ERRFILE | PXENV_STATUS_FAILURE | 0x4f000000 ) 458 459/** @} */ 460 461/** 462 * @defgroup euniq Per-file error disambiguators 463 * 464 * Files which use the same error number multiple times should 465 * probably define their own error subspace using these 466 * disambiguators. For example: 467 * 468 * #define ETCP_HEADER_TOO_SHORT EUNIQ_01 469 * #define ETCP_BAD_CHECKSUM EUNIQ_02 470 * 471 * @{ 472 */ 473 474#define EUNIQ_01 0x00000100 475#define EUNIQ_02 0x00000200 476#define EUNIQ_03 0x00000300 477#define EUNIQ_04 0x00000400 478#define EUNIQ_05 0x00000500 479#define EUNIQ_06 0x00000600 480#define EUNIQ_07 0x00000700 481#define EUNIQ_08 0x00000800 482#define EUNIQ_09 0x00000900 483#define EUNIQ_0A 0x00000a00 484#define EUNIQ_0B 0x00000b00 485#define EUNIQ_0C 0x00000c00 486#define EUNIQ_0D 0x00000d00 487#define EUNIQ_0E 0x00000e00 488#define EUNIQ_0F 0x00000f00 489#define EUNIQ_10 0x00001000 490#define EUNIQ_11 0x00001100 491#define EUNIQ_12 0x00001200 492#define EUNIQ_13 0x00001300 493#define EUNIQ_14 0x00001400 494#define EUNIQ_15 0x00001500 495#define EUNIQ_16 0x00001600 496#define EUNIQ_17 0x00001700 497#define EUNIQ_18 0x00001800 498#define EUNIQ_19 0x00001900 499#define EUNIQ_1A 0x00001a00 500#define EUNIQ_1B 0x00001b00 501#define EUNIQ_1C 0x00001c00 502#define EUNIQ_1D 0x00001d00 503#define EUNIQ_1E 0x00001e00 504#define EUNIQ_1F 0x00001f00 505 506/** @} */ 507 508extern int errno; 509 510#endif /* ERRNO_H */ 511