mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
333 lines
6.1 KiB
333 lines
6.1 KiB
/*++
|
|
|
|
Copyright (c) 1992-1993 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ErrNo.c
|
|
|
|
Abstract:
|
|
|
|
This module contains code to convert C runtime error numbers to
|
|
API status values.
|
|
|
|
Author:
|
|
|
|
John Rogers (JohnRo) 14-Oct-1992
|
|
|
|
Revision History:
|
|
|
|
14-Oct-1992 JohnRo
|
|
Created for RAID 9020: setup: PortUas fails ("prompt on conflicts"
|
|
version).
|
|
04-Feb-1993 JohnRo
|
|
Added 4 new error codes.
|
|
|
|
--*/
|
|
|
|
|
|
#include <windows.h> // IN, etc.
|
|
#include <lmcons.h> // NET_API_STATUS.
|
|
|
|
|
|
#include <debuglib.h> // IF_DEBUG().
|
|
#include <lmerr.h> // NO_ERROR, NERR_ and ERROR_ equates.
|
|
#include <errno.h> // EDOM, ERANGE, etc.
|
|
#include <netdebug.h> // NetpKdPrint(()), FORMAT_ equates.
|
|
#include <netlib.h> // My prototype.
|
|
#include <prefix.h> // PREFIX_ equates.
|
|
|
|
|
|
//
|
|
// Define an error code to return if no other match exists.
|
|
// If you get this, feel free to browse and/or update WinError.h and LmErr.h
|
|
//
|
|
#define NO_GOOD_ERROR_CODE NERR_InternalError
|
|
|
|
|
|
NET_API_STATUS
|
|
NetpErrNoToApiStatus(
|
|
IN int Err
|
|
)
|
|
{
|
|
NET_API_STATUS ApiStatus;
|
|
|
|
switch (Err) {
|
|
|
|
// Add values in alphabetical order please.
|
|
|
|
#ifdef E2BIG
|
|
case E2BIG:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EACCES
|
|
case EACCES:
|
|
ApiStatus = ERROR_ACCESS_DENIED;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EAGAIN
|
|
case EAGAIN:
|
|
ApiStatus = ERROR_NO_PROC_SLOTS;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EBADF
|
|
case EBADF:
|
|
ApiStatus = ERROR_INVALID_HANDLE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EBUSY
|
|
case EBUSY:
|
|
// BUGBUG: Use ERROR_BUSY_DRIVE? ERROR_PATH_BUSY? ERROR_PIPE_BUSY?
|
|
ApiStatus = ERROR_BUSY;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ECHILD
|
|
case ECHILD:
|
|
ApiStatus = ERROR_WAIT_NO_CHILDREN;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EDEADLOCK
|
|
case EDEADLOCK:
|
|
// BUGBUG: Should this be ERROR_LOCK_FAILED?
|
|
ApiStatus = ERROR_LOCK_VIOLATION;
|
|
break;
|
|
#endif
|
|
|
|
case EDOM: // EDOM is in ANSI standard, so we can assume it is defined.
|
|
ApiStatus = ERROR_INVALID_PARAMETER;
|
|
break;
|
|
|
|
#ifdef EEXIST
|
|
case EEXIST:
|
|
ApiStatus = ERROR_FILE_EXISTS;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EFAULT
|
|
case EFAULT:
|
|
ApiStatus = ERROR_INVALID_ADDRESS;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EFBIG
|
|
case EFBIG:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EINTR
|
|
case EINTR:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EINVAL
|
|
case EINVAL:
|
|
ApiStatus = ERROR_INVALID_PARAMETER;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EIO
|
|
case EIO:
|
|
ApiStatus = ERROR_IO_DEVICE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EISDIR
|
|
case EISDIR:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EMFILE
|
|
case EMFILE:
|
|
ApiStatus = ERROR_TOO_MANY_OPEN_FILES;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EMLINK
|
|
case EMLINK:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENAMETOOLONG
|
|
case ENAMETOOLONG:
|
|
ApiStatus = ERROR_BUFFER_OVERFLOW;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENFILE
|
|
case ENFILE:
|
|
ApiStatus = ERROR_TOO_MANY_OPEN_FILES;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENODEV
|
|
case ENODEV:
|
|
// BUGBUG: Perhaps ERROR_BAD_DEVICE would be better?
|
|
ApiStatus = ERROR_BAD_UNIT;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOENT
|
|
case ENOENT:
|
|
// Could map to ERROR_FILE_NOT_FOUND or ERROR_PATH_NOT_FOUND.
|
|
ApiStatus = ERROR_FILE_NOT_FOUND;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOEXEC
|
|
case ENOEXEC:
|
|
// BUGBUG: This is just one of many possible ERROR_ values for this.
|
|
ApiStatus = ERROR_INVALID_EXE_SIGNATURE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOLCK
|
|
case ENOLCK:
|
|
// BUGBUG: Perhaps some non-lock error code would be OK?
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOMEM
|
|
case ENOMEM:
|
|
ApiStatus = ERROR_NOT_ENOUGH_MEMORY;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOSPC
|
|
case ENOSPC:
|
|
// BUGBUG: Perhaps ERROR_HANDLE_DISK_FULL?
|
|
ApiStatus = ERROR_DISK_FULL;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOSYS
|
|
case ENOSYS:
|
|
ApiStatus = ERROR_NOT_SUPPORTED;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOTBLK
|
|
case ENOTBLK:
|
|
// BUGBUG: Perhaps ERROR_BAD_UNIT or some other value?
|
|
ApiStatus = ERROR_BAD_DEVICE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOTDIR
|
|
case ENOTDIR:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOTEMPTY
|
|
case ENOTEMPTY:
|
|
ApiStatus = ERROR_DIR_NOT_EMPTY;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENOTTY
|
|
case ENOTTY:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ENXIO
|
|
case ENXIO:
|
|
// BUGBUG: Maybe ERROR_BAD_DEVICE is better?
|
|
ApiStatus = ERROR_BAD_UNIT;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EPERM
|
|
case EPERM:
|
|
ApiStatus = ERROR_ACCESS_DENIED;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EPIPE
|
|
case EPIPE:
|
|
ApiStatus = ERROR_BROKEN_PIPE;
|
|
break;
|
|
#endif
|
|
|
|
case ERANGE: // ERANGE is in ANSI std, so we can assume it's defined.
|
|
|
|
// BUGBUG: might ERROR_BAD_PATHNAME also fit for this if getcwd()
|
|
// was called with a path which is too long?
|
|
|
|
ApiStatus = ERROR_INVALID_PARAMETER;
|
|
break;
|
|
|
|
#ifdef EROFS
|
|
case EROFS:
|
|
ApiStatus = ERROR_READ_FAULT;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ESPIPE
|
|
case ESPIPE:
|
|
// Seek on pipe or other device.
|
|
// BUGBUG: Is there a closer error code for this?
|
|
ApiStatus = ERROR_INVALID_HANDLE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ESRCH
|
|
case ESRCH:
|
|
#ifdef ERROR_INVALID_PROCID
|
|
ApiStatus = ERROR_INVALID_PROCID;
|
|
#else
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
#endif
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ETXTBSY
|
|
case ETXTBSY:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EUCLEAN
|
|
case EUCLEAN:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EXDEV
|
|
case EXDEV:
|
|
ApiStatus = ERROR_NOT_SAME_DEVICE;
|
|
break;
|
|
#endif
|
|
|
|
#ifdef EZERO
|
|
case EZERO:
|
|
ApiStatus = NO_ERROR;
|
|
break;
|
|
#endif
|
|
|
|
default:
|
|
ApiStatus = NO_GOOD_ERROR_CODE;
|
|
break;
|
|
}
|
|
|
|
IF_DEBUG( ERRNO ) {
|
|
NetpKdPrint(( PREFIX_NETLIB
|
|
"NetpErrNoToApiStatus: converted %d to " FORMAT_API_STATUS
|
|
".\n", Err, ApiStatus));
|
|
}
|
|
|
|
return (ApiStatus);
|
|
|
|
}
|