1 /* 2 * Original: tclPosixStr.c -- 3 * 4 * This file contains procedures that generate strings 5 * corresponding to various POSIX-related codes, such 6 * as errno and signals. 7 * 8 * Copyright (c) 1991-1994 The Regents of the University of California. 9 * Copyright (c) 1994-1996 Sun Microsystems, Inc. 10 * 11 * See the file "license.terms" for information on usage and redistribution 12 * of this file, and for a DISCLAIMER OF ALL WARRANTIES. 13 * 14 * SCCS: @(#) tclPosixStr.c 1.32 96/10/10 10:09:42 15 */ 16 17 /* %ExternalCopyright% */ 18 #ifdef HAVE_CONFIG_H 19 # include "config.h" 20 #endif 21 22 #ifdef __WIN32__ 23 #ifndef WINDOWS_H_INCLUDES_WINSOCK2_H 24 #include <winsock2.h> 25 #endif 26 #include <windows.h> 27 #endif 28 29 #include "erl_errno.h" 30 #include "sys.h" 31 #include "erl_driver.h" 32 33 /* 34 *---------------------------------------------------------------------- 35 * 36 * erl_errno_id -- 37 * 38 * Return a textual identifier for the given errno value. 39 * 40 * Results: 41 * This procedure returns a machine-readable textual identifier 42 * that corresponds to the current errno value (e.g. "eperm"). 43 * The identifier is the same as the #define name in errno.h, 44 * except that it is in lowercase. 45 * 46 *---------------------------------------------------------------------- 47 */ 48 49 char * erl_errno_id(error)50erl_errno_id(error) 51 int error; /* Posix error number (as from errno). */ 52 { 53 switch (error) { 54 #ifdef E2BIG 55 case E2BIG: return "e2big"; 56 #endif 57 #ifdef EACCES 58 case EACCES: return "eacces"; 59 #endif 60 #ifdef EADDRINUSE 61 case EADDRINUSE: return "eaddrinuse"; 62 #endif 63 #ifdef EADDRNOTAVAIL 64 case EADDRNOTAVAIL: return "eaddrnotavail"; 65 #endif 66 #ifdef EADV 67 case EADV: return "eadv"; 68 #endif 69 #ifdef EAFNOSUPPORT 70 case EAFNOSUPPORT: return "eafnosupport"; 71 #endif 72 #ifdef EAGAIN 73 case EAGAIN: return "eagain"; 74 #endif 75 #ifdef EALIGN 76 case EALIGN: return "ealign"; 77 #endif 78 #if defined(EALREADY) && (!defined(EBUSY) || (EALREADY != EBUSY )) 79 case EALREADY: return "ealready"; 80 #endif 81 #ifdef EBADE 82 case EBADE: return "ebade"; 83 #endif 84 #ifdef EBADF 85 case EBADF: return "ebadf"; 86 #endif 87 #ifdef EBADFD 88 case EBADFD: return "ebadfd"; 89 #endif 90 #ifdef EBADMSG 91 case EBADMSG: return "ebadmsg"; 92 #endif 93 #ifdef EBADR 94 case EBADR: return "ebadr"; 95 #endif 96 #ifdef EBADRPC 97 case EBADRPC: return "ebadrpc"; 98 #endif 99 #ifdef EBADRQC 100 case EBADRQC: return "ebadrqc"; 101 #endif 102 #ifdef EBADSLT 103 case EBADSLT: return "ebadslt"; 104 #endif 105 #ifdef EBFONT 106 case EBFONT: return "ebfont"; 107 #endif 108 #ifdef EBUSY 109 case EBUSY: return "ebusy"; 110 #endif 111 #ifdef ECHILD 112 case ECHILD: return "echild"; 113 #endif 114 #ifdef ECHRNG 115 case ECHRNG: return "echrng"; 116 #endif 117 #ifdef ECOMM 118 case ECOMM: return "ecomm"; 119 #endif 120 #ifdef ECONNABORTED 121 case ECONNABORTED: return "econnaborted"; 122 #endif 123 #ifdef ECONNREFUSED 124 case ECONNREFUSED: return "econnrefused"; 125 #endif 126 #ifdef ECONNRESET 127 case ECONNRESET: return "econnreset"; 128 #endif 129 #if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK)) 130 case EDEADLK: return "edeadlk"; 131 #endif 132 #if defined(EDEADLOCK) && (!defined(EDEADLK) || (EDEADLOCK != EDEADLK)) 133 case EDEADLOCK: return "edeadlock"; 134 #endif 135 #ifdef EDESTADDRREQ 136 case EDESTADDRREQ: return "edestaddrreq"; 137 #endif 138 #ifdef EDIRTY 139 case EDIRTY: return "edirty"; 140 #endif 141 #ifdef EDOM 142 case EDOM: return "edom"; 143 #endif 144 #ifdef EDOTDOT 145 case EDOTDOT: return "edotdot"; 146 #endif 147 #ifdef EDQUOT 148 case EDQUOT: return "edquot"; 149 #endif 150 #ifdef EDUPPKG 151 case EDUPPKG: return "eduppkg"; 152 #endif 153 #ifdef EEXIST 154 case EEXIST: return "eexist"; 155 #endif 156 #ifdef EFAULT 157 case EFAULT: return "efault"; 158 #endif 159 #ifdef EFTYPE 160 case EFTYPE: return "eftype"; 161 #endif 162 #ifdef EFBIG 163 case EFBIG: return "efbig"; 164 #endif 165 #ifdef EHOSTDOWN 166 case EHOSTDOWN: return "ehostdown"; 167 #endif 168 #ifdef EHOSTUNREACH 169 case EHOSTUNREACH: return "ehostunreach"; 170 #endif 171 #if defined(EIDRM) && (!defined(EINPROGRESS) || (EIDRM != EINPROGRESS)) 172 case EIDRM: return "eidrm"; 173 #endif 174 #ifdef EILSEQ 175 case EILSEQ: return "eilseq"; 176 #endif 177 #ifdef EINIT 178 case EINIT: return "einit"; 179 #endif 180 #ifdef EINPROGRESS 181 case EINPROGRESS: return "einprogress"; 182 #endif 183 #ifdef EINTR 184 case EINTR: return "eintr"; 185 #endif 186 #ifdef EINVAL 187 case EINVAL: return "einval"; 188 #endif 189 #ifdef EIO 190 case EIO: return "eio"; 191 #endif 192 #ifdef EISCONN 193 case EISCONN: return "eisconn"; 194 #endif 195 #ifdef EISDIR 196 case EISDIR: return "eisdir"; 197 #endif 198 #ifdef EISNAME 199 case EISNAM: return "eisnam"; 200 #endif 201 #ifdef ELBIN 202 case ELBIN: return "elbin"; 203 #endif 204 #ifdef EL2HLT 205 case EL2HLT: return "el2hlt"; 206 #endif 207 #ifdef EL2NSYNC 208 case EL2NSYNC: return "el2nsync"; 209 #endif 210 #ifdef EL3HLT 211 case EL3HLT: return "el3hlt"; 212 #endif 213 #ifdef EL3RST 214 case EL3RST: return "el3rst"; 215 #endif 216 #ifdef ELIBACC 217 case ELIBACC: return "elibacc"; 218 #endif 219 #ifdef ELIBBAD 220 case ELIBBAD: return "elibbad"; 221 #endif 222 #ifdef ELIBEXEC 223 case ELIBEXEC: return "elibexec"; 224 #endif 225 #ifdef ELIBMAX 226 case ELIBMAX: return "elibmax"; 227 #endif 228 #ifdef ELIBSCN 229 case ELIBSCN: return "elibscn"; 230 #endif 231 #ifdef ELNRNG 232 case ELNRNG: return "elnrng"; 233 #endif 234 #if defined(ELOOP) && (!defined(ENOENT) || (ELOOP != ENOENT)) 235 case ELOOP: return "eloop"; 236 #endif 237 #ifdef EMFILE 238 case EMFILE: return "emfile"; 239 #endif 240 #ifdef EMLINK 241 case EMLINK: return "emlink"; 242 #endif 243 #ifdef EMSGSIZE 244 case EMSGSIZE: return "emsgsize"; 245 #endif 246 #ifdef EMULTIHOP 247 case EMULTIHOP: return "emultihop"; 248 #endif 249 #ifdef ENAMETOOLONG 250 case ENAMETOOLONG: return "enametoolong"; 251 #endif 252 #ifdef ENAVAIL 253 case ENAVAIL: return "enavail"; 254 #endif 255 #ifdef ENET 256 case ENET: return "enet"; 257 #endif 258 #ifdef ENETDOWN 259 case ENETDOWN: return "enetdown"; 260 #endif 261 #ifdef ENETRESET 262 case ENETRESET: return "enetreset"; 263 #endif 264 #ifdef ENETUNREACH 265 case ENETUNREACH: return "enetunreach"; 266 #endif 267 #ifdef ENFILE 268 case ENFILE: return "enfile"; 269 #endif 270 #ifdef ENOANO 271 case ENOANO: return "enoano"; 272 #endif 273 #if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR)) 274 case ENOBUFS: return "enobufs"; 275 #endif 276 #ifdef ENOCSI 277 case ENOCSI: return "enocsi"; 278 #endif 279 #if defined(ENODATA) && (!defined(ECONNREFUSED) || (ENODATA != ECONNREFUSED)) 280 case ENODATA: return "enodata"; 281 #endif 282 #ifdef ENODEV 283 case ENODEV: return "enodev"; 284 #endif 285 #ifdef ENOENT 286 case ENOENT: return "enoent"; 287 #endif 288 #ifdef ENOEXEC 289 case ENOEXEC: return "enoexec"; 290 #endif 291 #ifdef ENOLCK 292 case ENOLCK: return "enolck"; 293 #endif 294 #ifdef ENOLINK 295 case ENOLINK: return "enolink"; 296 #endif 297 #ifdef ENOMEM 298 case ENOMEM: return "enomem"; 299 #endif 300 #ifdef ENOMSG 301 case ENOMSG: return "enomsg"; 302 #endif 303 #ifdef ENONET 304 case ENONET: return "enonet"; 305 #endif 306 #ifdef ENOPKG 307 case ENOPKG: return "enopkg"; 308 #endif 309 #ifdef ENOPROTOOPT 310 case ENOPROTOOPT: return "enoprotoopt"; 311 #endif 312 #ifdef ENOSPC 313 case ENOSPC: return "enospc"; 314 #endif 315 #if defined(ENOSR) && (!defined(ENAMETOOLONG) || (ENAMETOOLONG != ENOSR)) 316 case ENOSR: return "enosr"; 317 #endif 318 #if defined(ENOSTR) && (!defined(ENOTTY) || (ENOTTY != ENOSTR)) 319 case ENOSTR: return "enostr"; 320 #endif 321 #ifdef ENOSYM 322 case ENOSYM: return "enosym"; 323 #endif 324 #ifdef ENOSYS 325 case ENOSYS: return "enosys"; 326 #endif 327 #ifdef ENOTBLK 328 case ENOTBLK: return "enotblk"; 329 #endif 330 #ifdef ENOTCONN 331 case ENOTCONN: return "enotconn"; 332 #endif 333 #ifdef ENOTDIR 334 case ENOTDIR: return "enotdir"; 335 #endif 336 #if defined(ENOTEMPTY) && (!defined(EEXIST) || (ENOTEMPTY != EEXIST)) 337 case ENOTEMPTY: return "enotempty"; 338 #endif 339 #ifdef ENOTNAM 340 case ENOTNAM: return "enotnam"; 341 #endif 342 #ifdef ENOTSOCK 343 case ENOTSOCK: return "enotsock"; 344 #endif 345 #ifdef ENOTSUP 346 case ENOTSUP: return "enotsup"; 347 #endif 348 #ifdef ENOTTY 349 case ENOTTY: return "enotty"; 350 #endif 351 #ifdef ENOTUNIQ 352 case ENOTUNIQ: return "enotuniq"; 353 #endif 354 #ifdef ENXIO 355 case ENXIO: return "enxio"; 356 #endif 357 #if defined(EOPNOTSUPP) && (!defined(ENOTSUP) || (EOPNOTSUPP != ENOTSUP)) 358 case EOPNOTSUPP: return "eopnotsupp"; 359 #endif 360 #ifdef EOVERFLOW 361 case EOVERFLOW: return "eoverflow"; 362 #endif 363 #ifdef EPERM 364 case EPERM: return "eperm"; 365 #endif 366 #if defined(EPFNOSUPPORT) && (!defined(ENOLCK) || (ENOLCK != EPFNOSUPPORT)) 367 case EPFNOSUPPORT: return "epfnosupport"; 368 #endif 369 #ifdef EPIPE 370 case EPIPE: return "epipe"; 371 #endif 372 #ifdef EPROCLIM 373 case EPROCLIM: return "eproclim"; 374 #endif 375 #ifdef EPROCUNAVAIL 376 case EPROCUNAVAIL: return "eprocunavail"; 377 #endif 378 #ifdef EPROGMISMATCH 379 case EPROGMISMATCH: return "eprogmismatch"; 380 #endif 381 #ifdef EPROGUNAVAIL 382 case EPROGUNAVAIL: return "eprogunavail"; 383 #endif 384 #ifdef EPROTO 385 case EPROTO: return "eproto"; 386 #endif 387 #ifdef EPROTONOSUPPORT 388 case EPROTONOSUPPORT: return "eprotonosupport"; 389 #endif 390 #ifdef EPROTOTYPE 391 case EPROTOTYPE: return "eprototype"; 392 #endif 393 #ifdef ERANGE 394 case ERANGE: return "erange"; 395 #endif 396 #if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED)) 397 case EREFUSED: return "erefused"; 398 #endif 399 #ifdef EREMCHG 400 case EREMCHG: return "eremchg"; 401 #endif 402 #ifdef EREMDEV 403 case EREMDEV: return "eremdev"; 404 #endif 405 #ifdef EREMOTE 406 case EREMOTE: return "eremote"; 407 #endif 408 #ifdef EREMOTEIO 409 case EREMOTEIO: return "eremoteio"; 410 #endif 411 #ifdef EREMOTERELEASE 412 case EREMOTERELEASE: return "eremoterelease"; 413 #endif 414 #ifdef EROFS 415 case EROFS: return "erofs"; 416 #endif 417 #ifdef ERPCMISMATCH 418 case ERPCMISMATCH: return "erpcmismatch"; 419 #endif 420 #ifdef ERREMOTE 421 case ERREMOTE: return "erremote"; 422 #endif 423 #ifdef ESHUTDOWN 424 case ESHUTDOWN: return "eshutdown"; 425 #endif 426 #ifdef ESOCKTNOSUPPORT 427 case ESOCKTNOSUPPORT: return "esocktnosupport"; 428 #endif 429 #ifdef ESPIPE 430 case ESPIPE: return "espipe"; 431 #endif 432 #ifdef ESRCH 433 case ESRCH: return "esrch"; 434 #endif 435 #ifdef ESRMNT 436 case ESRMNT: return "esrmnt"; 437 #endif 438 #ifdef ESTALE 439 case ESTALE: return "estale"; 440 #endif 441 #ifdef ESUCCESS 442 case ESUCCESS: return "esuccess"; 443 #endif 444 #if defined(ETIME) && (!defined(ELOOP) || (ETIME != ELOOP)) 445 case ETIME: return "etime"; 446 #endif 447 #if defined(ETIMEDOUT) && (!defined(ENOSTR) || (ETIMEDOUT != ENOSTR)) && (!defined(EAGAIN) || (ETIMEDOUT != EAGAIN)) && (!defined(WSAETIMEDOUT) || (ETIMEDOUT != WSAETIMEDOUT)) 448 case ETIMEDOUT: return "etimedout"; 449 #endif 450 #ifdef ETOOMANYREFS 451 case ETOOMANYREFS: return "etoomanyrefs"; 452 #endif 453 #ifdef ETXTBSY 454 case ETXTBSY: return "etxtbsy"; 455 #endif 456 #ifdef EUCLEAN 457 case EUCLEAN: return "euclean"; 458 #endif 459 #ifdef EUNATCH 460 case EUNATCH: return "eunatch"; 461 #endif 462 #ifdef EUSERS 463 case EUSERS: return "eusers"; 464 #endif 465 #ifdef EVERSION 466 case EVERSION: return "eversion"; 467 #endif 468 #if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN)) && (!defined(WSAEWOULDBLOCK) || (EWOULDBLOCK != WSAEWOULDBLOCK)) 469 case EWOULDBLOCK: return "ewouldblock"; 470 #endif 471 #ifdef EXDEV 472 case EXDEV: return "exdev"; 473 #endif 474 #ifdef EXFULL 475 case EXFULL: return "exfull"; 476 #endif 477 #ifdef WSAEINTR 478 case WSAEINTR: return "eintr"; 479 #endif 480 #ifdef WSAEBADF 481 case WSAEBADF: return "ebadf"; 482 #endif 483 #ifdef WSAEACCES 484 case WSAEACCES: return "eacces"; 485 #endif 486 #ifdef WSAEFAULT 487 case WSAEFAULT: return "efault"; 488 #endif 489 #ifdef WSAEINVAL 490 case WSAEINVAL: return "einval"; 491 #endif 492 #ifdef WSAEMFILE 493 case WSAEMFILE: return "emfile"; 494 #endif 495 #ifdef WSAEWOULDBLOCK 496 case WSAEWOULDBLOCK: return "ewouldblock"; 497 #endif 498 #ifdef WSAEINPROGRESS 499 case WSAEINPROGRESS: return "einprogress"; 500 #endif 501 #ifdef WSAEALREADY 502 case WSAEALREADY: return "ealready"; 503 #endif 504 #ifdef WSAENOTSOCK 505 case WSAENOTSOCK: return "enotsock"; 506 #endif 507 #ifdef WSAEDESTADDRREQ 508 case WSAEDESTADDRREQ: return "edestaddrreq"; 509 #endif 510 #ifdef WSAEMSGSIZE 511 case WSAEMSGSIZE: return "emsgsize"; 512 #endif 513 #ifdef WSAEPROTOTYPE 514 case WSAEPROTOTYPE: return "eprototype"; 515 #endif 516 #ifdef WSAENOPROTOOPT 517 case WSAENOPROTOOPT: return "enoprotoopt"; 518 #endif 519 #ifdef WSAEPROTONOSUPPORT 520 case WSAEPROTONOSUPPORT: return "eprotonosupport"; 521 #endif 522 #ifdef WSAESOCKTNOSUPPORT 523 case WSAESOCKTNOSUPPORT: return "esocktnosupport"; 524 #endif 525 #ifdef WSAEOPNOTSUPP 526 case WSAEOPNOTSUPP: return "eopnotsupp"; 527 #endif 528 #ifdef WSAEPFNOSUPPORT 529 case WSAEPFNOSUPPORT: return "epfnosupport"; 530 #endif 531 #ifdef WSAEAFNOSUPPORT 532 case WSAEAFNOSUPPORT: return "eafnosupport"; 533 #endif 534 #ifdef WSAEADDRINUSE 535 case WSAEADDRINUSE: return "eaddrinuse"; 536 #endif 537 #ifdef WSAEADDRNOTAVAIL 538 case WSAEADDRNOTAVAIL: return "eaddrnotavail"; 539 #endif 540 #ifdef WSAENETDOWN 541 case WSAENETDOWN: return "enetdown"; 542 #endif 543 #ifdef WSAENETUNREACH 544 case WSAENETUNREACH: return "enetunreach"; 545 #endif 546 #ifdef WSAENETRESET 547 case WSAENETRESET: return "enetreset"; 548 #endif 549 #ifdef WSAECONNABORTED 550 case WSAECONNABORTED: return "econnaborted"; 551 #endif 552 #ifdef WSAECONNRESET 553 case WSAECONNRESET: return "econnreset"; 554 #endif 555 #ifdef WSAENOBUFS 556 case WSAENOBUFS: return "enobufs"; 557 #endif 558 #ifdef WSAEISCONN 559 case WSAEISCONN: return "eisconn"; 560 #endif 561 #ifdef WSAENOTCONN 562 case WSAENOTCONN: return "enotconn"; 563 #endif 564 #ifdef WSAESHUTDOWN 565 case WSAESHUTDOWN: return "eshutdown"; 566 #endif 567 #ifdef WSAETOOMANYREFS 568 case WSAETOOMANYREFS: return "etoomanyrefs"; 569 #endif 570 #ifdef WSAETIMEDOUT 571 case WSAETIMEDOUT: return "etimedout"; 572 #endif 573 #ifdef WSAECONNREFUSED 574 case WSAECONNREFUSED: return "econnrefused"; 575 #endif 576 #ifdef WSAELOOP 577 case WSAELOOP: return "eloop"; 578 #endif 579 #ifdef WSAENAMETOOLONG 580 case WSAENAMETOOLONG: return "enametoolong"; 581 #endif 582 #ifdef WSAEHOSTDOWN 583 case WSAEHOSTDOWN: return "ehostdown"; 584 #endif 585 #ifdef WSAEHOSTUNREACH 586 case WSAEHOSTUNREACH: return "ehostunreach"; 587 #endif 588 #ifdef WSAENOTEMPTY 589 case WSAENOTEMPTY: return "enotempty"; 590 #endif 591 #ifdef WSAEPROCLIM 592 case WSAEPROCLIM: return "eproclim"; 593 #endif 594 #ifdef WSAEUSERS 595 case WSAEUSERS: return "eusers"; 596 #endif 597 #ifdef WSAEDQUOT 598 case WSAEDQUOT: return "edquot"; 599 #endif 600 #ifdef WSAESTALE 601 case WSAESTALE: return "estale"; 602 #endif 603 #ifdef WSAEREMOTE 604 case WSAEREMOTE: return "eremote"; 605 #endif 606 #ifdef WSASYSNOTREADY 607 case WSASYSNOTREADY: return "sysnotready"; 608 #endif 609 #ifdef WSAVERNOTSUPPORTED 610 case WSAVERNOTSUPPORTED: return "vernotsupported"; 611 #endif 612 #ifdef WSANOTINITIALISED 613 case WSANOTINITIALISED: return "notinitialised"; 614 #endif 615 #ifdef WSAEDISCON 616 case WSAEDISCON: return "ediscon"; 617 #endif 618 #ifdef WSAENOMORE 619 case WSAENOMORE: return "enomore"; 620 #endif 621 #ifdef WSAECANCELLED 622 case WSAECANCELLED: return "ecancelled"; 623 #endif 624 #ifdef WSAEINVALIDPROCTABLE 625 case WSAEINVALIDPROCTABLE: return "einvalidproctable"; 626 #endif 627 #ifdef WSAEINVALIDPROVIDER 628 case WSAEINVALIDPROVIDER: return "einvalidprovider"; 629 #endif 630 #ifdef WSAEPROVIDERFAILEDINIT 631 /* You could get this if SYSTEMROOT env variable is set incorrectly */ 632 case WSAEPROVIDERFAILEDINIT: return "eproviderfailedinit"; 633 #endif 634 #ifdef WSASYSCALLFAILURE 635 case WSASYSCALLFAILURE: return "syscallfailure"; 636 #endif 637 #ifdef WSASERVICE_NOT_FOUND 638 case WSASERVICE_NOT_FOUND: return "service_not_found"; 639 #endif 640 #ifdef WSATYPE_NOT_FOUND 641 case WSATYPE_NOT_FOUND: return "type_not_found"; 642 #endif 643 #ifdef WSA_E_NO_MORE 644 case WSA_E_NO_MORE: return "e_no_more"; 645 #endif 646 #ifdef WSA_E_CANCELLED 647 case WSA_E_CANCELLED: return "e_cancelled"; 648 #endif 649 } 650 return "unknown"; 651 } 652