⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dosmap.c

📁 OTP是开放电信平台的简称
💻 C
字号:
/****dosmap.c - Maps OS errors to errno values**       Copyright (c) 1989-1995, Microsoft Corporation. All rights reserved.**Purpose:*       _dosmaperr: Maps Win OS errors to errno values********************************************************************************//* Only used on win32 */#ifdef WIN32#include <errno.h>#include <winerror.h>#include <stdlib.h>/* This is the error table that defines the mapping between OS error   codes and errno values */struct errentry {        unsigned long oscode;           /* OS return value */        int errnocode;  /* System V error code */};static struct errentry errtable[] = {        {  ERROR_INVALID_FUNCTION,       EINVAL    },  /* 1 */        {  ERROR_FILE_NOT_FOUND,         ENOENT    },  /* 2 */        {  ERROR_PATH_NOT_FOUND,         ENOENT    },  /* 3 */        {  ERROR_TOO_MANY_OPEN_FILES,    EMFILE    },  /* 4 */        {  ERROR_ACCESS_DENIED,          EACCES    },  /* 5 */        {  ERROR_INVALID_HANDLE,         EBADF     },  /* 6 */        {  ERROR_ARENA_TRASHED,          ENOMEM    },  /* 7 */        {  ERROR_NOT_ENOUGH_MEMORY,      ENOMEM    },  /* 8 */        {  ERROR_INVALID_BLOCK,          ENOMEM    },  /* 9 */        {  ERROR_BAD_ENVIRONMENT,        E2BIG     },  /* 10 */        {  ERROR_BAD_FORMAT,             ENOEXEC   },  /* 11 */        {  ERROR_INVALID_ACCESS,         EINVAL    },  /* 12 */        {  ERROR_INVALID_DATA,           EINVAL    },  /* 13 */        {  ERROR_INVALID_DRIVE,          ENOENT    },  /* 15 */        {  ERROR_CURRENT_DIRECTORY,      EACCES    },  /* 16 */        {  ERROR_NOT_SAME_DEVICE,        EXDEV     },  /* 17 */        {  ERROR_NO_MORE_FILES,          ENOENT    },  /* 18 */        {  ERROR_LOCK_VIOLATION,         EACCES    },  /* 33 */        {  ERROR_BAD_NETPATH,            ENOENT    },  /* 53 */        {  ERROR_NETWORK_ACCESS_DENIED,  EACCES    },  /* 65 */        {  ERROR_BAD_NET_NAME,           ENOENT    },  /* 67 */        {  ERROR_FILE_EXISTS,            EEXIST    },  /* 80 */        {  ERROR_CANNOT_MAKE,            EACCES    },  /* 82 */        {  ERROR_FAIL_I24,               EACCES    },  /* 83 */        {  ERROR_INVALID_PARAMETER,      EINVAL    },  /* 87 */        {  ERROR_NO_PROC_SLOTS,          EAGAIN    },  /* 89 */        {  ERROR_DRIVE_LOCKED,           EACCES    },  /* 108 */        {  ERROR_BROKEN_PIPE,            EPIPE     },  /* 109 */        {  ERROR_DISK_FULL,              ENOSPC    },  /* 112 */        {  ERROR_INVALID_TARGET_HANDLE,  EBADF     },  /* 114 */        {  ERROR_INVALID_HANDLE,         EINVAL    },  /* 124 */        {  ERROR_WAIT_NO_CHILDREN,       ECHILD    },  /* 128 */        {  ERROR_CHILD_NOT_COMPLETE,     ECHILD    },  /* 129 */        {  ERROR_DIRECT_ACCESS_HANDLE,   EBADF     },  /* 130 */        {  ERROR_NEGATIVE_SEEK,          EINVAL    },  /* 131 */        {  ERROR_SEEK_ON_DEVICE,         EACCES    },  /* 132 */        {  ERROR_DIR_NOT_EMPTY,          ENOTEMPTY },  /* 145 */        {  ERROR_NOT_LOCKED,             EACCES    },  /* 158 */        {  ERROR_BAD_PATHNAME,           ENOENT    },  /* 161 */        {  ERROR_MAX_THRDS_REACHED,      EAGAIN    },  /* 164 */        {  ERROR_LOCK_FAILED,            EACCES    },  /* 167 */        {  ERROR_ALREADY_EXISTS,         EEXIST    },  /* 183 */        {  ERROR_FILENAME_EXCED_RANGE,   ENOENT    },  /* 206 */        {  ERROR_NESTING_NOT_ALLOWED,    EAGAIN    },  /* 215 */        {  ERROR_NOT_ENOUGH_QUOTA,       ENOMEM    }    /* 1816 */};/* size of the table */#define ERRTABLESIZE (sizeof(errtable)/sizeof(errtable[0]))/* The following two constants must be the minimum and maximum   values in the (contiguous) range of Exec Failure errors. */#define MIN_EXEC_ERROR ERROR_INVALID_STARTING_CODESEG#define MAX_EXEC_ERROR ERROR_INFLOOP_IN_RELOC_CHAIN/* These are the low and high value in the range of errors that are   access violations */#define MIN_EACCES_RANGE ERROR_WRITE_PROTECT#define MAX_EACCES_RANGE ERROR_SHARING_BUFFER_EXCEEDED/****void _dosmaperr(oserrno) - Map function number**Purpose:*       This function takes an OS error number, and maps it to the*       corresponding errno value (based on UNIX System V values). The*       OS error number is stored in _doserrno (and the mapped value is*       stored in errno)**Entry:*       ULONG oserrno = OS error value**Exit:*       sets _doserrno and errno.**Exceptions:********************************************************************************/void __cdecl _dosmaperr (        unsigned long oserrno        ){        int i;        _doserrno = oserrno;        /* set _doserrno */        /* check the table for the OS error code */        for (i = 0; i < ERRTABLESIZE; ++i) {                if (oserrno == errtable[i].oscode) {                        errno = errtable[i].errnocode;                        return;                }        }        /* The error code wasn't in the table.  We check for a range of */        /* EACCES errors or exec failure errors (ENOEXEC).  Otherwise   */        /* EINVAL is returned.                                          */        if (oserrno >= MIN_EACCES_RANGE && oserrno <= MAX_EACCES_RANGE)                errno = EACCES;        else if (oserrno >= MIN_EXEC_ERROR && oserrno <= MAX_EXEC_ERROR)                errno = ENOEXEC;        else                errno = EINVAL;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -