1 #ifndef ERRNO_H 2 #define ERRNO_H 3 4 FILE_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 83 extern 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 508 extern int errno; 509 510 #endif /* ERRNO_H */ 511