398 lines
8.8 KiB
C
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;
|
|
}
|