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

398 lines
8.8 KiB
C

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
s_perror.c
Abstract:
This module implements the s_perror() operation used by the
tcp/ip utilities. 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 <crt\errno.h>
#include <sock_err.h>
#include <winsock.h>
#include "nlstxt.h"
#define MAX_MSGTABLE 255
extern HMODULE hWinStrm;
extern int WSA_perror(
char *yourmsg,
int lerrno);
void
s_perror(
char *yourmsg,
int lerrno)
{
WCHAR perrW[MAX_MSGTABLE+1];
CHAR perr[MAX_MSGTABLE+1];
unsigned msglen;
unsigned usMsgNum;
switch (lerrno) {
// case EZERO:
// perr = "Error 0";
// break;
case EPERM:
usMsgNum = IDS_EPERM ;
break;
case ENOENT:
usMsgNum = IDS_ENOENT ;
break;
case ESRCH:
usMsgNum = IDS_ESRCH ;
break;
case EINTR:
usMsgNum = IDS_EINTR ;
break;
case EIO:
usMsgNum = IDS_EIO ;
break;
case ENXIO:
usMsgNum = IDS_ENXIO ;
break;
case E2BIG:
usMsgNum = IDS_E2BIG ;
break;
case ENOEXEC:
usMsgNum = IDS_ENOEXEC ;
break;
case EBADF:
usMsgNum = IDS_EBADF ;
break;
case ECHILD:
usMsgNum = IDS_ECHILD ;
break;
case EAGAIN:
usMsgNum = IDS_EAGAIN ;
break;
case ENOMEM:
usMsgNum = IDS_ENOMEM ;
break;
case EACCES:
usMsgNum = IDS_EACCES ;
break;
case EFAULT:
usMsgNum = IDS_EFAULT ;
break;
// case ENOTBLK:
// perr = "Block device required";
// break;
case EBUSY:
usMsgNum = IDS_EBUSY ;
break;
case EEXIST:
usMsgNum = IDS_EEXIST ;
break;
case EXDEV:
usMsgNum = IDS_EXDEV ;
break;
case ENODEV:
usMsgNum = IDS_ENODEV ;
break;
case ENOTDIR:
usMsgNum = IDS_ENOTDIR ;
break;
case EISDIR:
usMsgNum = IDS_EISDIR ;
break;
case EINVAL:
usMsgNum = IDS_EINVAL ;
break;
case ENFILE:
usMsgNum = IDS_ENFILE ;
break;
case EMFILE:
usMsgNum = IDS_EMFILE ;
break;
case ENOTTY:
usMsgNum = IDS_EMFILE ;
break;
// case ETXTBSY:
// perr = "Text file busy";
// break;
case EFBIG:
usMsgNum = IDS_EFBIG ;
break;
case ENOSPC:
usMsgNum = IDS_ENOSPC ;
break;
case ESPIPE:
usMsgNum = IDS_ESPIPE ;
break;
case EROFS:
usMsgNum = IDS_EROFS ;
break;
case EMLINK:
usMsgNum = IDS_EMLINK ;
break;
case EPIPE:
usMsgNum = IDS_EPIPE ;
break;
case EDOM:
usMsgNum = IDS_EDOM ;
break;
case ERANGE:
usMsgNum = IDS_ERANGE ;
break;
// case EUCLEAN:
// perr = "File system not clean";
// break;
case EDEADLK:
usMsgNum = IDS_EDEADLK ;
break;
case ENOMSG:
usMsgNum = IDS_ENOMSG ;
break;
case EIDRM:
usMsgNum = IDS_EIDRM ;
break;
case ECHRNG:
usMsgNum = IDS_ECHRNG ;
break;
case EL2NSYNC:
usMsgNum = IDS_EL2NSYNC ;
break;
case EL3HLT:
usMsgNum = IDS_EL3HLT ;
break;
case EL3RST:
usMsgNum = IDS_EL3RST ;
break;
case ELNRNG:
usMsgNum = IDS_ELNRNG ;
break;
case EUNATCH:
usMsgNum = IDS_EUNATCH ;
break;
case ENOCSI:
usMsgNum = IDS_ENOCSI ;
break;
case EL2HLT:
usMsgNum = IDS_EL2HLT ;
break;
case EBADE:
usMsgNum = IDS_EBADE ;
break;
case EBADR:
usMsgNum = IDS_EBADR ;
break;
case EXFULL:
usMsgNum = IDS_EXFULL ;
break;
case ENOANO:
usMsgNum = IDS_ENOANO ;
break;
case EBADRQC:
usMsgNum = IDS_EBADRQC ;
break;
case EBADSLT:
usMsgNum = IDS_EBADSLT ;
break;
case EBFONT:
usMsgNum = IDS_EBFONT ;
break;
case ENOSTR:
usMsgNum = IDS_ENOSTR ;
break;
case ENODATA:
usMsgNum = IDS_ENODATA ;
break;
case ETIME:
usMsgNum = IDS_ETIME ;
break;
case ENOSR:
usMsgNum = IDS_ENOSR ;
break;
case ENONET:
usMsgNum = IDS_ENONET ;
break;
case ENOPKG:
usMsgNum = IDS_ENOPKG ;
break;
case EREMOTE:
usMsgNum = IDS_EREMOTE ;
break;
case ENOLINK:
usMsgNum = IDS_ENOLINK ;
break;
case EADV:
usMsgNum = IDS_EADV ;
break;
case ESRMNT:
usMsgNum = IDS_ESRMNT ;
break;
case ECOMM:
usMsgNum = IDS_ECOMM ;
break;
case EPROTO:
usMsgNum = IDS_EPROTO ;
break;
case EMULTIHOP:
usMsgNum = IDS_EMULTIHOP ;
break;
case ELBIN:
usMsgNum = IDS_ELBIN ;
break;
case EDOTDOT:
usMsgNum = IDS_EDOTDOT ;
break;
case EBADMSG:
usMsgNum = IDS_EBADMSG ;
break;
case ENOTUNIQ:
usMsgNum = IDS_ENOTUNIQ ;
break;
case EREMCHG:
usMsgNum = IDS_EREMCHG ;
break;
case ELIBACC:
usMsgNum = IDS_ELIBACC;
break;
case ELIBBAD:
usMsgNum = IDS_ELIBBAD ;
break;
case ELIBSCN:
usMsgNum = IDS_ELIBSCN ;
break;
case ELIBMAX:
usMsgNum = IDS_ELIBMAX ;
break;
case ELIBEXEC:
usMsgNum = IDS_ELIBEXEC ;
break;
case ENOTSOCK:
usMsgNum = IDS_ENOTSOCK ;
break;
case EADDRNOTAVAIL:
usMsgNum = IDS_EADDRNOTAVAIL ;
break;
case EADDRINUSE:
usMsgNum = IDS_EADDRINUSE ;
break;
case EAFNOSUPPORT:
usMsgNum = IDS_EAFNOSUPPORT ;
break;
case ESOCKTNOSUPPORT:
usMsgNum = IDS_ESOCKTNOSUPPORT ;
break;
case EPROTONOSUPPORT:
usMsgNum = IDS_EPROTONOSUPPORT ;
break;
case ENOBUFS:
usMsgNum = IDS_ENOBUFS ;
break;
case ETIMEDOUT:
usMsgNum = IDS_ETIMEDOUT ;
break;
case EISCONN:
usMsgNum = IDS_EISCONN ;
break;
case ENOTCONN:
usMsgNum = IDS_ENOTCONN ;
break;
case ENOPROTOOPT:
usMsgNum = IDS_ENOPROTOOPT ;
break;
case ECONNRESET:
usMsgNum = IDS_ECONNRESET ;
break;
case ECONNABORT:
usMsgNum = IDS_ECONNABORT ;
break;
case ENETDOWN:
usMsgNum = IDS_ENETDOWN ;
break;
case ECONNREFUSED:
usMsgNum = IDS_ECONNREFUSED ;
break;
case EHOSTUNREACH:
usMsgNum = IDS_EHOSTUNREACH ;
break;
case EPROTOTYPE:
usMsgNum = IDS_EPROTOTYPE ;
break;
case EOPNOTSUPP:
usMsgNum = IDS_EOPNOTSUPP ;
break;
case ESUBNET:
usMsgNum = IDS_ESUBNET ;
break;
case ENETNOLNK:
usMsgNum = IDS_ENETNOLNK ;
break;
case EBADIOCTL:
usMsgNum = IDS_EBADIOCTL ;
break;
case ERESOURCE:
usMsgNum = IDS_ERESOURCE ;
break;
case EPROTUNR:
usMsgNum = IDS_EPROTUNR ;
break;
case EPORTUNR:
usMsgNum = IDS_EPORTUNR ;
break;
case ENETUNR:
usMsgNum = IDS_ENETUNR ;
break;
case EPACKET:
usMsgNum = IDS_EPACKET ;
break;
case ETYPEREG:
usMsgNum = IDS_ETYPEREG ;
break;
case ENOTINIT:
usMsgNum = IDS_ENOTINIT ;
break;
default:
if (WSA_perror(yourmsg, lerrno)) {
return;
}
usMsgNum = IDS_UNKNOWN ;
break;
}
if (hWinStrm == NULL)
hWinStrm = GetModuleHandle( "winstrm" );
if (!(msglen = FormatMessageW(
FORMAT_MESSAGE_FROM_HMODULE,
(LPVOID)hWinStrm,
usMsgNum,
0L,
perrW,
MAX_MSGTABLE,
NULL)))
return;
WideCharToMultiByte(CP_OEMCP,
0,
perrW,
-1,
perr,
sizeof(perr),
NULL,
NULL);
fprintf(stderr, "> %s:%s\n", yourmsg, perr);
return;
}