1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/nsprpub/pr/src/md/os2/os2_errors.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1095 @@ 1.4 +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#include "prerror.h" 1.10 +#include "primpl.h" 1.11 + 1.12 +void _MD_os2_map_default_error(PRInt32 err) 1.13 +{ 1.14 + switch (err) { 1.15 + case EWOULDBLOCK: 1.16 + PR_SetError(PR_WOULD_BLOCK_ERROR, err); 1.17 + break; 1.18 + case EBADF: 1.19 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.20 + break; 1.21 + case ENOTSOCK: 1.22 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.23 + break; 1.24 + case EMSGSIZE: 1.25 + case EINVAL: 1.26 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.27 + break; 1.28 + case ENOBUFS: 1.29 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.30 + break; 1.31 + case ECONNREFUSED: 1.32 + PR_SetError(PR_CONNECT_REFUSED_ERROR, err); 1.33 + break; 1.34 + case EISCONN: 1.35 + PR_SetError(PR_IS_CONNECTED_ERROR, err); 1.36 + break; 1.37 +#ifdef SOCEFAULT 1.38 + case SOCEFAULT: 1.39 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.40 + break; 1.41 +#endif 1.42 + case ERROR_NETNAME_DELETED: 1.43 + PR_SetError(PR_CONNECT_RESET_ERROR, err); 1.44 + break; 1.45 + default: 1.46 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.47 + break; 1.48 + } 1.49 +} 1.50 +void _MD_os2_map_opendir_error(PRInt32 err) 1.51 +{ 1.52 + switch (err) { 1.53 + case ERROR_FILE_NOT_FOUND: 1.54 + case ERROR_PATH_NOT_FOUND: 1.55 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.56 + break; 1.57 + case ERROR_ACCESS_DENIED: 1.58 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.59 + break; 1.60 + case ERROR_INVALID_ADDRESS: 1.61 + case ERROR_INVALID_ACCESS: 1.62 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.63 + break; 1.64 + case ERROR_INVALID_NAME: 1.65 + case ERROR_INVALID_PARAMETER: 1.66 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.67 + break; 1.68 + case ERROR_TOO_MANY_OPEN_FILES: 1.69 + case ERROR_NOT_DOS_DISK: 1.70 + case ERROR_NOT_READY: 1.71 + case ERROR_OPEN_FAILED: 1.72 + case ERROR_PATH_BUSY: 1.73 + case ERROR_CANNOT_MAKE: 1.74 + PR_SetError(PR_IO_ERROR, err); 1.75 + break; 1.76 + case ERROR_DRIVE_LOCKED: 1.77 + case ERROR_DEVICE_IN_USE: 1.78 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.79 + break; 1.80 + case ERROR_FILENAME_EXCED_RANGE: 1.81 + PR_SetError(PR_NAME_TOO_LONG_ERROR, err); 1.82 + break; 1.83 + case ERROR_NOT_ENOUGH_MEMORY: 1.84 + case ERROR_SHARING_BUFFER_EXCEEDED: 1.85 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.86 + break; 1.87 + default: 1.88 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.89 + break; 1.90 + } 1.91 +} 1.92 + 1.93 +void _MD_os2_map_closedir_error(PRInt32 err) 1.94 +{ 1.95 + switch (err) { 1.96 + case ERROR_FILE_NOT_FOUND: 1.97 + case ERROR_ACCESS_DENIED: 1.98 + case ERROR_INVALID_HANDLE: 1.99 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.100 + break; 1.101 + default: 1.102 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.103 + break; 1.104 + } 1.105 +} 1.106 + 1.107 +void _MD_os2_readdir_error(PRInt32 err) 1.108 +{ 1.109 + 1.110 + switch (err) { 1.111 + case ERROR_NO_MORE_FILES: 1.112 + PR_SetError(PR_NO_MORE_FILES_ERROR, err); 1.113 + break; 1.114 + case ERROR_FILE_NOT_FOUND: 1.115 + case ERROR_INVALID_HANDLE: 1.116 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.117 + break; 1.118 + case ERROR_INVALID_ADDRESS: 1.119 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.120 + break; 1.121 + case ERROR_NOT_DOS_DISK: 1.122 + case ERROR_LOCK_VIOLATION: 1.123 + case ERROR_BROKEN_PIPE: 1.124 + case ERROR_NOT_READY: 1.125 + PR_SetError(PR_IO_ERROR, err); 1.126 + break; 1.127 + case ERROR_NOT_ENOUGH_MEMORY: 1.128 + case ERROR_MORE_DATA: 1.129 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.130 + break; 1.131 + default: 1.132 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.133 + break; 1.134 + } 1.135 +} 1.136 + 1.137 +void _MD_os2_map_delete_error(PRInt32 err) 1.138 +{ 1.139 + switch (err) { 1.140 + case ERROR_FILE_NOT_FOUND: 1.141 + case ERROR_PATH_NOT_FOUND: 1.142 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.143 + break; 1.144 + case ERROR_ACCESS_DENIED: 1.145 + case ERROR_WRITE_PROTECT: 1.146 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.147 + break; 1.148 + case ERROR_INVALID_ADDRESS: 1.149 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.150 + break; 1.151 + case ERROR_DRIVE_LOCKED: 1.152 + case ERROR_LOCKED: 1.153 + case ERROR_SHARING_VIOLATION: 1.154 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.155 + break; 1.156 + default: 1.157 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.158 + break; 1.159 + } 1.160 +} 1.161 + 1.162 +/* The error code for stat() is in errno. */ 1.163 +void _MD_os2_map_stat_error(PRInt32 err) 1.164 +{ 1.165 + switch (err) { 1.166 + case ENOENT: 1.167 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.168 + break; 1.169 + case EACCES: 1.170 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.171 + break; 1.172 + default: 1.173 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.174 + } 1.175 +} 1.176 + 1.177 +void _MD_os2_map_fstat_error(PRInt32 err) 1.178 +{ 1.179 + switch (err) { 1.180 + case ERROR_ACCESS_DENIED: 1.181 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.182 + break; 1.183 + case ERROR_INVALID_HANDLE: 1.184 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.185 + break; 1.186 + case ERROR_INVALID_ADDRESS: 1.187 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.188 + break; 1.189 + case ERROR_NOT_READY: 1.190 + case ERROR_PATH_BUSY: 1.191 + PR_SetError(PR_IO_ERROR, err); 1.192 + break; 1.193 + case ERROR_NOT_ENOUGH_MEMORY: 1.194 + case ERROR_MORE_DATA: 1.195 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.196 + break; 1.197 + case ERROR_DRIVE_LOCKED: 1.198 + case ERROR_LOCKED: 1.199 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.200 + break; 1.201 + default: 1.202 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.203 + break; 1.204 + } 1.205 +} 1.206 + 1.207 +void _MD_os2_map_rename_error(PRInt32 err) 1.208 +{ 1.209 + switch (err) { 1.210 + case ERROR_FILE_NOT_FOUND: 1.211 + case ERROR_PATH_NOT_FOUND: 1.212 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.213 + break; 1.214 + case ERROR_ACCESS_DENIED: 1.215 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.216 + break; 1.217 + case ERROR_INVALID_ADDRESS: 1.218 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.219 + break; 1.220 + case ERROR_INVALID_NAME: 1.221 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.222 + break; 1.223 + case ERROR_NOT_READY: 1.224 + case ERROR_PATH_BUSY: 1.225 + PR_SetError(PR_IO_ERROR, err); 1.226 + break; 1.227 + case ERROR_DRIVE_LOCKED: 1.228 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.229 + break; 1.230 + case ERROR_FILENAME_EXCED_RANGE: 1.231 + PR_SetError(PR_NAME_TOO_LONG_ERROR, err); 1.232 + break; 1.233 + case ERROR_NOT_ENOUGH_MEMORY: 1.234 + case ERROR_MORE_DATA: 1.235 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.236 + break; 1.237 + case ERROR_ALREADY_EXISTS: 1.238 + case ERROR_FILE_EXISTS: 1.239 + PR_SetError(PR_FILE_EXISTS_ERROR, err); 1.240 + break; 1.241 + default: 1.242 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.243 + break; 1.244 + } 1.245 +} 1.246 + 1.247 +/* The error code for access() is in errno. */ 1.248 +void _MD_os2_map_access_error(PRInt32 err) 1.249 +{ 1.250 + switch (err) { 1.251 + case ENOENT: 1.252 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.253 + break; 1.254 + case EACCES: 1.255 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.256 + break; 1.257 + default: 1.258 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.259 + } 1.260 +} 1.261 + 1.262 +void _MD_os2_map_mkdir_error(PRInt32 err) 1.263 +{ 1.264 + switch (err) { 1.265 + case ERROR_ALREADY_EXISTS: 1.266 + case ERROR_FILE_EXISTS: 1.267 + PR_SetError(PR_FILE_EXISTS_ERROR, err); 1.268 + break; 1.269 + case ERROR_FILE_NOT_FOUND: 1.270 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.271 + break; 1.272 + case ERROR_ACCESS_DENIED: 1.273 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.274 + break; 1.275 + case ERROR_INVALID_ADDRESS: 1.276 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.277 + break; 1.278 + case ERROR_INVALID_NAME: 1.279 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.280 + break; 1.281 + case ERROR_NOT_READY: 1.282 + case ERROR_PATH_BUSY: 1.283 + PR_SetError(PR_IO_ERROR, err); 1.284 + break; 1.285 + case ERROR_DRIVE_LOCKED: 1.286 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.287 + break; 1.288 + case ERROR_FILENAME_EXCED_RANGE: 1.289 + PR_SetError(PR_NAME_TOO_LONG_ERROR, err); 1.290 + break; 1.291 + case ERROR_TOO_MANY_OPEN_FILES: 1.292 + PR_SetError(PR_SYS_DESC_TABLE_FULL_ERROR, err); 1.293 + break; 1.294 + case ERROR_PATH_NOT_FOUND: 1.295 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.296 + break; 1.297 + case ERROR_NOT_ENOUGH_MEMORY: 1.298 + case ERROR_MORE_DATA: 1.299 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.300 + break; 1.301 + case ERROR_DISK_FULL: 1.302 + case ERROR_HANDLE_DISK_FULL: 1.303 + PR_SetError(PR_NO_DEVICE_SPACE_ERROR, err); 1.304 + break; 1.305 + case ERROR_WRITE_PROTECT: 1.306 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.307 + break; 1.308 + default: 1.309 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.310 + break; 1.311 + } 1.312 +} 1.313 + 1.314 +void _MD_os2_map_rmdir_error(PRInt32 err) 1.315 +{ 1.316 + 1.317 + switch (err) { 1.318 + case ERROR_FILE_NOT_FOUND: 1.319 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.320 + break; 1.321 + case ERROR_ACCESS_DENIED: 1.322 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.323 + break; 1.324 + case ERROR_INVALID_ADDRESS: 1.325 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.326 + break; 1.327 + case ERROR_INVALID_NAME: 1.328 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.329 + break; 1.330 + case ERROR_NOT_READY: 1.331 + case ERROR_PATH_BUSY: 1.332 + PR_SetError(PR_IO_ERROR, err); 1.333 + break; 1.334 + case ERROR_DRIVE_LOCKED: 1.335 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.336 + break; 1.337 + case ERROR_FILENAME_EXCED_RANGE: 1.338 + PR_SetError(PR_NAME_TOO_LONG_ERROR, err); 1.339 + break; 1.340 + case ERROR_TOO_MANY_OPEN_FILES: 1.341 + PR_SetError(PR_SYS_DESC_TABLE_FULL_ERROR, err); 1.342 + break; 1.343 + case ERROR_PATH_NOT_FOUND: 1.344 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.345 + break; 1.346 + case ERROR_NOT_ENOUGH_MEMORY: 1.347 + case ERROR_MORE_DATA: 1.348 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.349 + break; 1.350 + case ERROR_WRITE_PROTECT: 1.351 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.352 + break; 1.353 + default: 1.354 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.355 + break; 1.356 + } 1.357 +} 1.358 + 1.359 +void _MD_os2_map_read_error(PRInt32 err) 1.360 +{ 1.361 + switch (err) { 1.362 + case ERROR_ACCESS_DENIED: 1.363 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.364 + break; 1.365 + case ERROR_INVALID_HANDLE: 1.366 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.367 + break; 1.368 + case ERROR_INVALID_ADDRESS: 1.369 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.370 + break; 1.371 + case ERROR_NOT_READY: 1.372 + case ERROR_PATH_BUSY: 1.373 + PR_SetError(PR_IO_ERROR, err); 1.374 + break; 1.375 + case ERROR_NOT_ENOUGH_MEMORY: 1.376 + case ERROR_MORE_DATA: 1.377 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.378 + break; 1.379 + case ERROR_DRIVE_LOCKED: 1.380 + case ERROR_LOCKED: 1.381 + case ERROR_SHARING_VIOLATION: 1.382 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.383 + break; 1.384 + case ERROR_NETNAME_DELETED: 1.385 + PR_SetError(PR_CONNECT_RESET_ERROR, err); 1.386 + break; 1.387 + case EBADF: 1.388 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.389 + break; 1.390 + case ENOTSOCK: 1.391 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.392 + break; 1.393 +#ifdef SOCEFAULT 1.394 + case SOCEFAULT: 1.395 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.396 + break; 1.397 +#endif 1.398 + default: 1.399 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.400 + break; 1.401 + } 1.402 +} 1.403 + 1.404 +void _MD_os2_map_transmitfile_error(PRInt32 err) 1.405 +{ 1.406 + switch (err) { 1.407 + case ERROR_ACCESS_DENIED: 1.408 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.409 + break; 1.410 + case ERROR_INVALID_HANDLE: 1.411 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.412 + break; 1.413 + case ERROR_INVALID_ADDRESS: 1.414 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.415 + break; 1.416 + case ERROR_NOT_READY: 1.417 + case ERROR_PATH_BUSY: 1.418 + PR_SetError(PR_IO_ERROR, err); 1.419 + break; 1.420 + case ERROR_NOT_ENOUGH_MEMORY: 1.421 + case ERROR_MORE_DATA: 1.422 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.423 + break; 1.424 + case ERROR_DRIVE_LOCKED: 1.425 + case ERROR_LOCKED: 1.426 + case ERROR_SHARING_VIOLATION: 1.427 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.428 + break; 1.429 + case ERROR_FILENAME_EXCED_RANGE: 1.430 + PR_SetError(PR_NAME_TOO_LONG_ERROR, err); 1.431 + break; 1.432 + case ERROR_TOO_MANY_OPEN_FILES: 1.433 + PR_SetError(PR_SYS_DESC_TABLE_FULL_ERROR, err); 1.434 + break; 1.435 + case ERROR_PATH_NOT_FOUND: 1.436 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.437 + break; 1.438 + case EBADF: 1.439 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.440 + break; 1.441 + case ENOTSOCK: 1.442 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.443 + break; 1.444 +#ifdef SOCEFAULT 1.445 + case SOCEFAULT: 1.446 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.447 + break; 1.448 +#endif 1.449 + default: 1.450 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.451 + break; 1.452 + } 1.453 +} 1.454 + 1.455 +void _MD_os2_map_write_error(PRInt32 err) 1.456 +{ 1.457 + switch (err) { 1.458 + case ERROR_ACCESS_DENIED: 1.459 + case ERROR_WRITE_PROTECT: 1.460 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.461 + break; 1.462 + case ERROR_INVALID_HANDLE: 1.463 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.464 + break; 1.465 + case ERROR_INVALID_ADDRESS: 1.466 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.467 + break; 1.468 + case ERROR_NOT_READY: 1.469 + case ERROR_PATH_BUSY: 1.470 + PR_SetError(PR_IO_ERROR, err); 1.471 + break; 1.472 + case ERROR_DRIVE_LOCKED: 1.473 + case ERROR_LOCKED: 1.474 + case ERROR_SHARING_VIOLATION: 1.475 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.476 + break; 1.477 + case ERROR_NOT_ENOUGH_MEMORY: 1.478 + case ERROR_MORE_DATA: 1.479 + case ERROR_DISK_FULL: 1.480 + case ERROR_HANDLE_DISK_FULL: 1.481 + case ENOSPC: 1.482 + PR_SetError(PR_NO_DEVICE_SPACE_ERROR, err); 1.483 + break; 1.484 + case ERROR_NETNAME_DELETED: 1.485 + PR_SetError(PR_CONNECT_RESET_ERROR, err); 1.486 + break; 1.487 + case EBADF: 1.488 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.489 + break; 1.490 + case ENOTSOCK: 1.491 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.492 + break; 1.493 + case EMSGSIZE: 1.494 + case EINVAL: 1.495 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.496 + break; 1.497 + case ENOBUFS: 1.498 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.499 + break; 1.500 + case ECONNREFUSED: 1.501 + PR_SetError(PR_CONNECT_REFUSED_ERROR, err); 1.502 + break; 1.503 + case EISCONN: 1.504 + PR_SetError(PR_IS_CONNECTED_ERROR, err); 1.505 + break; 1.506 +#ifdef SOCEFAULT 1.507 + case SOCEFAULT: 1.508 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.509 + break; 1.510 +#endif 1.511 + default: 1.512 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.513 + break; 1.514 + } 1.515 +} 1.516 + 1.517 +void _MD_os2_map_lseek_error(PRInt32 err) 1.518 +{ 1.519 + switch (err) { 1.520 + case ERROR_INVALID_HANDLE: 1.521 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.522 + break; 1.523 + case ERROR_SEEK_ON_DEVICE: 1.524 + PR_SetError(PR_IO_ERROR, err); 1.525 + break; 1.526 + default: 1.527 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.528 + break; 1.529 + } 1.530 +} 1.531 + 1.532 +void _MD_os2_map_fsync_error(PRInt32 err) 1.533 +{ 1.534 + switch (err) { 1.535 + case ERROR_ACCESS_DENIED: 1.536 + case ERROR_WRITE_PROTECT: 1.537 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.538 + break; 1.539 + case ERROR_INVALID_HANDLE: 1.540 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.541 + break; 1.542 + case ERROR_NOT_ENOUGH_MEMORY: 1.543 + case ERROR_MORE_DATA: 1.544 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.545 + break; 1.546 + case ERROR_DISK_FULL: 1.547 + case ERROR_HANDLE_DISK_FULL: 1.548 + PR_SetError(PR_NO_DEVICE_SPACE_ERROR, err); 1.549 + break; 1.550 + default: 1.551 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.552 + break; 1.553 + } 1.554 +} 1.555 + 1.556 +void _MD_os2_map_close_error(PRInt32 err) 1.557 +{ 1.558 + switch (err) { 1.559 + case ERROR_INVALID_HANDLE: 1.560 + case EBADF: 1.561 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.562 + break; 1.563 + case ERROR_NOT_READY: 1.564 + case ERROR_PATH_BUSY: 1.565 + PR_SetError(PR_IO_ERROR, err); 1.566 + break; 1.567 + default: 1.568 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.569 + break; 1.570 + } 1.571 +} 1.572 + 1.573 +void _MD_os2_map_socket_error(PRInt32 err) 1.574 +{ 1.575 + switch (err) { 1.576 + case EPROTONOSUPPORT: 1.577 + PR_SetError(PR_PROTOCOL_NOT_SUPPORTED_ERROR, err); 1.578 + break; 1.579 + case EACCES: 1.580 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.581 + break; 1.582 + case ERROR_NOT_ENOUGH_MEMORY: 1.583 + case ERROR_MORE_DATA: 1.584 + case ENOBUFS: 1.585 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.586 + break; 1.587 + default: 1.588 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.589 + break; 1.590 + } 1.591 +} 1.592 + 1.593 +void _MD_os2_map_recv_error(PRInt32 err) 1.594 +{ 1.595 + switch (err) { 1.596 + case EWOULDBLOCK: 1.597 + PR_SetError(PR_WOULD_BLOCK_ERROR, err); 1.598 + break; 1.599 + case EBADF: 1.600 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.601 + break; 1.602 + case ENOTSOCK: 1.603 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.604 + break; 1.605 +#ifdef SOCEFAULT 1.606 + case SOCEFAULT: 1.607 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.608 + break; 1.609 +#endif 1.610 + case ERROR_NETNAME_DELETED: 1.611 + PR_SetError(PR_CONNECT_RESET_ERROR, err); 1.612 + break; 1.613 + default: 1.614 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.615 + break; 1.616 + } 1.617 +} 1.618 + 1.619 +void _MD_os2_map_recvfrom_error(PRInt32 err) 1.620 +{ 1.621 + switch (err) { 1.622 + case EWOULDBLOCK: 1.623 + PR_SetError(PR_WOULD_BLOCK_ERROR, err); 1.624 + break; 1.625 + case EBADF: 1.626 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.627 + break; 1.628 + case ENOTSOCK: 1.629 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.630 + break; 1.631 +#ifdef SOCEFAULT 1.632 + case SOCEFAULT: 1.633 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.634 + break; 1.635 +#endif 1.636 + case ERROR_NETNAME_DELETED: 1.637 + PR_SetError(PR_CONNECT_RESET_ERROR, err); 1.638 + break; 1.639 + default: 1.640 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.641 + break; 1.642 + } 1.643 +} 1.644 + 1.645 +void _MD_os2_map_send_error(PRInt32 err) 1.646 +{ 1.647 + switch (err) { 1.648 + case EWOULDBLOCK: 1.649 + PR_SetError(PR_WOULD_BLOCK_ERROR, err); 1.650 + break; 1.651 + case EBADF: 1.652 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.653 + break; 1.654 + case ENOTSOCK: 1.655 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.656 + break; 1.657 + case EMSGSIZE: 1.658 + case EINVAL: 1.659 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.660 + break; 1.661 + case ENOBUFS: 1.662 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.663 + break; 1.664 + case ECONNREFUSED: 1.665 + PR_SetError(PR_CONNECT_REFUSED_ERROR, err); 1.666 + break; 1.667 + case EISCONN: 1.668 + PR_SetError(PR_IS_CONNECTED_ERROR, err); 1.669 + break; 1.670 +#ifdef SOCEFAULT 1.671 + case SOCEFAULT: 1.672 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.673 + break; 1.674 +#endif 1.675 + case ERROR_NETNAME_DELETED: 1.676 + PR_SetError(PR_CONNECT_RESET_ERROR, err); 1.677 + break; 1.678 + default: 1.679 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.680 + break; 1.681 + } 1.682 +} 1.683 + 1.684 +void _MD_os2_map_sendto_error(PRInt32 err) 1.685 +{ 1.686 + _MD_os2_map_default_error(err); 1.687 +} 1.688 + 1.689 +void _MD_os2_map_writev_error(int err) 1.690 +{ 1.691 + _MD_os2_map_default_error(err); 1.692 +} 1.693 + 1.694 +void _MD_os2_map_accept_error(PRInt32 err) 1.695 +{ 1.696 + _MD_os2_map_default_error(err); 1.697 +} 1.698 + 1.699 +void _MD_os2_map_acceptex_error(PRInt32 err) 1.700 +{ 1.701 + switch (err) { 1.702 + case ERROR_INVALID_HANDLE: 1.703 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.704 + break; 1.705 + case ERROR_INVALID_ADDRESS: 1.706 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.707 + break; 1.708 + case ERROR_NOT_ENOUGH_MEMORY: 1.709 + case ERROR_MORE_DATA: 1.710 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.711 + break; 1.712 + default: 1.713 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.714 + break; 1.715 + } 1.716 +} 1.717 + 1.718 +/* 1.719 + * An error code of 0 means that the nonblocking connect succeeded. 1.720 + */ 1.721 + 1.722 +int _MD_os2_get_nonblocking_connect_error(int osfd) 1.723 +{ 1.724 + int err; 1.725 + int len = sizeof(err); 1.726 + if (getsockopt(osfd, SOL_SOCKET, SO_ERROR, (char *) &err, &len) == -1) { 1.727 + return sock_errno(); 1.728 + } else { 1.729 + return err; 1.730 + } 1.731 +} 1.732 + 1.733 +void _MD_os2_map_connect_error(PRInt32 err) 1.734 +{ 1.735 + switch (err) { 1.736 + case EWOULDBLOCK: 1.737 + PR_SetError(PR_WOULD_BLOCK_ERROR, err); 1.738 + break; 1.739 + case EINPROGRESS: 1.740 + PR_SetError(PR_IN_PROGRESS_ERROR, err); 1.741 + break; 1.742 + case EALREADY: 1.743 + case EINVAL: 1.744 + PR_SetError(PR_ALREADY_INITIATED_ERROR, err); 1.745 + break; 1.746 + case EBADF: 1.747 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.748 + break; 1.749 + case EADDRNOTAVAIL: 1.750 + PR_SetError(PR_ADDRESS_NOT_AVAILABLE_ERROR, err); 1.751 + break; 1.752 + case ENOTSOCK: 1.753 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.754 + break; 1.755 + case EAFNOSUPPORT: 1.756 + PR_SetError(PR_ADDRESS_NOT_SUPPORTED_ERROR, err); 1.757 + break; 1.758 + case ETIMEDOUT: 1.759 + PR_SetError(PR_IO_TIMEOUT_ERROR, err); 1.760 + break; 1.761 + case ECONNREFUSED: 1.762 + PR_SetError(PR_CONNECT_REFUSED_ERROR, err); 1.763 + break; 1.764 + case ENETUNREACH: 1.765 + PR_SetError(PR_NETWORK_UNREACHABLE_ERROR, err); 1.766 + break; 1.767 + case EADDRINUSE: 1.768 + PR_SetError(PR_ADDRESS_IN_USE_ERROR, err); 1.769 + break; 1.770 + case EISCONN: 1.771 + PR_SetError(PR_IS_CONNECTED_ERROR, err); 1.772 + break; 1.773 +#ifdef SOCEFAULT 1.774 + case SOCEFAULT: 1.775 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.776 + break; 1.777 +#endif 1.778 + default: 1.779 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.780 + break; 1.781 + } 1.782 +} 1.783 + 1.784 +void _MD_os2_map_bind_error(PRInt32 err) 1.785 +{ 1.786 + switch (err) { 1.787 + case EBADF: 1.788 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.789 + break; 1.790 + case ENOTSOCK: 1.791 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.792 + break; 1.793 +#ifdef SOCEFAULT 1.794 + case SOCEFAULT: 1.795 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.796 + break; 1.797 +#endif 1.798 + case EADDRNOTAVAIL: 1.799 + PR_SetError(PR_ADDRESS_NOT_AVAILABLE_ERROR, err); 1.800 + break; 1.801 + case EADDRINUSE: 1.802 + PR_SetError(PR_ADDRESS_IN_USE_ERROR, err); 1.803 + break; 1.804 + case EACCES: 1.805 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.806 + break; 1.807 + case EINVAL: 1.808 + PR_SetError(PR_SOCKET_ADDRESS_IS_BOUND_ERROR, err); 1.809 + break; 1.810 + default: 1.811 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.812 + break; 1.813 + } 1.814 +} 1.815 + 1.816 +void _MD_os2_map_listen_error(PRInt32 err) 1.817 +{ 1.818 + switch (err) { 1.819 + case EBADF: 1.820 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.821 + break; 1.822 + case ENOTSOCK: 1.823 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.824 + break; 1.825 + case EOPNOTSUPP: 1.826 + PR_SetError(PR_NOT_TCP_SOCKET_ERROR, err); 1.827 + break; 1.828 + default: 1.829 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.830 + break; 1.831 + } 1.832 +} 1.833 + 1.834 +void _MD_os2_map_shutdown_error(PRInt32 err) 1.835 +{ 1.836 + switch (err) { 1.837 + case EBADF: 1.838 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.839 + break; 1.840 + case ENOTSOCK: 1.841 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.842 + break; 1.843 + case ENOTCONN: 1.844 + PR_SetError(PR_NOT_CONNECTED_ERROR, err); 1.845 + break; 1.846 + default: 1.847 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.848 + break; 1.849 + } 1.850 +} 1.851 + 1.852 +void _MD_os2_map_socketpair_error(PRInt32 err) 1.853 +{ 1.854 + switch (err) { 1.855 + case ENOMEM: 1.856 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.857 + break; 1.858 + case EAFNOSUPPORT: 1.859 + PR_SetError(PR_ADDRESS_NOT_SUPPORTED_ERROR, err); 1.860 + break; 1.861 + case EPROTONOSUPPORT: 1.862 + PR_SetError(PR_PROTOCOL_NOT_SUPPORTED_ERROR, err); 1.863 + break; 1.864 + case EOPNOTSUPP: 1.865 + PR_SetError(PR_NOT_TCP_SOCKET_ERROR, err); 1.866 + break; 1.867 + case EPROTOTYPE: 1.868 + PR_SetError(PR_ADDRESS_NOT_SUPPORTED_ERROR, err); 1.869 + break; 1.870 + default: 1.871 + _MD_os2_map_default_error(err); 1.872 + return; 1.873 + } 1.874 +} 1.875 + 1.876 +void _MD_os2_map_getsockname_error(PRInt32 err) 1.877 +{ 1.878 + switch (err) { 1.879 + case EBADF: 1.880 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.881 + break; 1.882 + case ENOTSOCK: 1.883 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.884 + break; 1.885 +#ifdef SOCEFAULT 1.886 + case SOCEFAULT: 1.887 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.888 + break; 1.889 +#endif 1.890 + case ENOBUFS: 1.891 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.892 + break; 1.893 + default: 1.894 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.895 + break; 1.896 + } 1.897 +} 1.898 + 1.899 +void _MD_os2_map_getpeername_error(PRInt32 err) 1.900 +{ 1.901 + 1.902 + switch (err) { 1.903 + case EBADF: 1.904 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.905 + break; 1.906 + case ENOTSOCK: 1.907 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.908 + break; 1.909 + case ENOTCONN: 1.910 + PR_SetError(PR_NOT_CONNECTED_ERROR, err); 1.911 + break; 1.912 +#ifdef SOCEFAULT 1.913 + case SOCEFAULT: 1.914 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.915 + break; 1.916 +#endif 1.917 + case ENOBUFS: 1.918 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.919 + break; 1.920 + default: 1.921 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.922 + break; 1.923 + } 1.924 +} 1.925 + 1.926 +void _MD_os2_map_getsockopt_error(PRInt32 err) 1.927 +{ 1.928 + switch (err) { 1.929 + case EBADF: 1.930 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.931 + break; 1.932 + case ENOTSOCK: 1.933 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.934 + break; 1.935 + case ENOPROTOOPT: 1.936 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.937 + break; 1.938 +#ifdef SOCEFAULT 1.939 + case SOCEFAULT: 1.940 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.941 + break; 1.942 +#endif 1.943 + case EINVAL: 1.944 + PR_SetError(PR_BUFFER_OVERFLOW_ERROR, err); 1.945 + break; 1.946 + default: 1.947 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.948 + break; 1.949 + } 1.950 +} 1.951 + 1.952 +void _MD_os2_map_setsockopt_error(PRInt32 err) 1.953 +{ 1.954 + switch (err) { 1.955 + case EBADF: 1.956 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.957 + break; 1.958 + case ENOTSOCK: 1.959 + PR_SetError(PR_NOT_SOCKET_ERROR, err); 1.960 + break; 1.961 + case ENOPROTOOPT: 1.962 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.963 + break; 1.964 +#ifdef SOCEFAULT 1.965 + case SOCEFAULT: 1.966 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.967 + break; 1.968 +#endif 1.969 + case EINVAL: 1.970 + PR_SetError(PR_BUFFER_OVERFLOW_ERROR, err); 1.971 + break; 1.972 + default: 1.973 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.974 + break; 1.975 + } 1.976 +} 1.977 + 1.978 +void _MD_os2_map_open_error(PRInt32 err) 1.979 +{ 1.980 + switch (err) { 1.981 + case ERROR_ALREADY_EXISTS: 1.982 + case ERROR_FILE_EXISTS: 1.983 + PR_SetError(PR_FILE_EXISTS_ERROR, err); 1.984 + break; 1.985 + case ERROR_FILE_NOT_FOUND: 1.986 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.987 + break; 1.988 + case ERROR_ACCESS_DENIED: 1.989 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.990 + break; 1.991 + case ERROR_INVALID_ADDRESS: 1.992 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.993 + break; 1.994 + case ERROR_INVALID_NAME: 1.995 + PR_SetError(PR_INVALID_ARGUMENT_ERROR, err); 1.996 + break; 1.997 + case ERROR_NOT_READY: 1.998 + case ERROR_OPEN_FAILED: 1.999 + case ERROR_PATH_BUSY: 1.1000 + PR_SetError(PR_IO_ERROR, err); 1.1001 + break; 1.1002 + case ERROR_DRIVE_LOCKED: 1.1003 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.1004 + break; 1.1005 + case ERROR_FILENAME_EXCED_RANGE: 1.1006 + PR_SetError(PR_NAME_TOO_LONG_ERROR, err); 1.1007 + break; 1.1008 + case ERROR_TOO_MANY_OPEN_FILES: 1.1009 + PR_SetError(PR_SYS_DESC_TABLE_FULL_ERROR, err); 1.1010 + break; 1.1011 + case ERROR_PATH_NOT_FOUND: 1.1012 + PR_SetError(PR_FILE_NOT_FOUND_ERROR, err); 1.1013 + break; 1.1014 + case ERROR_NOT_ENOUGH_MEMORY: 1.1015 + case ERROR_MORE_DATA: 1.1016 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.1017 + break; 1.1018 + case ERROR_DISK_FULL: 1.1019 + case ERROR_HANDLE_DISK_FULL: 1.1020 + PR_SetError(PR_NO_DEVICE_SPACE_ERROR, err); 1.1021 + break; 1.1022 + case ERROR_WRITE_PROTECT: 1.1023 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.1024 + break; 1.1025 + default: 1.1026 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.1027 + break; 1.1028 + } 1.1029 +} 1.1030 + 1.1031 +void _MD_os2_map_gethostname_error(PRInt32 err) 1.1032 +{ 1.1033 + switch (err) { 1.1034 +#ifdef SOCEFAULT 1.1035 + case SOCEFAULT: 1.1036 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.1037 + break; 1.1038 +#endif 1.1039 + case ENETDOWN: 1.1040 + case EINPROGRESS: 1.1041 + default: 1.1042 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.1043 + break; 1.1044 + } 1.1045 +} 1.1046 + 1.1047 +void _MD_os2_map_select_error(PRInt32 err) 1.1048 +{ 1.1049 + PRErrorCode prerror; 1.1050 + 1.1051 + switch (err) { 1.1052 + /* 1.1053 + * OS/2 select() only works on sockets. So in this 1.1054 + * context, ENOTSOCK is equivalent to EBADF on Unix. 1.1055 + */ 1.1056 + case ENOTSOCK: 1.1057 + prerror = PR_BAD_DESCRIPTOR_ERROR; 1.1058 + break; 1.1059 + case EINVAL: 1.1060 + prerror = PR_INVALID_ARGUMENT_ERROR; 1.1061 + break; 1.1062 +#ifdef SOCEFAULT 1.1063 + case SOCEFAULT: 1.1064 + prerror = PR_ACCESS_FAULT_ERROR; 1.1065 + break; 1.1066 +#endif 1.1067 + default: 1.1068 + prerror = PR_UNKNOWN_ERROR; 1.1069 + } 1.1070 + PR_SetError(prerror, err); 1.1071 +} 1.1072 + 1.1073 +void _MD_os2_map_lockf_error(PRInt32 err) 1.1074 +{ 1.1075 + switch (err) { 1.1076 + case ERROR_ACCESS_DENIED: 1.1077 + PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err); 1.1078 + break; 1.1079 + case ERROR_INVALID_HANDLE: 1.1080 + PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err); 1.1081 + break; 1.1082 + case ERROR_INVALID_ADDRESS: 1.1083 + PR_SetError(PR_ACCESS_FAULT_ERROR, err); 1.1084 + break; 1.1085 + case ERROR_DRIVE_LOCKED: 1.1086 + case ERROR_LOCKED: 1.1087 + case ERROR_SHARING_VIOLATION: 1.1088 + PR_SetError(PR_FILE_IS_LOCKED_ERROR, err); 1.1089 + break; 1.1090 + case ERROR_NOT_ENOUGH_MEMORY: 1.1091 + case ERROR_MORE_DATA: 1.1092 + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err); 1.1093 + break; 1.1094 + default: 1.1095 + PR_SetError(PR_UNKNOWN_ERROR, err); 1.1096 + break; 1.1097 + } 1.1098 +}