windows-nt/Source/XPSP1/NT/net/streams/winstrm/w_perror.c
2020-09-26 16:20:57 +08:00

219 lines
5.5 KiB
C

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
w_perror.c
Abstract:
This module implements the WSA_perror() operation used by the
p_error function. This is a temporary workaround for beta.
This will be replaced by NLS support for the final product.
Author:
John Ballard (jballard) June 15, 1992
Revision History:
Ronald Meijer (ronaldm) NLS Enabled Nov 26, 1992
--*/
#include <stdio.h>
#include <winsock.h>
#include "nlstxt.h"
#define MAX_MSGTABLE 255
HMODULE hWinStrm = NULL;
int WSA_perror(
char *yourmsg,
int lerrno)
{
WCHAR perrW[MAX_MSGTABLE+1];
CHAR perr[MAX_MSGTABLE+1];
unsigned msglen;
unsigned usMsgNum;
switch (lerrno) {
case WSAENAMETOOLONG:
usMsgNum = IDS_WSAENAMETOOLONG;
break;
case WSASYSNOTREADY:
usMsgNum = IDS_WSASYSNOTREADY;
break;
case WSAVERNOTSUPPORTED:
usMsgNum = IDS_WSAVERNOTSUPPORTED;
break;
case WSAESHUTDOWN:
usMsgNum = IDS_WSAESHUTDOWN;
break;
case WSAEINTR:
usMsgNum = IDS_WSAEINTR;
break;
case WSAHOST_NOT_FOUND:
usMsgNum = IDS_WSAHOST_NOT_FOUND;
break;
case WSATRY_AGAIN:
usMsgNum = IDS_WSATRY_AGAIN;
break;
case WSANO_RECOVERY:
usMsgNum = IDS_WSANO_RECOVERY;
break;
case WSANO_DATA:
usMsgNum = IDS_WSANO_DATA;
break;
case WSAEBADF:
usMsgNum = IDS_WSAEBADF;
break;
case WSAEWOULDBLOCK:
usMsgNum = IDS_WSAEWOULDBLOCK;
break;
case WSAEINPROGRESS:
usMsgNum = IDS_WSAEINPROGRESS;
break;
case WSAEALREADY:
usMsgNum = IDS_WSAEALREADY;
break;
case WSAEFAULT:
usMsgNum = IDS_WSAEFAULT;
break;
case WSAEDESTADDRREQ:
usMsgNum = IDS_WSAEDESTADDRREQ;
break;
case WSAEMSGSIZE:
usMsgNum = IDS_WSAEMSGSIZE;
break;
case WSAEPFNOSUPPORT:
usMsgNum = IDS_WSAEPFNOSUPPORT;
break;
case WSAENOTEMPTY:
usMsgNum = IDS_WSAENOTEMPTY;
break;
case WSAEPROCLIM:
usMsgNum = IDS_WSAEPROCLIM;
break;
case WSAEUSERS:
usMsgNum = IDS_WSAEUSERS;
break;
case WSAEDQUOT:
usMsgNum = IDS_WSAEDQUOT;
break;
case WSAESTALE:
usMsgNum = IDS_WSAESTALE;
break;
case WSAEINVAL:
usMsgNum = IDS_WSAEINVAL;
break;
case WSAEMFILE:
usMsgNum = IDS_WSAEMFILE;
break;
case WSAELOOP:
usMsgNum = IDS_WSAELOOP;
break;
case WSAEREMOTE:
usMsgNum = IDS_WSAEREMOTE;
break;
case WSAENOTSOCK:
usMsgNum = IDS_WSAENOTSOCK;
break;
case WSAEADDRNOTAVAIL:
usMsgNum = IDS_WSAEADDRNOTAVAIL;
break;
case WSAEADDRINUSE:
usMsgNum = IDS_WSAEADDRINUSE;
break;
case WSAEAFNOSUPPORT:
usMsgNum = IDS_WSAEAFNOSUPPORT;
break;
case WSAESOCKTNOSUPPORT:
usMsgNum = IDS_WSAESOCKTNOSUPPORT;
break;
case WSAEPROTONOSUPPORT:
usMsgNum = IDS_WSAEPROTONOSUPPORT;
break;
case WSAENOBUFS:
usMsgNum = IDS_WSAENOBUFS;
break;
case WSAETIMEDOUT:
usMsgNum = IDS_WSAETIMEDOUT;
break;
case WSAEISCONN:
usMsgNum = IDS_WSAEISCONN;
break;
case WSAENOTCONN:
usMsgNum = IDS_WSAENOTCONN;
break;
case WSAENOPROTOOPT:
usMsgNum = IDS_WSAENOPROTOOPT;
break;
case WSAECONNRESET:
usMsgNum = IDS_WSAECONNRESET;
break;
case WSAECONNABORTED:
usMsgNum = IDS_WSAECONNABORTED;
break;
case WSAENETDOWN:
usMsgNum = IDS_WSAENETDOWN;
break;
case WSAENETRESET:
usMsgNum = IDS_WSAENETRESET;
break;
case WSAECONNREFUSED:
usMsgNum = IDS_WSAECONNREFUSED;
break;
case WSAEHOSTDOWN:
usMsgNum = IDS_WSAEHOSTDOWN;
break;
case WSAEHOSTUNREACH:
usMsgNum = IDS_WSAEHOSTUNREACH;
break;
case WSAEPROTOTYPE:
usMsgNum = IDS_WSAEPROTOTYPE;
break;
case WSAEOPNOTSUPP:
usMsgNum = IDS_WSAEOPNOTSUPP;
break;
case WSAENETUNREACH:
usMsgNum = IDS_WSAENETUNREACH;
break;
case WSAETOOMANYREFS:
usMsgNum = IDS_WSAETOOMANYREFS;
break;
default:
return(0);
}
if (hWinStrm == NULL)
hWinStrm = GetModuleHandle( "winstrm" );
if (!(msglen = FormatMessageW(
FORMAT_MESSAGE_FROM_HMODULE,
(LPVOID)hWinStrm,
usMsgNum,
0L,
perrW,
MAX_MSGTABLE,
NULL)))
return(0);
WideCharToMultiByte(CP_OEMCP,
0,
perrW,
-1,
perr,
sizeof(perr),
NULL,
NULL);
fprintf(stderr, "-> %s:%s\n", yourmsg, perr);
return(1);
}