win32err.c
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:12k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /*
  3.  * This file essentially replicates NSPR's source for the functions that
  4.  * map system-specific error codes to NSPR error codes.  We would use 
  5.  * NSPR's functions, instead of duplicating them, but they're private.
  6.  * As long as SSL's server session cache code must do platform native I/O
  7.  * to accomplish its job, and NSPR's error mapping functions remain private,
  8.  * this code will continue to need to be replicated.
  9.  * 
  10.  * The contents of this file are subject to the Mozilla Public
  11.  * License Version 1.1 (the "License"); you may not use this file
  12.  * except in compliance with the License. You may obtain a copy of
  13.  * the License at http://www.mozilla.org/MPL/
  14.  * 
  15.  * Software distributed under the License is distributed on an "AS
  16.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  17.  * implied. See the License for the specific language governing
  18.  * rights and limitations under the License.
  19.  * 
  20.  * The Original Code is the Netscape security libraries.
  21.  * 
  22.  * The Initial Developer of the Original Code is Netscape
  23.  * Communications Corporation.  Portions created by Netscape are 
  24.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  25.  * Rights Reserved.
  26.  * 
  27.  * Contributor(s):
  28.  * 
  29.  * Alternatively, the contents of this file may be used under the
  30.  * terms of the GNU General Public License Version 2 or later (the
  31.  * "GPL"), in which case the provisions of the GPL are applicable 
  32.  * instead of those above.  If you wish to allow use of your 
  33.  * version of this file only under the terms of the GPL and not to
  34.  * allow others to use your version of this file under the MPL,
  35.  * indicate your decision by deleting the provisions above and
  36.  * replace them with the notice and other provisions required by
  37.  * the GPL.  If you do not delete the provisions above, a recipient
  38.  * may use your version of this file under either the MPL or the
  39.  * GPL.
  40.  *
  41.  * $Id: win32err.c,v 1.1 2000/03/31 19:37:19 relyea%netscape.com Exp $
  42.  */
  43. #include "prerror.h"
  44. #include "prlog.h"
  45. #include <errno.h>
  46. #include <windows.h>
  47. /*
  48.  * On Win32, we map three kinds of error codes:
  49.  * - GetLastError(): for Win32 functions
  50.  * - WSAGetLastError(): for Winsock functions
  51.  * - errno: for standard C library functions
  52.  *
  53.  * We do not check for WSAEINPROGRESS and WSAEINTR because we do not
  54.  * use blocking Winsock 1.1 calls.
  55.  *
  56.  * Except for the 'socket' call, we do not check for WSAEINITIALISED.
  57.  * It is assumed that if Winsock is not initialized, that fact will
  58.  * be detected at the time we create new sockets.
  59.  */
  60. /* forward declaration. */
  61. void nss_MD_win32_map_default_error(PRInt32 err);
  62. void nss_MD_win32_map_opendir_error(PRInt32 err)
  63. {
  64.     nss_MD_win32_map_default_error(err);
  65. }
  66. void nss_MD_win32_map_closedir_error(PRInt32 err)
  67. {
  68.     nss_MD_win32_map_default_error(err);
  69. }
  70. void nss_MD_win32_map_readdir_error(PRInt32 err)
  71. {
  72.     nss_MD_win32_map_default_error(err);
  73. }
  74. void nss_MD_win32_map_delete_error(PRInt32 err)
  75. {
  76.     nss_MD_win32_map_default_error(err);
  77. }
  78. /* The error code for stat() is in errno. */
  79. void nss_MD_win32_map_stat_error(PRInt32 err)
  80. {
  81.     nss_MD_win32_map_default_error(err);
  82. }
  83. void nss_MD_win32_map_fstat_error(PRInt32 err)
  84. {
  85.     nss_MD_win32_map_default_error(err);
  86. }
  87. void nss_MD_win32_map_rename_error(PRInt32 err)
  88. {
  89.     nss_MD_win32_map_default_error(err);
  90. }
  91. /* The error code for access() is in errno. */
  92. void nss_MD_win32_map_access_error(PRInt32 err)
  93. {
  94.     nss_MD_win32_map_default_error(err);
  95. }
  96. void nss_MD_win32_map_mkdir_error(PRInt32 err)
  97. {
  98.     nss_MD_win32_map_default_error(err);
  99. }
  100. void nss_MD_win32_map_rmdir_error(PRInt32 err)
  101. {
  102.     nss_MD_win32_map_default_error(err);
  103. }
  104. void nss_MD_win32_map_read_error(PRInt32 err)
  105. {
  106.     nss_MD_win32_map_default_error(err);
  107. }
  108. void nss_MD_win32_map_transmitfile_error(PRInt32 err)
  109. {
  110.     nss_MD_win32_map_default_error(err);
  111. }
  112. void nss_MD_win32_map_write_error(PRInt32 err)
  113. {
  114.     nss_MD_win32_map_default_error(err);
  115. }
  116. void nss_MD_win32_map_lseek_error(PRInt32 err)
  117. {
  118.     nss_MD_win32_map_default_error(err);
  119. }
  120. void nss_MD_win32_map_fsync_error(PRInt32 err)
  121. {
  122.     nss_MD_win32_map_default_error(err);
  123. }
  124. /*
  125.  * For both CloseHandle() and closesocket().
  126.  */
  127. void nss_MD_win32_map_close_error(PRInt32 err)
  128. {
  129.     nss_MD_win32_map_default_error(err);
  130. }
  131. void nss_MD_win32_map_socket_error(PRInt32 err)
  132. {
  133.     PR_ASSERT(err != WSANOTINITIALISED);
  134.     nss_MD_win32_map_default_error(err);
  135. }
  136. void nss_MD_win32_map_recv_error(PRInt32 err)
  137. {
  138.     nss_MD_win32_map_default_error(err);
  139. }
  140. void nss_MD_win32_map_recvfrom_error(PRInt32 err)
  141. {
  142.     nss_MD_win32_map_default_error(err);
  143. }
  144. void nss_MD_win32_map_send_error(PRInt32 err)
  145. {
  146.     PRErrorCode prError;
  147.     switch (err) {
  148.     case WSAEMSGSIZE:  prError = PR_INVALID_ARGUMENT_ERROR; break;
  149.     default: nss_MD_win32_map_default_error(err); return;
  150.     }
  151.     PR_SetError(prError, err);
  152. }
  153. void nss_MD_win32_map_sendto_error(PRInt32 err)
  154. {
  155.     PRErrorCode prError;
  156.     switch (err) {
  157.     case WSAEMSGSIZE:  prError = PR_INVALID_ARGUMENT_ERROR; break;
  158.     default: nss_MD_win32_map_default_error(err); return;
  159.     }
  160.     PR_SetError(prError, err);
  161. }
  162. void nss_MD_win32_map_accept_error(PRInt32 err)
  163. {
  164.     PRErrorCode prError;
  165.     switch (err) {
  166.     case WSAEOPNOTSUPP: prError = PR_NOT_TCP_SOCKET_ERROR; break;
  167.     case WSAEINVAL:  prError = PR_INVALID_STATE_ERROR; break;
  168.     default: nss_MD_win32_map_default_error(err); return;
  169.     }
  170.     PR_SetError(prError, err);
  171. }
  172. void nss_MD_win32_map_acceptex_error(PRInt32 err)
  173. {
  174.     nss_MD_win32_map_default_error(err);
  175. }
  176. void nss_MD_win32_map_connect_error(PRInt32 err)
  177. {
  178.     PRErrorCode prError;
  179.     switch (err) {
  180.     case WSAEWOULDBLOCK: prError = PR_IN_PROGRESS_ERROR; break;
  181.     case WSAEINVAL:  prError = PR_ALREADY_INITIATED_ERROR; break;
  182.     case WSAETIMEDOUT:  prError = PR_IO_TIMEOUT_ERROR; break;
  183.     default: nss_MD_win32_map_default_error(err); return;
  184.     }
  185.     PR_SetError(prError, err);
  186. }
  187. void nss_MD_win32_map_bind_error(PRInt32 err)
  188. {
  189.     PRErrorCode prError;
  190.     switch (err) {
  191.     case WSAEINVAL:  prError = PR_SOCKET_ADDRESS_IS_BOUND_ERROR; break;
  192.     default: nss_MD_win32_map_default_error(err); return;
  193.     }
  194.     PR_SetError(prError, err);
  195. }
  196. void nss_MD_win32_map_listen_error(PRInt32 err)
  197. {
  198.     PRErrorCode prError;
  199.     switch (err) {
  200.     case WSAEOPNOTSUPP: prError = PR_NOT_TCP_SOCKET_ERROR; break;
  201.     case WSAEINVAL:  prError = PR_INVALID_STATE_ERROR; break;
  202.     default: nss_MD_win32_map_default_error(err); return;
  203.     }
  204.     PR_SetError(prError, err);
  205. }
  206. void nss_MD_win32_map_shutdown_error(PRInt32 err)
  207. {
  208.     nss_MD_win32_map_default_error(err);
  209. }
  210. void nss_MD_win32_map_getsockname_error(PRInt32 err)
  211. {
  212.     PRErrorCode prError;
  213.     switch (err) {
  214.     case WSAEINVAL:  prError = PR_INVALID_STATE_ERROR; break;
  215.     default: nss_MD_win32_map_default_error(err); return;
  216.     }
  217.     PR_SetError(prError, err);
  218. }
  219. void nss_MD_win32_map_getpeername_error(PRInt32 err)
  220. {
  221.     nss_MD_win32_map_default_error(err);
  222. }
  223. void nss_MD_win32_map_getsockopt_error(PRInt32 err)
  224. {
  225.     nss_MD_win32_map_default_error(err);
  226. }
  227. void nss_MD_win32_map_setsockopt_error(PRInt32 err)
  228. {
  229.     nss_MD_win32_map_default_error(err);
  230. }
  231. void nss_MD_win32_map_open_error(PRInt32 err)
  232. {
  233.     nss_MD_win32_map_default_error(err);
  234. }
  235. void nss_MD_win32_map_gethostname_error(PRInt32 err)
  236. {
  237.     nss_MD_win32_map_default_error(err);
  238. }
  239. /* Win32 select() only works on sockets.  So in this
  240. ** context, WSAENOTSOCK is equivalent to EBADF on Unix.  
  241. */
  242. void nss_MD_win32_map_select_error(PRInt32 err)
  243. {
  244.     PRErrorCode prError;
  245.     switch (err) {
  246.     case WSAENOTSOCK: prError = PR_BAD_DESCRIPTOR_ERROR; break;
  247.     default: nss_MD_win32_map_default_error(err); return;
  248.     }
  249.     PR_SetError(prError, err);
  250. }
  251. void nss_MD_win32_map_lockf_error(PRInt32 err)
  252. {
  253.     nss_MD_win32_map_default_error(err);
  254. }
  255. void nss_MD_win32_map_default_error(PRInt32 err)
  256. {
  257.     PRErrorCode prError;
  258.     switch (err) {
  259.     case EACCES:  prError = PR_NO_ACCESS_RIGHTS_ERROR; break;
  260.     case ENOENT:  prError = PR_FILE_NOT_FOUND_ERROR; break;
  261.     case ERROR_ACCESS_DENIED:  prError = PR_NO_ACCESS_RIGHTS_ERROR; break;
  262.     case ERROR_ALREADY_EXISTS:  prError = PR_FILE_EXISTS_ERROR; break;
  263.     case ERROR_DISK_CORRUPT:  prError = PR_IO_ERROR; break;
  264.     case ERROR_DISK_FULL:  prError = PR_NO_DEVICE_SPACE_ERROR; break;
  265.     case ERROR_DISK_OPERATION_FAILED: prError = PR_IO_ERROR; break;
  266.     case ERROR_DRIVE_LOCKED:  prError = PR_FILE_IS_LOCKED_ERROR; break;
  267.     case ERROR_FILENAME_EXCED_RANGE: prError = PR_NAME_TOO_LONG_ERROR; break;
  268.     case ERROR_FILE_CORRUPT:  prError = PR_IO_ERROR; break;
  269.     case ERROR_FILE_EXISTS:  prError = PR_FILE_EXISTS_ERROR; break;
  270.     case ERROR_FILE_INVALID:  prError = PR_BAD_DESCRIPTOR_ERROR; break;
  271. #if ERROR_FILE_NOT_FOUND != ENOENT
  272.     case ERROR_FILE_NOT_FOUND:  prError = PR_FILE_NOT_FOUND_ERROR; break;
  273. #endif
  274.     case ERROR_HANDLE_DISK_FULL: prError = PR_NO_DEVICE_SPACE_ERROR; break;
  275.     case ERROR_INVALID_ADDRESS: prError = PR_ACCESS_FAULT_ERROR; break;
  276.     case ERROR_INVALID_HANDLE:  prError = PR_BAD_DESCRIPTOR_ERROR; break;
  277.     case ERROR_INVALID_NAME:  prError = PR_INVALID_ARGUMENT_ERROR; break;
  278.     case ERROR_INVALID_PARAMETER: prError = PR_INVALID_ARGUMENT_ERROR; break;
  279.     case ERROR_INVALID_USER_BUFFER: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
  280.     case ERROR_LOCKED:   prError = PR_FILE_IS_LOCKED_ERROR; break;
  281.     case ERROR_NETNAME_DELETED: prError = PR_CONNECT_RESET_ERROR; break;
  282.     case ERROR_NOACCESS:  prError = PR_ACCESS_FAULT_ERROR; break;
  283.     case ERROR_NOT_ENOUGH_MEMORY: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
  284.     case ERROR_NOT_ENOUGH_QUOTA: prError = PR_OUT_OF_MEMORY_ERROR; break;
  285.     case ERROR_NOT_READY:  prError = PR_IO_ERROR; break;
  286.     case ERROR_NO_MORE_FILES:  prError = PR_NO_MORE_FILES_ERROR; break;
  287.     case ERROR_OPEN_FAILED:  prError = PR_IO_ERROR; break;
  288.     case ERROR_OPEN_FILES:  prError = PR_IO_ERROR; break;
  289.     case ERROR_OUTOFMEMORY:  prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
  290.     case ERROR_PATH_BUSY:  prError = PR_IO_ERROR; break;
  291.     case ERROR_PATH_NOT_FOUND:  prError = PR_FILE_NOT_FOUND_ERROR; break;
  292.     case ERROR_SEEK_ON_DEVICE:  prError = PR_IO_ERROR; break;
  293.     case ERROR_SHARING_VIOLATION: prError = PR_FILE_IS_BUSY_ERROR; break;
  294.     case ERROR_STACK_OVERFLOW:  prError = PR_ACCESS_FAULT_ERROR; break;
  295.     case ERROR_TOO_MANY_OPEN_FILES: prError = PR_SYS_DESC_TABLE_FULL_ERROR; break;
  296.     case ERROR_WRITE_PROTECT:  prError = PR_NO_ACCESS_RIGHTS_ERROR; break;
  297.     case WSAEACCES:  prError = PR_NO_ACCESS_RIGHTS_ERROR; break;
  298.     case WSAEADDRINUSE:  prError = PR_ADDRESS_IN_USE_ERROR; break;
  299.     case WSAEADDRNOTAVAIL:  prError = PR_ADDRESS_NOT_AVAILABLE_ERROR; break;
  300.     case WSAEAFNOSUPPORT:  prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
  301.     case WSAEALREADY:  prError = PR_ALREADY_INITIATED_ERROR; break;
  302.     case WSAEBADF:  prError = PR_BAD_DESCRIPTOR_ERROR; break;
  303.     case WSAECONNABORTED:  prError = PR_CONNECT_ABORTED_ERROR; break;
  304.     case WSAECONNREFUSED:  prError = PR_CONNECT_REFUSED_ERROR; break;
  305.     case WSAECONNRESET:  prError = PR_CONNECT_RESET_ERROR; break;
  306.     case WSAEDESTADDRREQ:  prError = PR_INVALID_ARGUMENT_ERROR; break;
  307.     case WSAEFAULT:  prError = PR_ACCESS_FAULT_ERROR; break;
  308.     case WSAEHOSTUNREACH:  prError = PR_HOST_UNREACHABLE_ERROR; break;
  309.     case WSAEINVAL:  prError = PR_INVALID_ARGUMENT_ERROR; break;
  310.     case WSAEISCONN:  prError = PR_IS_CONNECTED_ERROR; break;
  311.     case WSAEMFILE:  prError = PR_PROC_DESC_TABLE_FULL_ERROR; break;
  312.     case WSAEMSGSIZE:  prError = PR_BUFFER_OVERFLOW_ERROR; break;
  313.     case WSAENETDOWN:  prError = PR_NETWORK_DOWN_ERROR; break;
  314.     case WSAENETRESET:  prError = PR_CONNECT_ABORTED_ERROR; break;
  315.     case WSAENETUNREACH:  prError = PR_NETWORK_UNREACHABLE_ERROR; break;
  316.     case WSAENOBUFS:  prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
  317.     case WSAENOPROTOOPT:  prError = PR_INVALID_ARGUMENT_ERROR; break;
  318.     case WSAENOTCONN:  prError = PR_NOT_CONNECTED_ERROR; break;
  319.     case WSAENOTSOCK:  prError = PR_NOT_SOCKET_ERROR; break;
  320.     case WSAEOPNOTSUPP:  prError = PR_OPERATION_NOT_SUPPORTED_ERROR; break;
  321.     case WSAEPROTONOSUPPORT:  prError = PR_PROTOCOL_NOT_SUPPORTED_ERROR; break;
  322.     case WSAEPROTOTYPE:  prError = PR_INVALID_ARGUMENT_ERROR; break;
  323.     case WSAESHUTDOWN:  prError = PR_SOCKET_SHUTDOWN_ERROR; break;
  324.     case WSAESOCKTNOSUPPORT:  prError = PR_INVALID_ARGUMENT_ERROR; break;
  325.     case WSAETIMEDOUT:  prError = PR_CONNECT_ABORTED_ERROR; break;
  326.     case WSAEWOULDBLOCK:  prError = PR_WOULD_BLOCK_ERROR; break;
  327.     default:  prError = PR_UNKNOWN_ERROR; break;
  328.     }
  329.     PR_SetError(prError, err);
  330. }