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

通讯编程

开发平台:

Visual C++

  1. /* 
  2.  * tclWinError.c --
  3.  *
  4.  * This file contains code for converting from Win32 errors to
  5.  * errno errors.
  6.  *
  7.  * Copyright (c) 1995-1996 by Sun Microsystems, Inc.
  8.  *
  9.  * See the file "license.terms" for information on usage and redistribution
  10.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  11.  *
  12.  * RCS: @(#) $Id: tclWinError.c,v 1.5 2002/05/27 10:14:21 dkf Exp $
  13.  */
  14. #include "tclWinInt.h"
  15. /*
  16.  * The following table contains the mapping from Win32 errors to
  17.  * errno errors.
  18.  */
  19. static char errorTable[] = {
  20.     0,
  21.     EINVAL, /* ERROR_INVALID_FUNCTION 1 */
  22.     ENOENT, /* ERROR_FILE_NOT_FOUND 2 */
  23.     ENOENT, /* ERROR_PATH_NOT_FOUND 3 */
  24.     EMFILE, /* ERROR_TOO_MANY_OPEN_FILES 4 */
  25.     EACCES, /* ERROR_ACCESS_DENIED 5 */
  26.     EBADF, /* ERROR_INVALID_HANDLE 6 */
  27.     ENOMEM, /* ERROR_ARENA_TRASHED 7 */
  28.     ENOMEM, /* ERROR_NOT_ENOUGH_MEMORY 8 */
  29.     ENOMEM, /* ERROR_INVALID_BLOCK 9 */
  30.     E2BIG, /* ERROR_BAD_ENVIRONMENT 10 */
  31.     ENOEXEC, /* ERROR_BAD_FORMAT 11 */
  32.     EACCES, /* ERROR_INVALID_ACCESS 12 */
  33.     EINVAL, /* ERROR_INVALID_DATA 13 */
  34.     EFAULT, /* ERROR_OUT_OF_MEMORY 14 */
  35.     ENOENT, /* ERROR_INVALID_DRIVE 15 */
  36.     EACCES, /* ERROR_CURRENT_DIRECTORY 16 */
  37.     EXDEV, /* ERROR_NOT_SAME_DEVICE 17 */
  38.     ENOENT, /* ERROR_NO_MORE_FILES 18 */
  39.     EROFS, /* ERROR_WRITE_PROTECT 19 */
  40.     ENXIO, /* ERROR_BAD_UNIT 20 */
  41.     EBUSY, /* ERROR_NOT_READY 21 */
  42.     EIO, /* ERROR_BAD_COMMAND 22 */
  43.     EIO, /* ERROR_CRC 23 */
  44.     EIO, /* ERROR_BAD_LENGTH 24 */
  45.     EIO, /* ERROR_SEEK 25 */
  46.     EIO, /* ERROR_NOT_DOS_DISK 26 */
  47.     ENXIO, /* ERROR_SECTOR_NOT_FOUND 27 */
  48.     EBUSY, /* ERROR_OUT_OF_PAPER 28 */
  49.     EIO, /* ERROR_WRITE_FAULT 29 */
  50.     EIO, /* ERROR_READ_FAULT 30 */
  51.     EIO, /* ERROR_GEN_FAILURE 31 */
  52.     EACCES, /* ERROR_SHARING_VIOLATION 32 */
  53.     EACCES, /* ERROR_LOCK_VIOLATION 33 */
  54.     ENXIO, /* ERROR_WRONG_DISK 34 */
  55.     ENFILE, /* ERROR_FCB_UNAVAILABLE 35 */
  56.     ENFILE, /* ERROR_SHARING_BUFFER_EXCEEDED 36 */
  57.     EINVAL, /* 37 */
  58.     EINVAL, /* 38 */
  59.     ENOSPC, /* ERROR_HANDLE_DISK_FULL 39 */
  60.     EINVAL, /* 40 */
  61.     EINVAL, /* 41 */
  62.     EINVAL, /* 42 */
  63.     EINVAL, /* 43 */
  64.     EINVAL, /* 44 */
  65.     EINVAL, /* 45 */
  66.     EINVAL, /* 46 */
  67.     EINVAL, /* 47 */
  68.     EINVAL, /* 48 */
  69.     EINVAL, /* 49 */
  70.     ENODEV, /* ERROR_NOT_SUPPORTED 50 */
  71.     EBUSY, /* ERROR_REM_NOT_LIST 51 */
  72.     EEXIST, /* ERROR_DUP_NAME 52 */
  73.     ENOENT, /* ERROR_BAD_NETPATH 53 */
  74.     EBUSY, /* ERROR_NETWORK_BUSY 54 */
  75.     ENODEV, /* ERROR_DEV_NOT_EXIST 55 */
  76.     EAGAIN, /* ERROR_TOO_MANY_CMDS 56 */
  77.     EIO, /* ERROR_ADAP_HDW_ERR 57 */
  78.     EIO, /* ERROR_BAD_NET_RESP 58 */
  79.     EIO, /* ERROR_UNEXP_NET_ERR 59 */
  80.     EINVAL, /* ERROR_BAD_REM_ADAP 60 */
  81.     EFBIG, /* ERROR_PRINTQ_FULL 61 */
  82.     ENOSPC, /* ERROR_NO_SPOOL_SPACE 62 */
  83.     ENOENT, /* ERROR_PRINT_CANCELLED 63 */
  84.     ENOENT, /* ERROR_NETNAME_DELETED 64 */
  85.     EACCES, /* ERROR_NETWORK_ACCESS_DENIED 65 */
  86.     ENODEV, /* ERROR_BAD_DEV_TYPE 66 */
  87.     ENOENT, /* ERROR_BAD_NET_NAME 67 */
  88.     ENFILE, /* ERROR_TOO_MANY_NAMES 68 */
  89.     EIO, /* ERROR_TOO_MANY_SESS 69 */
  90.     EAGAIN, /* ERROR_SHARING_PAUSED 70 */
  91.     EINVAL, /* ERROR_REQ_NOT_ACCEP 71 */
  92.     EAGAIN, /* ERROR_REDIR_PAUSED 72 */
  93.     EINVAL, /* 73 */
  94.     EINVAL, /* 74 */
  95.     EINVAL, /* 75 */
  96.     EINVAL, /* 76 */
  97.     EINVAL, /* 77 */
  98.     EINVAL, /* 78 */
  99.     EINVAL, /* 79 */
  100.     EEXIST, /* ERROR_FILE_EXISTS 80 */
  101.     EINVAL, /* 81 */
  102.     ENOSPC, /* ERROR_CANNOT_MAKE 82 */
  103.     EIO, /* ERROR_FAIL_I24 83 */
  104.     ENFILE, /* ERROR_OUT_OF_STRUCTURES 84 */
  105.     EEXIST, /* ERROR_ALREADY_ASSIGNED 85 */
  106.     EPERM, /* ERROR_INVALID_PASSWORD 86 */
  107.     EINVAL, /* ERROR_INVALID_PARAMETER 87 */
  108.     EIO, /* ERROR_NET_WRITE_FAULT 88 */
  109.     EAGAIN, /* ERROR_NO_PROC_SLOTS 89 */
  110.     EINVAL, /* 90 */
  111.     EINVAL, /* 91 */
  112.     EINVAL, /* 92 */
  113.     EINVAL, /* 93 */
  114.     EINVAL, /* 94 */
  115.     EINVAL, /* 95 */
  116.     EINVAL, /* 96 */
  117.     EINVAL, /* 97 */
  118.     EINVAL, /* 98 */
  119.     EINVAL, /* 99 */
  120.     EINVAL, /* 100 */
  121.     EINVAL, /* 101 */
  122.     EINVAL, /* 102 */
  123.     EINVAL, /* 103 */
  124.     EINVAL, /* 104 */
  125.     EINVAL, /* 105 */
  126.     EINVAL, /* 106 */
  127.     EXDEV, /* ERROR_DISK_CHANGE 107 */
  128.     EAGAIN, /* ERROR_DRIVE_LOCKED 108 */
  129.     EPIPE, /* ERROR_BROKEN_PIPE 109 */
  130.     ENOENT, /* ERROR_OPEN_FAILED 110 */
  131.     EINVAL, /* ERROR_BUFFER_OVERFLOW 111 */
  132.     ENOSPC, /* ERROR_DISK_FULL 112 */
  133.     EMFILE, /* ERROR_NO_MORE_SEARCH_HANDLES 113 */
  134.     EBADF, /* ERROR_INVALID_TARGET_HANDLE 114 */
  135.     EFAULT, /* ERROR_PROTECTION_VIOLATION 115 */
  136.     EINVAL, /* 116 */
  137.     EINVAL, /* 117 */
  138.     EINVAL, /* 118 */
  139.     EINVAL, /* 119 */
  140.     EINVAL, /* 120 */
  141.     EINVAL, /* 121 */
  142.     EINVAL, /* 122 */
  143.     ENOENT, /* ERROR_INVALID_NAME 123 */
  144.     EINVAL, /* 124 */
  145.     EINVAL, /* 125 */
  146.     EINVAL, /* 126 */
  147.     EINVAL, /* ERROR_PROC_NOT_FOUND 127 */
  148.     ECHILD, /* ERROR_WAIT_NO_CHILDREN 128 */
  149.     ECHILD, /* ERROR_CHILD_NOT_COMPLETE 129 */
  150.     EBADF, /* ERROR_DIRECT_ACCESS_HANDLE 130 */
  151.     EINVAL, /* ERROR_NEGATIVE_SEEK 131 */
  152.     ESPIPE, /* ERROR_SEEK_ON_DEVICE 132 */
  153.     EINVAL, /* 133 */
  154.     EINVAL, /* 134 */
  155.     EINVAL, /* 135 */
  156.     EINVAL, /* 136 */
  157.     EINVAL, /* 137 */
  158.     EINVAL, /* 138 */
  159.     EINVAL, /* 139 */
  160.     EINVAL, /* 140 */
  161.     EINVAL, /* 141 */
  162.     EAGAIN, /* ERROR_BUSY_DRIVE 142 */
  163.     EINVAL, /* 143 */
  164.     EINVAL, /* 144 */
  165.     EEXIST, /* ERROR_DIR_NOT_EMPTY 145 */
  166.     EINVAL, /* 146 */
  167.     EINVAL, /* 147 */
  168.     EINVAL, /* 148 */
  169.     EINVAL, /* 149 */
  170.     EINVAL, /* 150 */
  171.     EINVAL, /* 151 */
  172.     EINVAL, /* 152 */
  173.     EINVAL, /* 153 */
  174.     EINVAL, /* 154 */
  175.     EINVAL, /* 155 */
  176.     EINVAL, /* 156 */
  177.     EINVAL, /* 157 */
  178.     EACCES, /* ERROR_NOT_LOCKED 158 */
  179.     EINVAL, /* 159 */
  180.     EINVAL, /* 160 */
  181.     ENOENT, /* ERROR_BAD_PATHNAME         161 */
  182.     EINVAL, /* 162 */
  183.     EINVAL, /* 163 */
  184.     EINVAL, /* 164 */
  185.     EINVAL, /* 165 */
  186.     EINVAL, /* 166 */
  187.     EACCES, /* ERROR_LOCK_FAILED 167 */
  188.     EINVAL, /* 168 */
  189.     EINVAL, /* 169 */
  190.     EINVAL, /* 170 */
  191.     EINVAL, /* 171 */
  192.     EINVAL, /* 172 */
  193.     EINVAL, /* 173 */
  194.     EINVAL, /* 174 */
  195.     EINVAL, /* 175 */
  196.     EINVAL, /* 176 */
  197.     EINVAL, /* 177 */
  198.     EINVAL, /* 178 */
  199.     EINVAL, /* 179 */
  200.     EINVAL, /* 180 */
  201.     EINVAL, /* 181 */
  202.     EINVAL, /* 182 */
  203.     EEXIST, /* ERROR_ALREADY_EXISTS 183 */
  204.     ECHILD, /* ERROR_NO_CHILD_PROCESS 184 */
  205.     EINVAL, /* 185 */
  206.     EINVAL, /* 186 */
  207.     EINVAL, /* 187 */
  208.     EINVAL, /* 188 */
  209.     EINVAL, /* 189 */
  210.     EINVAL, /* 190 */
  211.     EINVAL, /* 191 */
  212.     EINVAL, /* 192 */
  213.     EINVAL, /* 193 */
  214.     EINVAL, /* 194 */
  215.     EINVAL, /* 195 */
  216.     EINVAL, /* 196 */
  217.     EINVAL, /* 197 */
  218.     EINVAL, /* 198 */
  219.     EINVAL, /* 199 */
  220.     EINVAL, /* 200 */
  221.     EINVAL, /* 201 */
  222.     EINVAL, /* 202 */
  223.     EINVAL, /* 203 */
  224.     EINVAL, /* 204 */
  225.     EINVAL, /* 205 */
  226.     ENAMETOOLONG,/* ERROR_FILENAME_EXCED_RANGE 206 */
  227.     EINVAL, /* 207 */
  228.     EINVAL, /* 208 */
  229.     EINVAL, /* 209 */
  230.     EINVAL, /* 210 */
  231.     EINVAL, /* 211 */
  232.     EINVAL, /* 212 */
  233.     EINVAL, /* 213 */
  234.     EINVAL, /* 214 */
  235.     EINVAL, /* 215 */
  236.     EINVAL, /* 216 */
  237.     EINVAL, /* 217 */
  238.     EINVAL, /* 218 */
  239.     EINVAL, /* 219 */
  240.     EINVAL, /* 220 */
  241.     EINVAL, /* 221 */
  242.     EINVAL, /* 222 */
  243.     EINVAL, /* 223 */
  244.     EINVAL, /* 224 */
  245.     EINVAL, /* 225 */
  246.     EINVAL, /* 226 */
  247.     EINVAL, /* 227 */
  248.     EINVAL, /* 228 */
  249.     EINVAL, /* 229 */
  250.     EPIPE, /* ERROR_BAD_PIPE 230 */
  251.     EAGAIN, /* ERROR_PIPE_BUSY 231 */
  252.     EPIPE, /* ERROR_NO_DATA 232 */
  253.     EPIPE, /* ERROR_PIPE_NOT_CONNECTED 233 */
  254.     EINVAL, /* 234 */
  255.     EINVAL, /* 235 */
  256.     EINVAL, /* 236 */
  257.     EINVAL, /* 237 */
  258.     EINVAL, /* 238 */
  259.     EINVAL, /* 239 */
  260.     EINVAL, /* 240 */
  261.     EINVAL, /* 241 */
  262.     EINVAL, /* 242 */
  263.     EINVAL, /* 243 */
  264.     EINVAL, /* 244 */
  265.     EINVAL, /* 245 */
  266.     EINVAL, /* 246 */
  267.     EINVAL, /* 247 */
  268.     EINVAL, /* 248 */
  269.     EINVAL, /* 249 */
  270.     EINVAL, /* 250 */
  271.     EINVAL, /* 251 */
  272.     EINVAL, /* 252 */
  273.     EINVAL, /* 253 */
  274.     EINVAL, /* 254 */
  275.     EINVAL, /* 255 */
  276.     EINVAL, /* 256 */
  277.     EINVAL, /* 257 */
  278.     EINVAL, /* 258 */
  279.     EINVAL, /* 259 */
  280.     EINVAL, /* 260 */
  281.     EINVAL, /* 261 */
  282.     EINVAL, /* 262 */
  283.     EINVAL, /* 263 */
  284.     EINVAL, /* 264 */
  285.     EINVAL, /* 265 */
  286.     EINVAL, /* 266 */
  287.     ENOTDIR, /* ERROR_DIRECTORY 267 */
  288. };
  289. static const unsigned int tableLen = sizeof(errorTable);
  290. /*
  291.  * The following table contains the mapping from WinSock errors to
  292.  * errno errors.
  293.  */
  294. static int wsaErrorTable[] = {
  295.     EWOULDBLOCK, /* WSAEWOULDBLOCK */
  296.     EINPROGRESS, /* WSAEINPROGRESS */
  297.     EALREADY, /* WSAEALREADY */
  298.     ENOTSOCK, /* WSAENOTSOCK */
  299.     EDESTADDRREQ, /* WSAEDESTADDRREQ */
  300.     EMSGSIZE, /* WSAEMSGSIZE */
  301.     EPROTOTYPE, /* WSAEPROTOTYPE */
  302.     ENOPROTOOPT, /* WSAENOPROTOOPT */
  303.     EPROTONOSUPPORT, /* WSAEPROTONOSUPPORT */
  304.     ESOCKTNOSUPPORT, /* WSAESOCKTNOSUPPORT */
  305.     EOPNOTSUPP, /* WSAEOPNOTSUPP */
  306.     EPFNOSUPPORT, /* WSAEPFNOSUPPORT */
  307.     EAFNOSUPPORT, /* WSAEAFNOSUPPORT */
  308.     EADDRINUSE, /* WSAEADDRINUSE */
  309.     EADDRNOTAVAIL, /* WSAEADDRNOTAVAIL */
  310.     ENETDOWN, /* WSAENETDOWN */
  311.     ENETUNREACH, /* WSAENETUNREACH */
  312.     ENETRESET, /* WSAENETRESET */
  313.     ECONNABORTED, /* WSAECONNABORTED */
  314.     ECONNRESET, /* WSAECONNRESET */
  315.     ENOBUFS, /* WSAENOBUFS */
  316.     EISCONN, /* WSAEISCONN */
  317.     ENOTCONN, /* WSAENOTCONN */
  318.     ESHUTDOWN, /* WSAESHUTDOWN */
  319.     ETOOMANYREFS, /* WSAETOOMANYREFS */
  320.     ETIMEDOUT, /* WSAETIMEDOUT */
  321.     ECONNREFUSED, /* WSAECONNREFUSED */
  322.     ELOOP, /* WSAELOOP */
  323.     ENAMETOOLONG, /* WSAENAMETOOLONG */
  324.     EHOSTDOWN, /* WSAEHOSTDOWN */
  325.     EHOSTUNREACH, /* WSAEHOSTUNREACH */
  326.     ENOTEMPTY, /* WSAENOTEMPTY */
  327.     EAGAIN, /* WSAEPROCLIM */
  328.     EUSERS, /* WSAEUSERS */
  329.     EDQUOT, /* WSAEDQUOT */
  330.     ESTALE, /* WSAESTALE */
  331.     EREMOTE, /* WSAEREMOTE */
  332. };
  333. /*
  334.  *----------------------------------------------------------------------
  335.  *
  336.  * TclWinConvertError --
  337.  *
  338.  * This routine converts a Win32 error into an errno value.
  339.  *
  340.  * Results:
  341.  * None.
  342.  *
  343.  * Side effects:
  344.  * Sets the errno global variable.
  345.  *
  346.  *----------------------------------------------------------------------
  347.  */
  348. void
  349. TclWinConvertError(errCode)
  350.     DWORD errCode; /* Win32 error code. */
  351. {
  352.     if (errCode >= tableLen) {
  353. Tcl_SetErrno(EINVAL);
  354.     } else {
  355. Tcl_SetErrno(errorTable[errCode]);
  356.     }
  357. }
  358. /*
  359.  *----------------------------------------------------------------------
  360.  *
  361.  * TclWinConvertWSAError --
  362.  *
  363.  * This routine converts a WinSock error into an errno value.
  364.  *
  365.  * Results:
  366.  * None.
  367.  *
  368.  * Side effects:
  369.  * Sets the errno global variable.
  370.  *
  371.  *----------------------------------------------------------------------
  372.  */
  373. void
  374. TclWinConvertWSAError(errCode)
  375.     DWORD errCode; /* Win32 error code. */
  376. {
  377.     if ((errCode >= WSAEWOULDBLOCK) && (errCode <= WSAEREMOTE)) {
  378. Tcl_SetErrno(wsaErrorTable[errCode - WSAEWOULDBLOCK]);
  379.     } else {
  380. Tcl_SetErrno(EINVAL);
  381.     }
  382. }