tclPosixStr.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:27k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* 
  2.  * 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.  * RCS: @(#) $Id: tclPosixStr.c,v 1.9 2002/05/27 10:14:21 dkf Exp $
  15.  */
  16. #include "tclInt.h"
  17. #include "tclPort.h"
  18. /*
  19.  *----------------------------------------------------------------------
  20.  *
  21.  * Tcl_ErrnoId --
  22.  *
  23.  * Return a textual identifier for the current errno value.
  24.  *
  25.  * Results:
  26.  * This procedure returns a machine-readable textual identifier
  27.  * that corresponds to the current errno value (e.g. "EPERM").
  28.  * The identifier is the same as the #define name in errno.h.
  29.  *
  30.  * Side effects:
  31.  * None.
  32.  *
  33.  *----------------------------------------------------------------------
  34.  */
  35. CONST char *
  36. Tcl_ErrnoId()
  37. {
  38.     switch (errno) {
  39. #ifdef E2BIG
  40. case E2BIG: return "E2BIG";
  41. #endif
  42. #ifdef EACCES
  43. case EACCES: return "EACCES";
  44. #endif
  45. #ifdef EADDRINUSE
  46. case EADDRINUSE: return "EADDRINUSE";
  47. #endif
  48. #ifdef EADDRNOTAVAIL
  49. case EADDRNOTAVAIL: return "EADDRNOTAVAIL";
  50. #endif
  51. #ifdef EADV
  52. case EADV: return "EADV";
  53. #endif
  54. #ifdef EAFNOSUPPORT
  55. case EAFNOSUPPORT: return "EAFNOSUPPORT";
  56. #endif
  57. #ifdef EAGAIN
  58. case EAGAIN: return "EAGAIN";
  59. #endif
  60. #ifdef EALIGN
  61. case EALIGN: return "EALIGN";
  62. #endif
  63. #if defined(EALREADY) && (!defined(EBUSY) || (EALREADY != EBUSY ))
  64. case EALREADY: return "EALREADY";
  65. #endif
  66. #ifdef EBADE
  67. case EBADE: return "EBADE";
  68. #endif
  69. #ifdef EBADF
  70. case EBADF: return "EBADF";
  71. #endif
  72. #ifdef EBADFD
  73. case EBADFD: return "EBADFD";
  74. #endif
  75. #ifdef EBADMSG
  76. case EBADMSG: return "EBADMSG";
  77. #endif
  78. #ifdef EBADR
  79. case EBADR: return "EBADR";
  80. #endif
  81. #ifdef EBADRPC
  82. case EBADRPC: return "EBADRPC";
  83. #endif
  84. #ifdef EBADRQC
  85. case EBADRQC: return "EBADRQC";
  86. #endif
  87. #ifdef EBADSLT
  88. case EBADSLT: return "EBADSLT";
  89. #endif
  90. #ifdef EBFONT
  91. case EBFONT: return "EBFONT";
  92. #endif
  93. #ifdef EBUSY
  94. case EBUSY: return "EBUSY";
  95. #endif
  96. #ifdef ECHILD
  97. case ECHILD: return "ECHILD";
  98. #endif
  99. #ifdef ECHRNG
  100. case ECHRNG: return "ECHRNG";
  101. #endif
  102. #ifdef ECOMM
  103. case ECOMM: return "ECOMM";
  104. #endif
  105. #ifdef ECONNABORTED
  106. case ECONNABORTED: return "ECONNABORTED";
  107. #endif
  108. #ifdef ECONNREFUSED
  109. case ECONNREFUSED: return "ECONNREFUSED";
  110. #endif
  111. #ifdef ECONNRESET
  112. case ECONNRESET: return "ECONNRESET";
  113. #endif
  114. #if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
  115. case EDEADLK: return "EDEADLK";
  116. #endif
  117. #if defined(EDEADLOCK) && (!defined(EDEADLK) || (EDEADLOCK != EDEADLK))
  118. case EDEADLOCK: return "EDEADLOCK";
  119. #endif
  120. #ifdef EDESTADDRREQ
  121. case EDESTADDRREQ: return "EDESTADDRREQ";
  122. #endif
  123. #ifdef EDIRTY
  124. case EDIRTY: return "EDIRTY";
  125. #endif
  126. #ifdef EDOM
  127. case EDOM: return "EDOM";
  128. #endif
  129. #ifdef EDOTDOT
  130. case EDOTDOT: return "EDOTDOT";
  131. #endif
  132. #ifdef EDQUOT
  133. case EDQUOT: return "EDQUOT";
  134. #endif
  135. #ifdef EDUPPKG
  136. case EDUPPKG: return "EDUPPKG";
  137. #endif
  138. #ifdef EEXIST
  139. case EEXIST: return "EEXIST";
  140. #endif
  141. #ifdef EFAULT
  142. case EFAULT: return "EFAULT";
  143. #endif
  144. #ifdef EFBIG
  145. case EFBIG: return "EFBIG";
  146. #endif
  147. #ifdef EHOSTDOWN
  148. case EHOSTDOWN: return "EHOSTDOWN";
  149. #endif
  150. #ifdef EHOSTUNREACH
  151. case EHOSTUNREACH: return "EHOSTUNREACH";
  152. #endif
  153. #if defined(EIDRM) && (!defined(EINPROGRESS) || (EIDRM != EINPROGRESS))
  154. case EIDRM: return "EIDRM";
  155. #endif
  156. #ifdef EINIT
  157. case EINIT: return "EINIT";
  158. #endif
  159. #ifdef EINPROGRESS
  160. case EINPROGRESS: return "EINPROGRESS";
  161. #endif
  162. #ifdef EINTR
  163. case EINTR: return "EINTR";
  164. #endif
  165. #ifdef EINVAL
  166. case EINVAL: return "EINVAL";
  167. #endif
  168. #ifdef EIO
  169. case EIO: return "EIO";
  170. #endif
  171. #ifdef EISCONN
  172. case EISCONN: return "EISCONN";
  173. #endif
  174. #ifdef EISDIR
  175. case EISDIR: return "EISDIR";
  176. #endif
  177. #ifdef EISNAME
  178. case EISNAM: return "EISNAM";
  179. #endif
  180. #ifdef ELBIN
  181. case ELBIN: return "ELBIN";
  182. #endif
  183. #ifdef EL2HLT
  184. case EL2HLT: return "EL2HLT";
  185. #endif
  186. #ifdef EL2NSYNC
  187. case EL2NSYNC: return "EL2NSYNC";
  188. #endif
  189. #ifdef EL3HLT
  190. case EL3HLT: return "EL3HLT";
  191. #endif
  192. #ifdef EL3RST
  193. case EL3RST: return "EL3RST";
  194. #endif
  195. #ifdef ELIBACC
  196. case ELIBACC: return "ELIBACC";
  197. #endif
  198. #ifdef ELIBBAD
  199. case ELIBBAD: return "ELIBBAD";
  200. #endif
  201. #ifdef ELIBEXEC
  202. case ELIBEXEC: return "ELIBEXEC";
  203. #endif
  204. #ifdef ELIBMAX
  205. case ELIBMAX: return "ELIBMAX";
  206. #endif
  207. #ifdef ELIBSCN
  208. case ELIBSCN: return "ELIBSCN";
  209. #endif
  210. #ifdef ELNRNG
  211. case ELNRNG: return "ELNRNG";
  212. #endif
  213. #if defined(ELOOP) && (!defined(ENOENT) || (ELOOP != ENOENT))
  214. case ELOOP: return "ELOOP";
  215. #endif
  216. #ifdef EMFILE
  217. case EMFILE: return "EMFILE";
  218. #endif
  219. #ifdef EMLINK
  220. case EMLINK: return "EMLINK";
  221. #endif
  222. #ifdef EMSGSIZE
  223. case EMSGSIZE: return "EMSGSIZE";
  224. #endif
  225. #ifdef EMULTIHOP
  226. case EMULTIHOP: return "EMULTIHOP";
  227. #endif
  228. #ifdef ENAMETOOLONG
  229. case ENAMETOOLONG: return "ENAMETOOLONG";
  230. #endif
  231. #ifdef ENAVAIL
  232. case ENAVAIL: return "ENAVAIL";
  233. #endif
  234. #ifdef ENET
  235. case ENET: return "ENET";
  236. #endif
  237. #ifdef ENETDOWN
  238. case ENETDOWN: return "ENETDOWN";
  239. #endif
  240. #ifdef ENETRESET
  241. case ENETRESET: return "ENETRESET";
  242. #endif
  243. #ifdef ENETUNREACH
  244. case ENETUNREACH: return "ENETUNREACH";
  245. #endif
  246. #ifdef ENFILE
  247. case ENFILE: return "ENFILE";
  248. #endif
  249. #ifdef ENOANO
  250. case ENOANO: return "ENOANO";
  251. #endif
  252. #if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
  253. case ENOBUFS: return "ENOBUFS";
  254. #endif
  255. #ifdef ENOCSI
  256. case ENOCSI: return "ENOCSI";
  257. #endif
  258. #if defined(ENODATA) && (!defined(ECONNREFUSED) || (ENODATA != ECONNREFUSED))
  259. case ENODATA: return "ENODATA";
  260. #endif
  261. #ifdef ENODEV
  262. case ENODEV: return "ENODEV";
  263. #endif
  264. #ifdef ENOENT
  265. case ENOENT: return "ENOENT";
  266. #endif
  267. #ifdef ENOEXEC
  268. case ENOEXEC: return "ENOEXEC";
  269. #endif
  270. #ifdef ENOLCK
  271. case ENOLCK: return "ENOLCK";
  272. #endif
  273. #ifdef ENOLINK
  274. case ENOLINK: return "ENOLINK";
  275. #endif
  276. #ifdef ENOMEM
  277. case ENOMEM: return "ENOMEM";
  278. #endif
  279. #ifdef ENOMSG
  280. case ENOMSG: return "ENOMSG";
  281. #endif
  282. #ifdef ENONET
  283. case ENONET: return "ENONET";
  284. #endif
  285. #ifdef ENOPKG
  286. case ENOPKG: return "ENOPKG";
  287. #endif
  288. #ifdef ENOPROTOOPT
  289. case ENOPROTOOPT: return "ENOPROTOOPT";
  290. #endif
  291. #ifdef ENOSPC
  292. case ENOSPC: return "ENOSPC";
  293. #endif
  294. #if defined(ENOSR) && (!defined(ENAMETOOLONG) || (ENAMETOOLONG != ENOSR))
  295. case ENOSR: return "ENOSR";
  296. #endif
  297. #if defined(ENOSTR) && (!defined(ENOTTY) || (ENOTTY != ENOSTR))
  298. case ENOSTR: return "ENOSTR";
  299. #endif
  300. #ifdef ENOSYM
  301. case ENOSYM: return "ENOSYM";
  302. #endif
  303. #ifdef ENOSYS
  304. case ENOSYS: return "ENOSYS";
  305. #endif
  306. #ifdef ENOTBLK
  307. case ENOTBLK: return "ENOTBLK";
  308. #endif
  309. #ifdef ENOTCONN
  310. case ENOTCONN: return "ENOTCONN";
  311. #endif
  312. #ifdef ENOTDIR
  313. case ENOTDIR: return "ENOTDIR";
  314. #endif
  315. #if defined(ENOTEMPTY) && (!defined(EEXIST) || (ENOTEMPTY != EEXIST))
  316. case ENOTEMPTY: return "ENOTEMPTY";
  317. #endif
  318. #ifdef ENOTNAM
  319. case ENOTNAM: return "ENOTNAM";
  320. #endif
  321. #ifdef ENOTSOCK
  322. case ENOTSOCK: return "ENOTSOCK";
  323. #endif
  324. #ifdef ENOTSUP
  325. case ENOTSUP: return "ENOTSUP";
  326. #endif
  327. #ifdef ENOTTY
  328. case ENOTTY: return "ENOTTY";
  329. #endif
  330. #ifdef ENOTUNIQ
  331. case ENOTUNIQ: return "ENOTUNIQ";
  332. #endif
  333. #ifdef ENXIO
  334. case ENXIO: return "ENXIO";
  335. #endif
  336. #if defined(EOPNOTSUPP) &&  (!defined(ENOTSUP) || (ENOTSUP != EOPNOTSUPP))
  337. case EOPNOTSUPP: return "EOPNOTSUPP";
  338. #endif
  339. #if defined(EOVERFLOW) && ( !defined(EFBIG) || (EOVERFLOW != EFBIG) ) && ( !defined(EINVAL) || (EOVERFLOW != EINVAL) )
  340.         case EOVERFLOW: return "EOVERFLOW";
  341. #endif
  342. #ifdef EPERM
  343. case EPERM: return "EPERM";
  344. #endif
  345. #if defined(EPFNOSUPPORT) && (!defined(ENOLCK) || (ENOLCK != EPFNOSUPPORT))
  346. case EPFNOSUPPORT: return "EPFNOSUPPORT";
  347. #endif
  348. #ifdef EPIPE
  349. case EPIPE: return "EPIPE";
  350. #endif
  351. #ifdef EPROCLIM
  352. case EPROCLIM: return "EPROCLIM";
  353. #endif
  354. #ifdef EPROCUNAVAIL
  355. case EPROCUNAVAIL: return "EPROCUNAVAIL";
  356. #endif
  357. #ifdef EPROGMISMATCH
  358. case EPROGMISMATCH: return "EPROGMISMATCH";
  359. #endif
  360. #ifdef EPROGUNAVAIL
  361. case EPROGUNAVAIL: return "EPROGUNAVAIL";
  362. #endif
  363. #ifdef EPROTO
  364. case EPROTO: return "EPROTO";
  365. #endif
  366. #ifdef EPROTONOSUPPORT
  367. case EPROTONOSUPPORT: return "EPROTONOSUPPORT";
  368. #endif
  369. #ifdef EPROTOTYPE
  370. case EPROTOTYPE: return "EPROTOTYPE";
  371. #endif
  372. #ifdef ERANGE
  373. case ERANGE: return "ERANGE";
  374. #endif
  375. #if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
  376. case EREFUSED: return "EREFUSED";
  377. #endif
  378. #ifdef EREMCHG
  379. case EREMCHG: return "EREMCHG";
  380. #endif
  381. #ifdef EREMDEV
  382. case EREMDEV: return "EREMDEV";
  383. #endif
  384. #ifdef EREMOTE
  385. case EREMOTE: return "EREMOTE";
  386. #endif
  387. #ifdef EREMOTEIO
  388. case EREMOTEIO: return "EREMOTEIO";
  389. #endif
  390. #ifdef EREMOTERELEASE
  391. case EREMOTERELEASE: return "EREMOTERELEASE";
  392. #endif
  393. #ifdef EROFS
  394. case EROFS: return "EROFS";
  395. #endif
  396. #ifdef ERPCMISMATCH
  397. case ERPCMISMATCH: return "ERPCMISMATCH";
  398. #endif
  399. #ifdef ERREMOTE
  400. case ERREMOTE: return "ERREMOTE";
  401. #endif
  402. #ifdef ESHUTDOWN
  403. case ESHUTDOWN: return "ESHUTDOWN";
  404. #endif
  405. #ifdef ESOCKTNOSUPPORT
  406. case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT";
  407. #endif
  408. #ifdef ESPIPE
  409. case ESPIPE: return "ESPIPE";
  410. #endif
  411. #ifdef ESRCH
  412. case ESRCH: return "ESRCH";
  413. #endif
  414. #ifdef ESRMNT
  415. case ESRMNT: return "ESRMNT";
  416. #endif
  417. #ifdef ESTALE
  418. case ESTALE: return "ESTALE";
  419. #endif
  420. #ifdef ESUCCESS
  421. case ESUCCESS: return "ESUCCESS";
  422. #endif
  423. #if defined(ETIME) && (!defined(ELOOP) || (ETIME != ELOOP))
  424. case ETIME: return "ETIME";
  425. #endif
  426. #if defined(ETIMEDOUT) && (!defined(ENOSTR) || (ETIMEDOUT != ENOSTR))
  427. case ETIMEDOUT: return "ETIMEDOUT";
  428. #endif
  429. #ifdef ETOOMANYREFS
  430. case ETOOMANYREFS: return "ETOOMANYREFS";
  431. #endif
  432. #ifdef ETXTBSY
  433. case ETXTBSY: return "ETXTBSY";
  434. #endif
  435. #ifdef EUCLEAN
  436. case EUCLEAN: return "EUCLEAN";
  437. #endif
  438. #ifdef EUNATCH
  439. case EUNATCH: return "EUNATCH";
  440. #endif
  441. #ifdef EUSERS
  442. case EUSERS: return "EUSERS";
  443. #endif
  444. #ifdef EVERSION
  445. case EVERSION: return "EVERSION";
  446. #endif
  447. #if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
  448. case EWOULDBLOCK: return "EWOULDBLOCK";
  449. #endif
  450. #ifdef EXDEV
  451. case EXDEV: return "EXDEV";
  452. #endif
  453. #ifdef EXFULL
  454. case EXFULL: return "EXFULL";
  455. #endif
  456.     }
  457.     return "unknown error";
  458. }
  459. /*
  460.  *----------------------------------------------------------------------
  461.  *
  462.  * Tcl_ErrnoMsg --
  463.  *
  464.  * Return a human-readable message corresponding to a given
  465.  * errno value.
  466.  *
  467.  * Results:
  468.  * The return value is the standard POSIX error message for
  469.  * errno.  This procedure is used instead of strerror because
  470.  * strerror returns slightly different values on different
  471.  * machines (e.g. different capitalizations), which cause
  472.  * problems for things such as regression tests.  This procedure
  473.  * provides messages for most standard errors, then it calls
  474.  * strerror for things it doesn't understand.
  475.  *
  476.  * Side effects:
  477.  * None.
  478.  *
  479.  *----------------------------------------------------------------------
  480.  */
  481. CONST char *
  482. Tcl_ErrnoMsg(err)
  483.     int err; /* Error number (such as in errno variable). */
  484. {
  485.     switch (err) {
  486. #ifdef E2BIG
  487. case E2BIG: return "argument list too long";
  488. #endif
  489. #ifdef EACCES
  490. case EACCES: return "permission denied";
  491. #endif
  492. #ifdef EADDRINUSE
  493. case EADDRINUSE: return "address already in use";
  494. #endif
  495. #ifdef EADDRNOTAVAIL
  496. case EADDRNOTAVAIL: return "can't assign requested address";
  497. #endif
  498. #ifdef EADV
  499. case EADV: return "advertise error";
  500. #endif
  501. #ifdef EAFNOSUPPORT
  502. case EAFNOSUPPORT: return "address family not supported by protocol family";
  503. #endif
  504. #ifdef EAGAIN
  505. case EAGAIN: return "resource temporarily unavailable";
  506. #endif
  507. #ifdef EALIGN
  508. case EALIGN: return "EALIGN";
  509. #endif
  510. #if defined(EALREADY) && (!defined(EBUSY) || (EALREADY != EBUSY ))
  511. case EALREADY: return "operation already in progress";
  512. #endif
  513. #ifdef EBADE
  514. case EBADE: return "bad exchange descriptor";
  515. #endif
  516. #ifdef EBADF
  517. case EBADF: return "bad file number";
  518. #endif
  519. #ifdef EBADFD
  520. case EBADFD: return "file descriptor in bad state";
  521. #endif
  522. #ifdef EBADMSG
  523. case EBADMSG: return "not a data message";
  524. #endif
  525. #ifdef EBADR
  526. case EBADR: return "bad request descriptor";
  527. #endif
  528. #ifdef EBADRPC
  529. case EBADRPC: return "RPC structure is bad";
  530. #endif
  531. #ifdef EBADRQC
  532. case EBADRQC: return "bad request code";
  533. #endif
  534. #ifdef EBADSLT
  535. case EBADSLT: return "invalid slot";
  536. #endif
  537. #ifdef EBFONT
  538. case EBFONT: return "bad font file format";
  539. #endif
  540. #ifdef EBUSY
  541. case EBUSY: return "file busy";
  542. #endif
  543. #ifdef ECHILD
  544. case ECHILD: return "no children";
  545. #endif
  546. #ifdef ECHRNG
  547. case ECHRNG: return "channel number out of range";
  548. #endif
  549. #ifdef ECOMM
  550. case ECOMM: return "communication error on send";
  551. #endif
  552. #ifdef ECONNABORTED
  553. case ECONNABORTED: return "software caused connection abort";
  554. #endif
  555. #ifdef ECONNREFUSED
  556. case ECONNREFUSED: return "connection refused";
  557. #endif
  558. #ifdef ECONNRESET
  559. case ECONNRESET: return "connection reset by peer";
  560. #endif
  561. #if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
  562. case EDEADLK: return "resource deadlock avoided";
  563. #endif
  564. #if defined(EDEADLOCK) && (!defined(EDEADLK) || (EDEADLOCK != EDEADLK))
  565. case EDEADLOCK: return "resource deadlock avoided";
  566. #endif
  567. #ifdef EDESTADDRREQ
  568. case EDESTADDRREQ: return "destination address required";
  569. #endif
  570. #ifdef EDIRTY
  571. case EDIRTY: return "mounting a dirty fs w/o force";
  572. #endif
  573. #ifdef EDOM
  574. case EDOM: return "math argument out of range";
  575. #endif
  576. #ifdef EDOTDOT
  577. case EDOTDOT: return "cross mount point";
  578. #endif
  579. #ifdef EDQUOT
  580. case EDQUOT: return "disk quota exceeded";
  581. #endif
  582. #ifdef EDUPPKG
  583. case EDUPPKG: return "duplicate package name";
  584. #endif
  585. #ifdef EEXIST
  586. case EEXIST: return "file already exists";
  587. #endif
  588. #ifdef EFAULT
  589. case EFAULT: return "bad address in system call argument";
  590. #endif
  591. #ifdef EFBIG
  592. case EFBIG: return "file too large";
  593. #endif
  594. #ifdef EHOSTDOWN
  595. case EHOSTDOWN: return "host is down";
  596. #endif
  597. #ifdef EHOSTUNREACH
  598. case EHOSTUNREACH: return "host is unreachable";
  599. #endif
  600. #if defined(EIDRM) && (!defined(EINPROGRESS) || (EIDRM != EINPROGRESS))
  601. case EIDRM: return "identifier removed";
  602. #endif
  603. #ifdef EINIT
  604. case EINIT: return "initialization error";
  605. #endif
  606. #ifdef EINPROGRESS
  607. case EINPROGRESS: return "operation now in progress";
  608. #endif
  609. #ifdef EINTR
  610. case EINTR: return "interrupted system call";
  611. #endif
  612. #ifdef EINVAL
  613. case EINVAL: return "invalid argument";
  614. #endif
  615. #ifdef EIO
  616. case EIO: return "I/O error";
  617. #endif
  618. #ifdef EISCONN
  619. case EISCONN: return "socket is already connected";
  620. #endif
  621. #ifdef EISDIR
  622. case EISDIR: return "illegal operation on a directory";
  623. #endif
  624. #ifdef EISNAME
  625. case EISNAM: return "is a name file";
  626. #endif
  627. #ifdef ELBIN
  628. case ELBIN: return "ELBIN";
  629. #endif
  630. #ifdef EL2HLT
  631. case EL2HLT: return "level 2 halted";
  632. #endif
  633. #ifdef EL2NSYNC
  634. case EL2NSYNC: return "level 2 not synchronized";
  635. #endif
  636. #ifdef EL3HLT
  637. case EL3HLT: return "level 3 halted";
  638. #endif
  639. #ifdef EL3RST
  640. case EL3RST: return "level 3 reset";
  641. #endif
  642. #ifdef ELIBACC
  643. case ELIBACC: return "can not access a needed shared library";
  644. #endif
  645. #ifdef ELIBBAD
  646. case ELIBBAD: return "accessing a corrupted shared library";
  647. #endif
  648. #ifdef ELIBEXEC
  649. case ELIBEXEC: return "can not exec a shared library directly";
  650. #endif
  651. #ifdef ELIBMAX
  652. case ELIBMAX: return
  653. "attempting to link in more shared libraries than system limit";
  654. #endif
  655. #ifdef ELIBSCN
  656. case ELIBSCN: return ".lib section in a.out corrupted";
  657. #endif
  658. #ifdef ELNRNG
  659. case ELNRNG: return "link number out of range";
  660. #endif
  661. #if defined(ELOOP) && (!defined(ENOENT) || (ELOOP != ENOENT))
  662. case ELOOP: return "too many levels of symbolic links";
  663. #endif
  664. #ifdef EMFILE
  665. case EMFILE: return "too many open files";
  666. #endif
  667. #ifdef EMLINK
  668. case EMLINK: return "too many links";
  669. #endif
  670. #ifdef EMSGSIZE
  671. case EMSGSIZE: return "message too long";
  672. #endif
  673. #ifdef EMULTIHOP
  674. case EMULTIHOP: return "multihop attempted";
  675. #endif
  676. #ifdef ENAMETOOLONG
  677. case ENAMETOOLONG: return "file name too long";
  678. #endif
  679. #ifdef ENAVAIL
  680. case ENAVAIL: return "not available";
  681. #endif
  682. #ifdef ENET
  683. case ENET: return "ENET";
  684. #endif
  685. #ifdef ENETDOWN
  686. case ENETDOWN: return "network is down";
  687. #endif
  688. #ifdef ENETRESET
  689. case ENETRESET: return "network dropped connection on reset";
  690. #endif
  691. #ifdef ENETUNREACH
  692. case ENETUNREACH: return "network is unreachable";
  693. #endif
  694. #ifdef ENFILE
  695. case ENFILE: return "file table overflow";
  696. #endif
  697. #ifdef ENOANO
  698. case ENOANO: return "anode table overflow";
  699. #endif
  700. #if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
  701. case ENOBUFS: return "no buffer space available";
  702. #endif
  703. #ifdef ENOCSI
  704. case ENOCSI: return "no CSI structure available";
  705. #endif
  706. #if defined(ENODATA) && (!defined(ECONNREFUSED) || (ENODATA != ECONNREFUSED))
  707. case ENODATA: return "no data available";
  708. #endif
  709. #ifdef ENODEV
  710. case ENODEV: return "no such device";
  711. #endif
  712. #ifdef ENOENT
  713. case ENOENT: return "no such file or directory";
  714. #endif
  715. #ifdef ENOEXEC
  716. case ENOEXEC: return "exec format error";
  717. #endif
  718. #ifdef ENOLCK
  719. case ENOLCK: return "no locks available";
  720. #endif
  721. #ifdef ENOLINK
  722. case ENOLINK: return "link has be severed";
  723. #endif
  724. #ifdef ENOMEM
  725. case ENOMEM: return "not enough memory";
  726. #endif
  727. #ifdef ENOMSG
  728. case ENOMSG: return "no message of desired type";
  729. #endif
  730. #ifdef ENONET
  731. case ENONET: return "machine is not on the network";
  732. #endif
  733. #ifdef ENOPKG
  734. case ENOPKG: return "package not installed";
  735. #endif
  736. #ifdef ENOPROTOOPT
  737. case ENOPROTOOPT: return "bad protocol option";
  738. #endif
  739. #ifdef ENOSPC
  740. case ENOSPC: return "no space left on device";
  741. #endif
  742. #if defined(ENOSR) && (!defined(ENAMETOOLONG) || (ENAMETOOLONG != ENOSR))
  743. case ENOSR: return "out of stream resources";
  744. #endif
  745. #if defined(ENOSTR) && (!defined(ENOTTY) || (ENOTTY != ENOSTR))
  746. case ENOSTR: return "not a stream device";
  747. #endif
  748. #ifdef ENOSYM
  749. case ENOSYM: return "unresolved symbol name";
  750. #endif
  751. #ifdef ENOSYS
  752. case ENOSYS: return "function not implemented";
  753. #endif
  754. #ifdef ENOTBLK
  755. case ENOTBLK: return "block device required";
  756. #endif
  757. #ifdef ENOTCONN
  758. case ENOTCONN: return "socket is not connected";
  759. #endif
  760. #ifdef ENOTDIR
  761. case ENOTDIR: return "not a directory";
  762. #endif
  763. #if defined(ENOTEMPTY) && (!defined(EEXIST) || (ENOTEMPTY != EEXIST))
  764. case ENOTEMPTY: return "directory not empty";
  765. #endif
  766. #ifdef ENOTNAM
  767. case ENOTNAM: return "not a name file";
  768. #endif
  769. #ifdef ENOTSOCK
  770. case ENOTSOCK: return "socket operation on non-socket";
  771. #endif
  772. #ifdef ENOTSUP
  773. case ENOTSUP: return "operation not supported";
  774. #endif
  775. #ifdef ENOTTY
  776. case ENOTTY: return "inappropriate device for ioctl";
  777. #endif
  778. #ifdef ENOTUNIQ
  779. case ENOTUNIQ: return "name not unique on network";
  780. #endif
  781. #ifdef ENXIO
  782. case ENXIO: return "no such device or address";
  783. #endif
  784. #if defined(EOPNOTSUPP) &&  (!defined(ENOTSUP) || (ENOTSUP != EOPNOTSUPP))
  785. case EOPNOTSUPP: return "operation not supported on socket";
  786. #endif
  787. #if defined(EOVERFLOW) && ( !defined(EFBIG) || (EOVERFLOW != EFBIG) ) && ( !defined(EINVAL) || (EOVERFLOW != EINVAL) )
  788.         case EOVERFLOW: return "file too big";
  789. #endif
  790. #ifdef EPERM
  791. case EPERM: return "not owner";
  792. #endif
  793. #if defined(EPFNOSUPPORT) && (!defined(ENOLCK) || (ENOLCK != EPFNOSUPPORT))
  794. case EPFNOSUPPORT: return "protocol family not supported";
  795. #endif
  796. #ifdef EPIPE
  797. case EPIPE: return "broken pipe";
  798. #endif
  799. #ifdef EPROCLIM
  800. case EPROCLIM: return "too many processes";
  801. #endif
  802. #ifdef EPROCUNAVAIL
  803. case EPROCUNAVAIL: return "bad procedure for program";
  804. #endif
  805. #ifdef EPROGMISMATCH
  806. case EPROGMISMATCH: return "program version wrong";
  807. #endif
  808. #ifdef EPROGUNAVAIL
  809. case EPROGUNAVAIL: return "RPC program not available";
  810. #endif
  811. #ifdef EPROTO
  812. case EPROTO: return "protocol error";
  813. #endif
  814. #ifdef EPROTONOSUPPORT
  815. case EPROTONOSUPPORT: return "protocol not suppored";
  816. #endif
  817. #ifdef EPROTOTYPE
  818. case EPROTOTYPE: return "protocol wrong type for socket";
  819. #endif
  820. #ifdef ERANGE
  821. case ERANGE: return "math result unrepresentable";
  822. #endif
  823. #if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
  824. case EREFUSED: return "EREFUSED";
  825. #endif
  826. #ifdef EREMCHG
  827. case EREMCHG: return "remote address changed";
  828. #endif
  829. #ifdef EREMDEV
  830. case EREMDEV: return "remote device";
  831. #endif
  832. #ifdef EREMOTE
  833. case EREMOTE: return "pathname hit remote file system";
  834. #endif
  835. #ifdef EREMOTEIO
  836. case EREMOTEIO: return "remote i/o error";
  837. #endif
  838. #ifdef EREMOTERELEASE
  839. case EREMOTERELEASE: return "EREMOTERELEASE";
  840. #endif
  841. #ifdef EROFS
  842. case EROFS: return "read-only file system";
  843. #endif
  844. #ifdef ERPCMISMATCH
  845. case ERPCMISMATCH: return "RPC version is wrong";
  846. #endif
  847. #ifdef ERREMOTE
  848. case ERREMOTE: return "object is remote";
  849. #endif
  850. #ifdef ESHUTDOWN
  851. case ESHUTDOWN: return "can't send afer socket shutdown";
  852. #endif
  853. #ifdef ESOCKTNOSUPPORT
  854. case ESOCKTNOSUPPORT: return "socket type not supported";
  855. #endif
  856. #ifdef ESPIPE
  857. case ESPIPE: return "invalid seek";
  858. #endif
  859. #ifdef ESRCH
  860. case ESRCH: return "no such process";
  861. #endif
  862. #ifdef ESRMNT
  863. case ESRMNT: return "srmount error";
  864. #endif
  865. #ifdef ESTALE
  866. case ESTALE: return "stale remote file handle";
  867. #endif
  868. #ifdef ESUCCESS
  869. case ESUCCESS: return "Error 0";
  870. #endif
  871. #if defined(ETIME) && (!defined(ELOOP) || (ETIME != ELOOP))
  872. case ETIME: return "timer expired";
  873. #endif
  874. #if defined(ETIMEDOUT) && (!defined(ENOSTR) || (ETIMEDOUT != ENOSTR))
  875. case ETIMEDOUT: return "connection timed out";
  876. #endif
  877. #ifdef ETOOMANYREFS
  878. case ETOOMANYREFS: return "too many references: can't splice";
  879. #endif
  880. #ifdef ETXTBSY
  881. case ETXTBSY: return "text file or pseudo-device busy";
  882. #endif
  883. #ifdef EUCLEAN
  884. case EUCLEAN: return "structure needs cleaning";
  885. #endif
  886. #ifdef EUNATCH
  887. case EUNATCH: return "protocol driver not attached";
  888. #endif
  889. #ifdef EUSERS
  890. case EUSERS: return "too many users";
  891. #endif
  892. #ifdef EVERSION
  893. case EVERSION: return "version mismatch";
  894. #endif
  895. #if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
  896. case EWOULDBLOCK: return "operation would block";
  897. #endif
  898. #ifdef EXDEV
  899. case EXDEV: return "cross-domain link";
  900. #endif
  901. #ifdef EXFULL
  902. case EXFULL: return "message tables full";
  903. #endif
  904. default:
  905. #ifdef NO_STRERROR
  906.     return "unknown POSIX error";
  907. #else
  908.     return strerror(errno);
  909. #endif
  910.     }
  911. }
  912. /*
  913.  *----------------------------------------------------------------------
  914.  *
  915.  * Tcl_SignalId --
  916.  *
  917.  * Return a textual identifier for a signal number.
  918.  *
  919.  * Results:
  920.  * This procedure returns a machine-readable textual identifier
  921.  * that corresponds to sig.  The identifier is the same as the
  922.  * #define name in signal.h.
  923.  *
  924.  * Side effects:
  925.  * None.
  926.  *
  927.  *----------------------------------------------------------------------
  928.  */
  929. CONST char *
  930. Tcl_SignalId(sig)
  931.     int sig; /* Number of signal. */
  932. {
  933.     switch (sig) {
  934. #ifdef SIGABRT
  935. case SIGABRT: return "SIGABRT";
  936. #endif
  937. #ifdef SIGALRM
  938. case SIGALRM: return "SIGALRM";
  939. #endif
  940. #ifdef SIGBUS
  941. case SIGBUS: return "SIGBUS";
  942. #endif
  943. #ifdef SIGCHLD
  944. case SIGCHLD: return "SIGCHLD";
  945. #endif
  946. #if defined(SIGCLD) && (!defined(SIGCHLD) || (SIGCLD != SIGCHLD))
  947. case SIGCLD: return "SIGCLD";
  948. #endif
  949. #ifdef SIGCONT
  950. case SIGCONT: return "SIGCONT";
  951. #endif
  952. #if defined(SIGEMT) && (!defined(SIGXCPU) || (SIGEMT != SIGXCPU))
  953. case SIGEMT: return "SIGEMT";
  954. #endif
  955. #ifdef SIGFPE
  956. case SIGFPE: return "SIGFPE";
  957. #endif
  958. #ifdef SIGHUP
  959. case SIGHUP: return "SIGHUP";
  960. #endif
  961. #ifdef SIGILL
  962. case SIGILL: return "SIGILL";
  963. #endif
  964. #ifdef SIGINT
  965. case SIGINT: return "SIGINT";
  966. #endif
  967. #ifdef SIGIO
  968. case SIGIO: return "SIGIO";
  969. #endif
  970. #if defined(SIGIOT) && (!defined(SIGABRT) || (SIGIOT != SIGABRT))
  971. case SIGIOT: return "SIGIOT";
  972. #endif
  973. #ifdef SIGKILL
  974. case SIGKILL: return "SIGKILL";
  975. #endif
  976. #if defined(SIGLOST) && (!defined(SIGIOT) || (SIGLOST != SIGIOT)) && (!defined(SIGURG) || (SIGLOST != SIGURG)) && (!defined(SIGPROF) || (SIGLOST != SIGPROF)) && (!defined(SIGIO) || (SIGLOST != SIGIO))
  977. case SIGLOST: return "SIGLOST";
  978. #endif
  979. #ifdef SIGPIPE
  980. case SIGPIPE: return "SIGPIPE";
  981. #endif
  982. #if defined(SIGPOLL) && (!defined(SIGIO) || (SIGPOLL != SIGIO))
  983. case SIGPOLL: return "SIGPOLL";
  984. #endif
  985. #ifdef SIGPROF
  986. case SIGPROF: return "SIGPROF";
  987. #endif
  988. #if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ)) && (!defined(SIGLOST) || (SIGPWR != SIGLOST))
  989. case SIGPWR: return "SIGPWR";
  990. #endif
  991. #ifdef SIGQUIT
  992. case SIGQUIT: return "SIGQUIT";
  993. #endif
  994. #ifdef SIGSEGV
  995. case SIGSEGV: return "SIGSEGV";
  996. #endif
  997. #ifdef SIGSTOP
  998. case SIGSTOP: return "SIGSTOP";
  999. #endif
  1000. #ifdef SIGSYS
  1001. case SIGSYS: return "SIGSYS";
  1002. #endif
  1003. #ifdef SIGTERM
  1004. case SIGTERM: return "SIGTERM";
  1005. #endif
  1006. #ifdef SIGTRAP
  1007. case SIGTRAP: return "SIGTRAP";
  1008. #endif
  1009. #ifdef SIGTSTP
  1010. case SIGTSTP: return "SIGTSTP";
  1011. #endif
  1012. #ifdef SIGTTIN
  1013. case SIGTTIN: return "SIGTTIN";
  1014. #endif
  1015. #ifdef SIGTTOU
  1016. case SIGTTOU: return "SIGTTOU";
  1017. #endif
  1018. #if defined(SIGURG) && (!defined(SIGIO) || (SIGURG != SIGIO))
  1019. case SIGURG: return "SIGURG";
  1020. #endif
  1021. #if defined(SIGUSR1) && (!defined(SIGIO) || (SIGUSR1 != SIGIO))
  1022. case SIGUSR1: return "SIGUSR1";
  1023. #endif
  1024. #if defined(SIGUSR2) && (!defined(SIGURG) || (SIGUSR2 != SIGURG))
  1025. case SIGUSR2: return "SIGUSR2";
  1026. #endif
  1027. #ifdef SIGVTALRM
  1028. case SIGVTALRM: return "SIGVTALRM";
  1029. #endif
  1030. #ifdef SIGWINCH
  1031. case SIGWINCH: return "SIGWINCH";
  1032. #endif
  1033. #ifdef SIGXCPU
  1034. case SIGXCPU: return "SIGXCPU";
  1035. #endif
  1036. #ifdef SIGXFSZ
  1037. case SIGXFSZ: return "SIGXFSZ";
  1038. #endif
  1039.     }
  1040.     return "unknown signal";
  1041. }
  1042. /*
  1043.  *----------------------------------------------------------------------
  1044.  *
  1045.  * Tcl_SignalMsg --
  1046.  *
  1047.  * Return a human-readable message describing a signal.
  1048.  *
  1049.  * Results:
  1050.  * This procedure returns a string describing sig that should
  1051.  * make sense to a human.  It may not be easy for a machine
  1052.  * to parse.
  1053.  *
  1054.  * Side effects:
  1055.  * None.
  1056.  *
  1057.  *----------------------------------------------------------------------
  1058.  */
  1059. CONST char *
  1060. Tcl_SignalMsg(sig)
  1061.     int sig; /* Number of signal. */
  1062. {
  1063.     switch (sig) {
  1064. #ifdef SIGABRT
  1065. case SIGABRT: return "SIGABRT";
  1066. #endif
  1067. #ifdef SIGALRM
  1068. case SIGALRM: return "alarm clock";
  1069. #endif
  1070. #ifdef SIGBUS
  1071. case SIGBUS: return "bus error";
  1072. #endif
  1073. #ifdef SIGCHLD
  1074. case SIGCHLD: return "child status changed";
  1075. #endif
  1076. #if defined(SIGCLD) && (!defined(SIGCHLD) || (SIGCLD != SIGCHLD))
  1077. case SIGCLD: return "child status changed";
  1078. #endif
  1079. #ifdef SIGCONT
  1080. case SIGCONT: return "continue after stop";
  1081. #endif
  1082. #if defined(SIGEMT) && (!defined(SIGXCPU) || (SIGEMT != SIGXCPU))
  1083. case SIGEMT: return "EMT instruction";
  1084. #endif
  1085. #ifdef SIGFPE
  1086. case SIGFPE: return "floating-point exception";
  1087. #endif
  1088. #ifdef SIGHUP
  1089. case SIGHUP: return "hangup";
  1090. #endif
  1091. #ifdef SIGILL
  1092. case SIGILL: return "illegal instruction";
  1093. #endif
  1094. #ifdef SIGINT
  1095. case SIGINT: return "interrupt";
  1096. #endif
  1097. #ifdef SIGIO
  1098. case SIGIO: return "input/output possible on file";
  1099. #endif
  1100. #if defined(SIGIOT) && (!defined(SIGABRT) || (SIGABRT != SIGIOT))
  1101. case SIGIOT: return "IOT instruction";
  1102. #endif
  1103. #ifdef SIGKILL
  1104. case SIGKILL: return "kill signal";
  1105. #endif
  1106. #if defined(SIGLOST) && (!defined(SIGIOT) || (SIGLOST != SIGIOT)) && (!defined(SIGURG) || (SIGLOST != SIGURG)) && (!defined(SIGPROF) || (SIGLOST != SIGPROF)) && (!defined(SIGIO) || (SIGLOST != SIGIO))
  1107. case SIGLOST: return "resource lost";
  1108. #endif
  1109. #ifdef SIGPIPE
  1110. case SIGPIPE: return "write on pipe with no readers";
  1111. #endif
  1112. #if defined(SIGPOLL) && (!defined(SIGIO) || (SIGPOLL != SIGIO))
  1113. case SIGPOLL: return "input/output possible on file";
  1114. #endif
  1115. #ifdef SIGPROF
  1116. case SIGPROF: return "profiling alarm";
  1117. #endif
  1118. #if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ)) && (!defined(SIGLOST) || (SIGPWR != SIGLOST))
  1119. case SIGPWR: return "power-fail restart";
  1120. #endif
  1121. #ifdef SIGQUIT
  1122. case SIGQUIT: return "quit signal";
  1123. #endif
  1124. #ifdef SIGSEGV
  1125. case SIGSEGV: return "segmentation violation";
  1126. #endif
  1127. #ifdef SIGSTOP
  1128. case SIGSTOP: return "stop";
  1129. #endif
  1130. #ifdef SIGSYS
  1131. case SIGSYS: return "bad argument to system call";
  1132. #endif
  1133. #ifdef SIGTERM
  1134. case SIGTERM: return "software termination signal";
  1135. #endif
  1136. #ifdef SIGTRAP
  1137. case SIGTRAP: return "trace trap";
  1138. #endif
  1139. #ifdef SIGTSTP
  1140. case SIGTSTP: return "stop signal from tty";
  1141. #endif
  1142. #ifdef SIGTTIN
  1143. case SIGTTIN: return "background tty read";
  1144. #endif
  1145. #ifdef SIGTTOU
  1146. case SIGTTOU: return "background tty write";
  1147. #endif
  1148. #if defined(SIGURG) && (!defined(SIGIO) || (SIGURG != SIGIO))
  1149. case SIGURG: return "urgent I/O condition";
  1150. #endif
  1151. #if defined(SIGUSR1) && (!defined(SIGIO) || (SIGUSR1 != SIGIO))
  1152. case SIGUSR1: return "user-defined signal 1";
  1153. #endif
  1154. #if defined(SIGUSR2) && (!defined(SIGURG) || (SIGUSR2 != SIGURG))
  1155. case SIGUSR2: return "user-defined signal 2";
  1156. #endif
  1157. #ifdef SIGVTALRM
  1158. case SIGVTALRM: return "virtual time alarm";
  1159. #endif
  1160. #ifdef SIGWINCH
  1161. case SIGWINCH: return "window changed";
  1162. #endif
  1163. #ifdef SIGXCPU
  1164. case SIGXCPU: return "exceeded CPU time limit";
  1165. #endif
  1166. #ifdef SIGXFSZ
  1167. case SIGXFSZ: return "exceeded file size limit";
  1168. #endif
  1169.     }
  1170.     return "unknown signal";
  1171. }