security/nss/lib/ssl/unix_err.c

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

michael@0 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
michael@0 2 /*
michael@0 3 * This file essentially replicates NSPR's source for the functions that
michael@0 4 * map system-specific error codes to NSPR error codes. We would use
michael@0 5 * NSPR's functions, instead of duplicating them, but they're private.
michael@0 6 * As long as SSL's server session cache code must do platform native I/O
michael@0 7 * to accomplish its job, and NSPR's error mapping functions remain private,
michael@0 8 * this code will continue to need to be replicated.
michael@0 9 *
michael@0 10 * This Source Code Form is subject to the terms of the Mozilla Public
michael@0 11 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 12 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 13
michael@0 14 #if 0
michael@0 15 #include "primpl.h"
michael@0 16 #else
michael@0 17 #define _PR_POLL_AVAILABLE 1
michael@0 18 #include "prerror.h"
michael@0 19 #endif
michael@0 20
michael@0 21 #if defined (__bsdi__) || defined(NTO) || defined(DARWIN) || defined(BEOS)
michael@0 22 #undef _PR_POLL_AVAILABLE
michael@0 23 #endif
michael@0 24
michael@0 25 #if defined(_PR_POLL_AVAILABLE)
michael@0 26 #include <poll.h>
michael@0 27 #endif
michael@0 28 #include <errno.h>
michael@0 29
michael@0 30 /* forward declarations. */
michael@0 31 void nss_MD_unix_map_default_error(int err);
michael@0 32
michael@0 33 void nss_MD_unix_map_opendir_error(int err)
michael@0 34 {
michael@0 35 nss_MD_unix_map_default_error(err);
michael@0 36 }
michael@0 37
michael@0 38 void nss_MD_unix_map_closedir_error(int err)
michael@0 39 {
michael@0 40 PRErrorCode prError;
michael@0 41 switch (err) {
michael@0 42 case EINVAL: prError = PR_BAD_DESCRIPTOR_ERROR; break;
michael@0 43 default: nss_MD_unix_map_default_error(err); return;
michael@0 44 }
michael@0 45 PR_SetError(prError, err);
michael@0 46 }
michael@0 47
michael@0 48 void nss_MD_unix_readdir_error(int err)
michael@0 49 {
michael@0 50 PRErrorCode prError;
michael@0 51
michael@0 52 switch (err) {
michael@0 53 case ENOENT: prError = PR_NO_MORE_FILES_ERROR; break;
michael@0 54 #ifdef EOVERFLOW
michael@0 55 case EOVERFLOW: prError = PR_IO_ERROR; break;
michael@0 56 #endif
michael@0 57 case EINVAL: prError = PR_IO_ERROR; break;
michael@0 58 case ENXIO: prError = PR_IO_ERROR; break;
michael@0 59 default: nss_MD_unix_map_default_error(err); return;
michael@0 60 }
michael@0 61 PR_SetError(prError, err);
michael@0 62 }
michael@0 63
michael@0 64 void nss_MD_unix_map_unlink_error(int err)
michael@0 65 {
michael@0 66 PRErrorCode prError;
michael@0 67 switch (err) {
michael@0 68 case EPERM: prError = PR_IS_DIRECTORY_ERROR; break;
michael@0 69 default: nss_MD_unix_map_default_error(err); return;
michael@0 70 }
michael@0 71 PR_SetError(prError, err);
michael@0 72 }
michael@0 73
michael@0 74 void nss_MD_unix_map_stat_error(int err)
michael@0 75 {
michael@0 76 PRErrorCode prError;
michael@0 77 switch (err) {
michael@0 78 case ETIMEDOUT: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 79 default: nss_MD_unix_map_default_error(err); return;
michael@0 80 }
michael@0 81 PR_SetError(prError, err);
michael@0 82 }
michael@0 83
michael@0 84 void nss_MD_unix_map_fstat_error(int err)
michael@0 85 {
michael@0 86 PRErrorCode prError;
michael@0 87 switch (err) {
michael@0 88 case ETIMEDOUT: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 89 default: nss_MD_unix_map_default_error(err); return;
michael@0 90 }
michael@0 91 PR_SetError(prError, err);
michael@0 92 }
michael@0 93
michael@0 94 void nss_MD_unix_map_rename_error(int err)
michael@0 95 {
michael@0 96 PRErrorCode prError;
michael@0 97 switch (err) {
michael@0 98 case EEXIST: prError = PR_DIRECTORY_NOT_EMPTY_ERROR; break;
michael@0 99 default: nss_MD_unix_map_default_error(err); return;
michael@0 100 }
michael@0 101 PR_SetError(prError, err);
michael@0 102 }
michael@0 103
michael@0 104 void nss_MD_unix_map_access_error(int err)
michael@0 105 {
michael@0 106 PRErrorCode prError;
michael@0 107 switch (err) {
michael@0 108 case ETIMEDOUT: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 109 default: nss_MD_unix_map_default_error(err); return;
michael@0 110 }
michael@0 111 PR_SetError(prError, err);
michael@0 112 }
michael@0 113
michael@0 114 void nss_MD_unix_map_mkdir_error(int err)
michael@0 115 {
michael@0 116 nss_MD_unix_map_default_error(err);
michael@0 117 }
michael@0 118
michael@0 119 void nss_MD_unix_map_rmdir_error(int err)
michael@0 120 {
michael@0 121 PRErrorCode prError;
michael@0 122
michael@0 123 switch (err) {
michael@0 124 case EEXIST: prError = PR_DIRECTORY_NOT_EMPTY_ERROR; break;
michael@0 125 case EINVAL: prError = PR_DIRECTORY_NOT_EMPTY_ERROR; break;
michael@0 126 case ETIMEDOUT: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 127 default: nss_MD_unix_map_default_error(err); return;
michael@0 128 }
michael@0 129 PR_SetError(prError, err);
michael@0 130 }
michael@0 131
michael@0 132 void nss_MD_unix_map_read_error(int err)
michael@0 133 {
michael@0 134 PRErrorCode prError;
michael@0 135 switch (err) {
michael@0 136 case EINVAL: prError = PR_INVALID_METHOD_ERROR; break;
michael@0 137 case ENXIO: prError = PR_INVALID_ARGUMENT_ERROR; break;
michael@0 138 default: nss_MD_unix_map_default_error(err); return;
michael@0 139 }
michael@0 140 PR_SetError(prError, err);
michael@0 141 }
michael@0 142
michael@0 143 void nss_MD_unix_map_write_error(int err)
michael@0 144 {
michael@0 145 PRErrorCode prError;
michael@0 146 switch (err) {
michael@0 147 case EINVAL: prError = PR_INVALID_METHOD_ERROR; break;
michael@0 148 case ENXIO: prError = PR_INVALID_METHOD_ERROR; break;
michael@0 149 case ETIMEDOUT: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 150 default: nss_MD_unix_map_default_error(err); return;
michael@0 151 }
michael@0 152 PR_SetError(prError, err);
michael@0 153 }
michael@0 154
michael@0 155 void nss_MD_unix_map_lseek_error(int err)
michael@0 156 {
michael@0 157 nss_MD_unix_map_default_error(err);
michael@0 158 }
michael@0 159
michael@0 160 void nss_MD_unix_map_fsync_error(int err)
michael@0 161 {
michael@0 162 PRErrorCode prError;
michael@0 163 switch (err) {
michael@0 164 case ETIMEDOUT: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 165 case EINVAL: prError = PR_INVALID_METHOD_ERROR; break;
michael@0 166 default: nss_MD_unix_map_default_error(err); return;
michael@0 167 }
michael@0 168 PR_SetError(prError, err);
michael@0 169 }
michael@0 170
michael@0 171 void nss_MD_unix_map_close_error(int err)
michael@0 172 {
michael@0 173 PRErrorCode prError;
michael@0 174 switch (err) {
michael@0 175 case ETIMEDOUT: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 176 default: nss_MD_unix_map_default_error(err); return;
michael@0 177 }
michael@0 178 PR_SetError(prError, err);
michael@0 179 }
michael@0 180
michael@0 181 void nss_MD_unix_map_socket_error(int err)
michael@0 182 {
michael@0 183 PRErrorCode prError;
michael@0 184 switch (err) {
michael@0 185 case ENOMEM: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 186 default: nss_MD_unix_map_default_error(err); return;
michael@0 187 }
michael@0 188 PR_SetError(prError, err);
michael@0 189 }
michael@0 190
michael@0 191 void nss_MD_unix_map_socketavailable_error(int err)
michael@0 192 {
michael@0 193 PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err);
michael@0 194 }
michael@0 195
michael@0 196 void nss_MD_unix_map_recv_error(int err)
michael@0 197 {
michael@0 198 nss_MD_unix_map_default_error(err);
michael@0 199 }
michael@0 200
michael@0 201 void nss_MD_unix_map_recvfrom_error(int err)
michael@0 202 {
michael@0 203 nss_MD_unix_map_default_error(err);
michael@0 204 }
michael@0 205
michael@0 206 void nss_MD_unix_map_send_error(int err)
michael@0 207 {
michael@0 208 nss_MD_unix_map_default_error(err);
michael@0 209 }
michael@0 210
michael@0 211 void nss_MD_unix_map_sendto_error(int err)
michael@0 212 {
michael@0 213 nss_MD_unix_map_default_error(err);
michael@0 214 }
michael@0 215
michael@0 216 void nss_MD_unix_map_writev_error(int err)
michael@0 217 {
michael@0 218 nss_MD_unix_map_default_error(err);
michael@0 219 }
michael@0 220
michael@0 221 void nss_MD_unix_map_accept_error(int err)
michael@0 222 {
michael@0 223 PRErrorCode prError;
michael@0 224 switch (err) {
michael@0 225 case ENODEV: prError = PR_NOT_TCP_SOCKET_ERROR; break;
michael@0 226 default: nss_MD_unix_map_default_error(err); return;
michael@0 227 }
michael@0 228 PR_SetError(prError, err);
michael@0 229 }
michael@0 230
michael@0 231 void nss_MD_unix_map_connect_error(int err)
michael@0 232 {
michael@0 233 PRErrorCode prError;
michael@0 234 switch (err) {
michael@0 235 case EACCES: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 236 #if defined(UNIXWARE) || defined(SNI) || defined(NEC)
michael@0 237 /*
michael@0 238 * On some platforms, if we connect to a port on the local host
michael@0 239 * (the loopback address) that no process is listening on, we get
michael@0 240 * EIO instead of ECONNREFUSED.
michael@0 241 */
michael@0 242 case EIO: prError = PR_CONNECT_REFUSED_ERROR; break;
michael@0 243 #endif
michael@0 244 case ELOOP: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 245 case ENOENT: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 246 case ENXIO: prError = PR_IO_ERROR; break;
michael@0 247 default: nss_MD_unix_map_default_error(err); return;
michael@0 248 }
michael@0 249 PR_SetError(prError, err);
michael@0 250 }
michael@0 251
michael@0 252 void nss_MD_unix_map_bind_error(int err)
michael@0 253 {
michael@0 254 PRErrorCode prError;
michael@0 255 switch (err) {
michael@0 256 case EINVAL: prError = PR_SOCKET_ADDRESS_IS_BOUND_ERROR; break;
michael@0 257 /*
michael@0 258 * UNIX domain sockets are not supported in NSPR
michael@0 259 */
michael@0 260 case EIO: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 261 case EISDIR: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 262 case ELOOP: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 263 case ENOENT: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 264 case ENOTDIR: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 265 case EROFS: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 266 default: nss_MD_unix_map_default_error(err); return;
michael@0 267 }
michael@0 268 PR_SetError(prError, err);
michael@0 269 }
michael@0 270
michael@0 271 void nss_MD_unix_map_listen_error(int err)
michael@0 272 {
michael@0 273 nss_MD_unix_map_default_error(err);
michael@0 274 }
michael@0 275
michael@0 276 void nss_MD_unix_map_shutdown_error(int err)
michael@0 277 {
michael@0 278 nss_MD_unix_map_default_error(err);
michael@0 279 }
michael@0 280
michael@0 281 void nss_MD_unix_map_socketpair_error(int err)
michael@0 282 {
michael@0 283 PRErrorCode prError;
michael@0 284 switch (err) {
michael@0 285 case ENOMEM: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 286 default: nss_MD_unix_map_default_error(err); return;
michael@0 287 }
michael@0 288 PR_SetError(prError, err);
michael@0 289 }
michael@0 290
michael@0 291 void nss_MD_unix_map_getsockname_error(int err)
michael@0 292 {
michael@0 293 PRErrorCode prError;
michael@0 294 switch (err) {
michael@0 295 case ENOMEM: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 296 default: nss_MD_unix_map_default_error(err); return;
michael@0 297 }
michael@0 298 PR_SetError(prError, err);
michael@0 299 }
michael@0 300
michael@0 301 void nss_MD_unix_map_getpeername_error(int err)
michael@0 302 {
michael@0 303 PRErrorCode prError;
michael@0 304
michael@0 305 switch (err) {
michael@0 306 case ENOMEM: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 307 default: nss_MD_unix_map_default_error(err); return;
michael@0 308 }
michael@0 309 PR_SetError(prError, err);
michael@0 310 }
michael@0 311
michael@0 312 void nss_MD_unix_map_getsockopt_error(int err)
michael@0 313 {
michael@0 314 PRErrorCode prError;
michael@0 315 switch (err) {
michael@0 316 case EINVAL: prError = PR_BUFFER_OVERFLOW_ERROR; break;
michael@0 317 case ENOMEM: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 318 default: nss_MD_unix_map_default_error(err); return;
michael@0 319 }
michael@0 320 PR_SetError(prError, err);
michael@0 321 }
michael@0 322
michael@0 323 void nss_MD_unix_map_setsockopt_error(int err)
michael@0 324 {
michael@0 325 PRErrorCode prError;
michael@0 326 switch (err) {
michael@0 327 case EINVAL: prError = PR_BUFFER_OVERFLOW_ERROR; break;
michael@0 328 case ENOMEM: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 329 default: nss_MD_unix_map_default_error(err); return;
michael@0 330 }
michael@0 331 PR_SetError(prError, err);
michael@0 332 }
michael@0 333
michael@0 334 void nss_MD_unix_map_open_error(int err)
michael@0 335 {
michael@0 336 PRErrorCode prError;
michael@0 337 switch (err) {
michael@0 338 case EAGAIN: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 339 case EBUSY: prError = PR_IO_ERROR; break;
michael@0 340 case ENODEV: prError = PR_FILE_NOT_FOUND_ERROR; break;
michael@0 341 case ENOMEM: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 342 case ETIMEDOUT: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 343 default: nss_MD_unix_map_default_error(err); return;
michael@0 344 }
michael@0 345 PR_SetError(prError, err);
michael@0 346 }
michael@0 347
michael@0 348 void nss_MD_unix_map_mmap_error(int err)
michael@0 349 {
michael@0 350 PRErrorCode prError;
michael@0 351 switch (err) {
michael@0 352 case EAGAIN: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 353 case EMFILE: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 354 case ENODEV: prError = PR_OPERATION_NOT_SUPPORTED_ERROR; break;
michael@0 355 case ENXIO: prError = PR_INVALID_ARGUMENT_ERROR; break;
michael@0 356 default: nss_MD_unix_map_default_error(err); return;
michael@0 357 }
michael@0 358 PR_SetError(prError, err);
michael@0 359 }
michael@0 360
michael@0 361 void nss_MD_unix_map_gethostname_error(int err)
michael@0 362 {
michael@0 363 nss_MD_unix_map_default_error(err);
michael@0 364 }
michael@0 365
michael@0 366 void nss_MD_unix_map_select_error(int err)
michael@0 367 {
michael@0 368 nss_MD_unix_map_default_error(err);
michael@0 369 }
michael@0 370
michael@0 371 #ifdef _PR_POLL_AVAILABLE
michael@0 372 void nss_MD_unix_map_poll_error(int err)
michael@0 373 {
michael@0 374 PRErrorCode prError;
michael@0 375
michael@0 376 switch (err) {
michael@0 377 case EAGAIN: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 378 default: nss_MD_unix_map_default_error(err); return;
michael@0 379 }
michael@0 380 PR_SetError(prError, err);
michael@0 381 }
michael@0 382
michael@0 383 void nss_MD_unix_map_poll_revents_error(int err)
michael@0 384 {
michael@0 385 if (err & POLLNVAL)
michael@0 386 PR_SetError(PR_BAD_DESCRIPTOR_ERROR, EBADF);
michael@0 387 else if (err & POLLHUP)
michael@0 388 PR_SetError(PR_CONNECT_RESET_ERROR, EPIPE);
michael@0 389 else if (err & POLLERR)
michael@0 390 PR_SetError(PR_IO_ERROR, EIO);
michael@0 391 else
michael@0 392 PR_SetError(PR_UNKNOWN_ERROR, err);
michael@0 393 }
michael@0 394 #endif /* _PR_POLL_AVAILABLE */
michael@0 395
michael@0 396
michael@0 397 void nss_MD_unix_map_flock_error(int err)
michael@0 398 {
michael@0 399 PRErrorCode prError;
michael@0 400 switch (err) {
michael@0 401 case EINVAL: prError = PR_BAD_DESCRIPTOR_ERROR; break;
michael@0 402 case EWOULDBLOCK: prError = PR_FILE_IS_LOCKED_ERROR; break;
michael@0 403 default: nss_MD_unix_map_default_error(err); return;
michael@0 404 }
michael@0 405 PR_SetError(prError, err);
michael@0 406 }
michael@0 407
michael@0 408 void nss_MD_unix_map_lockf_error(int err)
michael@0 409 {
michael@0 410 PRErrorCode prError;
michael@0 411 switch (err) {
michael@0 412 case EACCES: prError = PR_FILE_IS_LOCKED_ERROR; break;
michael@0 413 case EDEADLK: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 414 default: nss_MD_unix_map_default_error(err); return;
michael@0 415 }
michael@0 416 PR_SetError(prError, err);
michael@0 417 }
michael@0 418
michael@0 419 #ifdef HPUX11
michael@0 420 void nss_MD_hpux_map_sendfile_error(int err)
michael@0 421 {
michael@0 422 nss_MD_unix_map_default_error(err);
michael@0 423 }
michael@0 424 #endif /* HPUX11 */
michael@0 425
michael@0 426
michael@0 427 void nss_MD_unix_map_default_error(int err)
michael@0 428 {
michael@0 429 PRErrorCode prError;
michael@0 430 switch (err ) {
michael@0 431 case EACCES: prError = PR_NO_ACCESS_RIGHTS_ERROR; break;
michael@0 432 case EADDRINUSE: prError = PR_ADDRESS_IN_USE_ERROR; break;
michael@0 433 case EADDRNOTAVAIL: prError = PR_ADDRESS_NOT_AVAILABLE_ERROR; break;
michael@0 434 case EAFNOSUPPORT: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 435 case EAGAIN: prError = PR_WOULD_BLOCK_ERROR; break;
michael@0 436 /*
michael@0 437 * On QNX and Neutrino, EALREADY is defined as EBUSY.
michael@0 438 */
michael@0 439 #if EALREADY != EBUSY
michael@0 440 case EALREADY: prError = PR_ALREADY_INITIATED_ERROR; break;
michael@0 441 #endif
michael@0 442 case EBADF: prError = PR_BAD_DESCRIPTOR_ERROR; break;
michael@0 443 #ifdef EBADMSG
michael@0 444 case EBADMSG: prError = PR_IO_ERROR; break;
michael@0 445 #endif
michael@0 446 case EBUSY: prError = PR_FILESYSTEM_MOUNTED_ERROR; break;
michael@0 447 case ECONNREFUSED: prError = PR_CONNECT_REFUSED_ERROR; break;
michael@0 448 case ECONNRESET: prError = PR_CONNECT_RESET_ERROR; break;
michael@0 449 case EDEADLK: prError = PR_DEADLOCK_ERROR; break;
michael@0 450 #ifdef EDIRCORRUPTED
michael@0 451 case EDIRCORRUPTED: prError = PR_DIRECTORY_CORRUPTED_ERROR; break;
michael@0 452 #endif
michael@0 453 #ifdef EDQUOT
michael@0 454 case EDQUOT: prError = PR_NO_DEVICE_SPACE_ERROR; break;
michael@0 455 #endif
michael@0 456 case EEXIST: prError = PR_FILE_EXISTS_ERROR; break;
michael@0 457 case EFAULT: prError = PR_ACCESS_FAULT_ERROR; break;
michael@0 458 case EFBIG: prError = PR_FILE_TOO_BIG_ERROR; break;
michael@0 459 case EINPROGRESS: prError = PR_IN_PROGRESS_ERROR; break;
michael@0 460 case EINTR: prError = PR_PENDING_INTERRUPT_ERROR; break;
michael@0 461 case EINVAL: prError = PR_INVALID_ARGUMENT_ERROR; break;
michael@0 462 case EIO: prError = PR_IO_ERROR; break;
michael@0 463 case EISCONN: prError = PR_IS_CONNECTED_ERROR; break;
michael@0 464 case EISDIR: prError = PR_IS_DIRECTORY_ERROR; break;
michael@0 465 case ELOOP: prError = PR_LOOP_ERROR; break;
michael@0 466 case EMFILE: prError = PR_PROC_DESC_TABLE_FULL_ERROR; break;
michael@0 467 case EMLINK: prError = PR_MAX_DIRECTORY_ENTRIES_ERROR; break;
michael@0 468 case EMSGSIZE: prError = PR_INVALID_ARGUMENT_ERROR; break;
michael@0 469 #ifdef EMULTIHOP
michael@0 470 case EMULTIHOP: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 471 #endif
michael@0 472 case ENAMETOOLONG: prError = PR_NAME_TOO_LONG_ERROR; break;
michael@0 473 case ENETUNREACH: prError = PR_NETWORK_UNREACHABLE_ERROR; break;
michael@0 474 case ENFILE: prError = PR_SYS_DESC_TABLE_FULL_ERROR; break;
michael@0 475 #if !defined(SCO)
michael@0 476 case ENOBUFS: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 477 #endif
michael@0 478 case ENODEV: prError = PR_FILE_NOT_FOUND_ERROR; break;
michael@0 479 case ENOENT: prError = PR_FILE_NOT_FOUND_ERROR; break;
michael@0 480 case ENOLCK: prError = PR_FILE_IS_LOCKED_ERROR; break;
michael@0 481 #ifdef ENOLINK
michael@0 482 case ENOLINK: prError = PR_REMOTE_FILE_ERROR; break;
michael@0 483 #endif
michael@0 484 case ENOMEM: prError = PR_OUT_OF_MEMORY_ERROR; break;
michael@0 485 case ENOPROTOOPT: prError = PR_INVALID_ARGUMENT_ERROR; break;
michael@0 486 case ENOSPC: prError = PR_NO_DEVICE_SPACE_ERROR; break;
michael@0 487 #ifdef ENOSR
michael@0 488 case ENOSR: prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
michael@0 489 #endif
michael@0 490 case ENOTCONN: prError = PR_NOT_CONNECTED_ERROR; break;
michael@0 491 case ENOTDIR: prError = PR_NOT_DIRECTORY_ERROR; break;
michael@0 492 case ENOTSOCK: prError = PR_NOT_SOCKET_ERROR; break;
michael@0 493 case ENXIO: prError = PR_FILE_NOT_FOUND_ERROR; break;
michael@0 494 case EOPNOTSUPP: prError = PR_NOT_TCP_SOCKET_ERROR; break;
michael@0 495 #ifdef EOVERFLOW
michael@0 496 case EOVERFLOW: prError = PR_BUFFER_OVERFLOW_ERROR; break;
michael@0 497 #endif
michael@0 498 case EPERM: prError = PR_NO_ACCESS_RIGHTS_ERROR; break;
michael@0 499 case EPIPE: prError = PR_CONNECT_RESET_ERROR; break;
michael@0 500 #ifdef EPROTO
michael@0 501 case EPROTO: prError = PR_IO_ERROR; break;
michael@0 502 #endif
michael@0 503 case EPROTONOSUPPORT: prError = PR_PROTOCOL_NOT_SUPPORTED_ERROR; break;
michael@0 504 case EPROTOTYPE: prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
michael@0 505 case ERANGE: prError = PR_INVALID_METHOD_ERROR; break;
michael@0 506 case EROFS: prError = PR_READ_ONLY_FILESYSTEM_ERROR; break;
michael@0 507 case ESPIPE: prError = PR_INVALID_METHOD_ERROR; break;
michael@0 508 case ETIMEDOUT: prError = PR_IO_TIMEOUT_ERROR; break;
michael@0 509 #if EWOULDBLOCK != EAGAIN
michael@0 510 case EWOULDBLOCK: prError = PR_WOULD_BLOCK_ERROR; break;
michael@0 511 #endif
michael@0 512 case EXDEV: prError = PR_NOT_SAME_DEVICE_ERROR; break;
michael@0 513
michael@0 514 default: prError = PR_UNKNOWN_ERROR; break;
michael@0 515 }
michael@0 516 PR_SetError(prError, err);
michael@0 517 }

mercurial