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 * This Source Code Form is subject to the terms of the Mozilla Public 11 * License, v. 2.0. If a copy of the MPL was not distributed with this 12 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 13 14 #include "prerror.h" 15 #include "prlog.h" 16 #include <errno.h> 17 18 19 /* 20 * Based on win32err.c 21 * OS2TODO Stub everything for now to build. HCT 22 */ 23 24 /* forward declaration. */ 25 void nss_MD_os2_map_default_error(PRInt32 err); 26 27 void nss_MD_os2_map_opendir_error(PRInt32 err) 28 { 29 nss_MD_os2_map_default_error(err); 30 } 31 32 void nss_MD_os2_map_closedir_error(PRInt32 err) 33 { 34 nss_MD_os2_map_default_error(err); 35 } 36 37 void nss_MD_os2_map_readdir_error(PRInt32 err) 38 { 39 nss_MD_os2_map_default_error(err); 40 } 41 42 void nss_MD_os2_map_delete_error(PRInt32 err) 43 { 44 nss_MD_os2_map_default_error(err); 45 } 46 47 /* The error code for stat() is in errno. */ 48 void nss_MD_os2_map_stat_error(PRInt32 err) 49 { 50 nss_MD_os2_map_default_error(err); 51 } 52 53 void nss_MD_os2_map_fstat_error(PRInt32 err) 54 { 55 nss_MD_os2_map_default_error(err); 56 } 57 58 void nss_MD_os2_map_rename_error(PRInt32 err) 59 { 60 nss_MD_os2_map_default_error(err); 61 } 62 63 /* The error code for access() is in errno. */ 64 void nss_MD_os2_map_access_error(PRInt32 err) 65 { 66 nss_MD_os2_map_default_error(err); 67 } 68 69 void nss_MD_os2_map_mkdir_error(PRInt32 err) 70 { 71 nss_MD_os2_map_default_error(err); 72 } 73 74 void nss_MD_os2_map_rmdir_error(PRInt32 err) 75 { 76 nss_MD_os2_map_default_error(err); 77 } 78 79 void nss_MD_os2_map_read_error(PRInt32 err) 80 { 81 nss_MD_os2_map_default_error(err); 82 } 83 84 void nss_MD_os2_map_transmitfile_error(PRInt32 err) 85 { 86 nss_MD_os2_map_default_error(err); 87 } 88 89 void nss_MD_os2_map_write_error(PRInt32 err) 90 { 91 nss_MD_os2_map_default_error(err); 92 } 93 94 void nss_MD_os2_map_lseek_error(PRInt32 err) 95 { 96 nss_MD_os2_map_default_error(err); 97 } 98 99 void nss_MD_os2_map_fsync_error(PRInt32 err) 100 { 101 nss_MD_os2_map_default_error(err); 102 } 103 104 /* 105 * For both CloseHandle() and closesocket(). 106 */ 107 void nss_MD_os2_map_close_error(PRInt32 err) 108 { 109 nss_MD_os2_map_default_error(err); 110 } 111 112 void nss_MD_os2_map_socket_error(PRInt32 err) 113 { 114 // PR_ASSERT(err != WSANOTINITIALISED); 115 nss_MD_os2_map_default_error(err); 116 } 117 118 void nss_MD_os2_map_recv_error(PRInt32 err) 119 { 120 nss_MD_os2_map_default_error(err); 121 } 122 123 void nss_MD_os2_map_recvfrom_error(PRInt32 err) 124 { 125 nss_MD_os2_map_default_error(err); 126 } 127 128 void nss_MD_os2_map_send_error(PRInt32 err) 129 { 130 PRErrorCode prError; 131 switch (err) { 132 // case WSAEMSGSIZE: prError = PR_INVALID_ARGUMENT_ERROR; break; 133 default: nss_MD_os2_map_default_error(err); return; 134 } 135 PR_SetError(prError, err); 136 } 137 138 void nss_MD_os2_map_sendto_error(PRInt32 err) 139 { 140 PRErrorCode prError; 141 switch (err) { 142 // case WSAEMSGSIZE: prError = PR_INVALID_ARGUMENT_ERROR; break; 143 default: nss_MD_os2_map_default_error(err); return; 144 } 145 PR_SetError(prError, err); 146 } 147 148 void nss_MD_os2_map_accept_error(PRInt32 err) 149 { 150 PRErrorCode prError; 151 switch (err) { 152 // case WSAEOPNOTSUPP: prError = PR_NOT_TCP_SOCKET_ERROR; break; 153 // case WSAEINVAL: prError = PR_INVALID_STATE_ERROR; break; 154 default: nss_MD_os2_map_default_error(err); return; 155 } 156 PR_SetError(prError, err); 157 } 158 159 void nss_MD_os2_map_acceptex_error(PRInt32 err) 160 { 161 nss_MD_os2_map_default_error(err); 162 } 163 164 void nss_MD_os2_map_connect_error(PRInt32 err) 165 { 166 PRErrorCode prError; 167 switch (err) { 168 // case WSAEWOULDBLOCK: prError = PR_IN_PROGRESS_ERROR; break; 169 // case WSAEINVAL: prError = PR_ALREADY_INITIATED_ERROR; break; 170 // case WSAETIMEDOUT: prError = PR_IO_TIMEOUT_ERROR; break; 171 default: nss_MD_os2_map_default_error(err); return; 172 } 173 PR_SetError(prError, err); 174 } 175 176 void nss_MD_os2_map_bind_error(PRInt32 err) 177 { 178 PRErrorCode prError; 179 switch (err) { 180 // case WSAEINVAL: prError = PR_SOCKET_ADDRESS_IS_BOUND_ERROR; break; 181 default: nss_MD_os2_map_default_error(err); return; 182 } 183 PR_SetError(prError, err); 184 } 185 186 void nss_MD_os2_map_listen_error(PRInt32 err) 187 { 188 PRErrorCode prError; 189 switch (err) { 190 // case WSAEOPNOTSUPP: prError = PR_NOT_TCP_SOCKET_ERROR; break; 191 // case WSAEINVAL: prError = PR_INVALID_STATE_ERROR; break; 192 default: nss_MD_os2_map_default_error(err); return; 193 } 194 PR_SetError(prError, err); 195 } 196 197 void nss_MD_os2_map_shutdown_error(PRInt32 err) 198 { 199 nss_MD_os2_map_default_error(err); 200 } 201 202 void nss_MD_os2_map_getsockname_error(PRInt32 err) 203 { 204 PRErrorCode prError; 205 switch (err) { 206 // case WSAEINVAL: prError = PR_INVALID_STATE_ERROR; break; 207 default: nss_MD_os2_map_default_error(err); return; 208 } 209 PR_SetError(prError, err); 210 } 211 212 void nss_MD_os2_map_getpeername_error(PRInt32 err) 213 { 214 nss_MD_os2_map_default_error(err); 215 } 216 217 void nss_MD_os2_map_getsockopt_error(PRInt32 err) 218 { 219 nss_MD_os2_map_default_error(err); 220 } 221 222 void nss_MD_os2_map_setsockopt_error(PRInt32 err) 223 { 224 nss_MD_os2_map_default_error(err); 225 } 226 227 void nss_MD_os2_map_open_error(PRInt32 err) 228 { 229 nss_MD_os2_map_default_error(err); 230 } 231 232 void nss_MD_os2_map_gethostname_error(PRInt32 err) 233 { 234 nss_MD_os2_map_default_error(err); 235 } 236 237 /* Win32 select() only works on sockets. So in this 238 ** context, WSAENOTSOCK is equivalent to EBADF on Unix. 239 */ 240 void nss_MD_os2_map_select_error(PRInt32 err) 241 { 242 PRErrorCode prError; 243 switch (err) { 244 // case WSAENOTSOCK: prError = PR_BAD_DESCRIPTOR_ERROR; break; 245 default: nss_MD_os2_map_default_error(err); return; 246 } 247 PR_SetError(prError, err); 248 } 249 250 void nss_MD_os2_map_lockf_error(PRInt32 err) 251 { 252 nss_MD_os2_map_default_error(err); 253 } 254 255 256 257 void nss_MD_os2_map_default_error(PRInt32 err) 258 { 259 PRErrorCode prError; 260 261 switch (err) { 262 // case ENOENT: prError = PR_FILE_NOT_FOUND_ERROR; break; 263 // case ERROR_ACCESS_DENIED: prError = PR_NO_ACCESS_RIGHTS_ERROR; break; 264 // case ERROR_ALREADY_EXISTS: prError = PR_FILE_EXISTS_ERROR; break; 265 // case ERROR_DISK_CORRUPT: prError = PR_IO_ERROR; break; 266 // case ERROR_DISK_FULL: prError = PR_NO_DEVICE_SPACE_ERROR; break; 267 // case ERROR_DISK_OPERATION_FAILED: prError = PR_IO_ERROR; break; 268 // case ERROR_DRIVE_LOCKED: prError = PR_FILE_IS_LOCKED_ERROR; break; 269 // case ERROR_FILENAME_EXCED_RANGE: prError = PR_NAME_TOO_LONG_ERROR; break; 270 // case ERROR_FILE_CORRUPT: prError = PR_IO_ERROR; break; 271 // case ERROR_FILE_EXISTS: prError = PR_FILE_EXISTS_ERROR; break; 272 // case ERROR_FILE_INVALID: prError = PR_BAD_DESCRIPTOR_ERROR; break; 273 #if ERROR_FILE_NOT_FOUND != ENOENT 274 // case ERROR_FILE_NOT_FOUND: prError = PR_FILE_NOT_FOUND_ERROR; break; 275 #endif 276 default: prError = PR_UNKNOWN_ERROR; break; 277 } 278 PR_SetError(prError, err); 279 } 280 281