aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Innes1999-06-16 20:00:19 +0000
committerAndrew Innes1999-06-16 20:00:19 +0000
commitd8fcc1b98410fc641c5b3492b2fdfb3e5e534248 (patch)
treefddfdf40d1ed8cb52ccbaa9d58fd0a9e2484141f
parent03f8fb34a12ab5367de7bdcf57937966f8cda865 (diff)
downloademacs-d8fcc1b98410fc641c5b3492b2fdfb3e5e534248.tar.gz
emacs-d8fcc1b98410fc641c5b3492b2fdfb3e5e534248.zip
(sys_strerror): New function.
-rw-r--r--src/w32.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/w32.c b/src/w32.c
index 865e2b00221..1e855e5c998 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -57,6 +57,8 @@ Boston, MA 02111-1307, USA.
57#undef read 57#undef read
58#undef write 58#undef write
59 59
60#undef strerror
61
60#include "lisp.h" 62#include "lisp.h"
61 63
62#include <pwd.h> 64#include <pwd.h>
@@ -2356,6 +2358,99 @@ static void check_errno ()
2356 pfn_WSASetLastError (0); 2358 pfn_WSASetLastError (0);
2357} 2359}
2358 2360
2361/* Extend strerror to handle the winsock-specific error codes. */
2362struct {
2363 int errnum;
2364 char * msg;
2365} _wsa_errlist[] = {
2366 WSAEINTR , "Interrupted function call",
2367 WSAEBADF , "Bad file descriptor",
2368 WSAEACCES , "Permission denied",
2369 WSAEFAULT , "Bad address",
2370 WSAEINVAL , "Invalid argument",
2371 WSAEMFILE , "Too many open files",
2372
2373 WSAEWOULDBLOCK , "Resource temporarily unavailable",
2374 WSAEINPROGRESS , "Operation now in progress",
2375 WSAEALREADY , "Operation already in progress",
2376 WSAENOTSOCK , "Socket operation on non-socket",
2377 WSAEDESTADDRREQ , "Destination address required",
2378 WSAEMSGSIZE , "Message too long",
2379 WSAEPROTOTYPE , "Protocol wrong type for socket",
2380 WSAENOPROTOOPT , "Bad protocol option",
2381 WSAEPROTONOSUPPORT , "Protocol not supported",
2382 WSAESOCKTNOSUPPORT , "Socket type not supported",
2383 WSAEOPNOTSUPP , "Operation not supported",
2384 WSAEPFNOSUPPORT , "Protocol family not supported",
2385 WSAEAFNOSUPPORT , "Address family not supported by protocol family",
2386 WSAEADDRINUSE , "Address already in use",
2387 WSAEADDRNOTAVAIL , "Cannot assign requested address",
2388 WSAENETDOWN , "Network is down",
2389 WSAENETUNREACH , "Network is unreachable",
2390 WSAENETRESET , "Network dropped connection on reset",
2391 WSAECONNABORTED , "Software caused connection abort",
2392 WSAECONNRESET , "Connection reset by peer",
2393 WSAENOBUFS , "No buffer space available",
2394 WSAEISCONN , "Socket is already connected",
2395 WSAENOTCONN , "Socket is not connected",
2396 WSAESHUTDOWN , "Cannot send after socket shutdown",
2397 WSAETOOMANYREFS , "Too many references", /* not sure */
2398 WSAETIMEDOUT , "Connection timed out",
2399 WSAECONNREFUSED , "Connection refused",
2400 WSAELOOP , "Network loop", /* not sure */
2401 WSAENAMETOOLONG , "Name is too long",
2402 WSAEHOSTDOWN , "Host is down",
2403 WSAEHOSTUNREACH , "No route to host",
2404 WSAENOTEMPTY , "Buffer not empty", /* not sure */
2405 WSAEPROCLIM , "Too many processes",
2406 WSAEUSERS , "Too many users", /* not sure */
2407 WSAEDQUOT , "Double quote in host name", /* really not sure */
2408 WSAESTALE , "Data is stale", /* not sure */
2409 WSAEREMOTE , "Remote error", /* not sure */
2410
2411 WSASYSNOTREADY , "Network subsystem is unavailable",
2412 WSAVERNOTSUPPORTED , "WINSOCK.DLL version out of range",
2413 WSANOTINITIALISED , "Winsock not initialized successfully",
2414 WSAEDISCON , "Graceful shutdown in progress",
2415#ifdef WSAENOMORE
2416 WSAENOMORE , "No more operations allowed", /* not sure */
2417 WSAECANCELLED , "Operation cancelled", /* not sure */
2418 WSAEINVALIDPROCTABLE , "Invalid procedure table from service provider",
2419 WSAEINVALIDPROVIDER , "Invalid service provider version number",
2420 WSAEPROVIDERFAILEDINIT , "Unable to initialize a service provider",
2421 WSASYSCALLFAILURE , "System call failured",
2422 WSASERVICE_NOT_FOUND , "Service not found", /* not sure */
2423 WSATYPE_NOT_FOUND , "Class type not found",
2424 WSA_E_NO_MORE , "No more resources available", /* really not sure */
2425 WSA_E_CANCELLED , "Operation already cancelled", /* really not sure */
2426 WSAEREFUSED , "Operation refused", /* not sure */
2427#endif
2428
2429 WSAHOST_NOT_FOUND , "Host not found",
2430 WSATRY_AGAIN , "Authoritative host not found during name lookup",
2431 WSANO_RECOVERY , "Non-recoverable error during name lookup",
2432 WSANO_DATA , "Valid name, no data record of requested type",
2433
2434 -1, NULL
2435};
2436
2437char *
2438sys_strerror(int error_no)
2439{
2440 int i;
2441 static char unknown_msg[40];
2442
2443 if (error_no >= 0 && error_no < _sys_nerr)
2444 return _sys_errlist[error_no];
2445
2446 for (i = 0; _wsa_errlist[i].errnum >= 0; i++)
2447 if (_wsa_errlist[i].errnum == error_no)
2448 return _wsa_errlist[i].msg;
2449
2450 sprintf(unknown_msg, "Unidentified error: %d", error_no);
2451 return unknown_msg;
2452}
2453
2359/* [andrewi 3-May-96] I've had conflicting results using both methods, 2454/* [andrewi 3-May-96] I've had conflicting results using both methods,
2360 but I believe the method of keeping the socket handle separate (and 2455 but I believe the method of keeping the socket handle separate (and
2361 insuring it is not inheritable) is the correct one. */ 2456 insuring it is not inheritable) is the correct one. */