Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/tcl8.5.2/win/tclWinError.c @ 68

Last change on this file since 68 was 25, checked in by landauf, 16 years ago

added tcl to libs

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