15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This file essentially replicates NSPR's source for the functions that
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * map system-specific error codes to NSPR error codes.  We would use
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NSPR's functions, instead of duplicating them, but they're private.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * As long as SSL's server session cache code must do platform native I/O
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to accomplish its job, and NSPR's error mapping functions remain private,
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * this code will continue to need to be replicated.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This Source Code Form is subject to the terms of the Mozilla Public
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * License, v. 2.0. If a copy of the MPL was not distributed with this
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "primpl.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_POLL_AVAILABLE 1
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prerror.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined (__bsdi__) || defined(NTO) || defined(DARWIN) || defined(BEOS)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef _PR_POLL_AVAILABLE
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_PR_POLL_AVAILABLE)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <poll.h>
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <errno.h>
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* forward declarations. */
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_default_error(int err);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_opendir_error(int err)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_closedir_error(int err)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_BAD_DESCRIPTOR_ERROR; break;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_readdir_error(int err)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOENT:	prError = PR_NO_MORE_FILES_ERROR; break;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef EOVERFLOW
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EOVERFLOW:	prError = PR_IO_ERROR; break;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_IO_ERROR; break;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENXIO:		prError = PR_IO_ERROR; break;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_unlink_error(int err)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EPERM:		prError = PR_IS_DIRECTORY_ERROR; break;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_stat_error(int err)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ETIMEDOUT:	prError = PR_REMOTE_FILE_ERROR; break;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_fstat_error(int err)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ETIMEDOUT:	prError = PR_REMOTE_FILE_ERROR; break;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_rename_error(int err)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EEXIST:	prError = PR_DIRECTORY_NOT_EMPTY_ERROR; break;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_access_error(int err)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ETIMEDOUT:	prError = PR_REMOTE_FILE_ERROR; break;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_mkdir_error(int err)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_rmdir_error(int err)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EEXIST:	prError = PR_DIRECTORY_NOT_EMPTY_ERROR; break;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_DIRECTORY_NOT_EMPTY_ERROR; break;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ETIMEDOUT:	prError = PR_REMOTE_FILE_ERROR; break;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_read_error(int err)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_INVALID_METHOD_ERROR; break;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENXIO:		prError = PR_INVALID_ARGUMENT_ERROR; break;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_write_error(int err)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_INVALID_METHOD_ERROR; break;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENXIO:		prError = PR_INVALID_METHOD_ERROR; break;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ETIMEDOUT:	prError = PR_REMOTE_FILE_ERROR; break;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_lseek_error(int err)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_fsync_error(int err)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ETIMEDOUT:	prError = PR_REMOTE_FILE_ERROR; break;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_INVALID_METHOD_ERROR; break;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_close_error(int err)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ETIMEDOUT:	prError = PR_REMOTE_FILE_ERROR; break;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_socket_error(int err)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOMEM:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_socketavailable_error(int err)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_recv_error(int err)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_recvfrom_error(int err)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_send_error(int err)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_sendto_error(int err)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_writev_error(int err)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_accept_error(int err)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENODEV:	prError = PR_NOT_TCP_SOCKET_ERROR; break;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_connect_error(int err)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EACCES:	prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(UNIXWARE) || defined(SNI) || defined(NEC)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /*
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * On some platforms, if we connect to a port on the local host
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * (the loopback address) that no process is listening on, we get
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * EIO instead of ECONNREFUSED.
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EIO:		prError = PR_CONNECT_REFUSED_ERROR; break;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ELOOP:		prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOENT:	prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENXIO:		prError = PR_IO_ERROR; break;
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_bind_error(int err)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_SOCKET_ADDRESS_IS_BOUND_ERROR; break;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        /*
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         * UNIX domain sockets are not supported in NSPR
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         */
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EIO:		prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EISDIR:	prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ELOOP:		prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOENT:	prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOTDIR:	prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EROFS:		prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_listen_error(int err)
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_shutdown_error(int err)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_socketpair_error(int err)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOMEM:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_getsockname_error(int err)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOMEM:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_getpeername_error(int err)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOMEM:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_getsockopt_error(int err)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_BUFFER_OVERFLOW_ERROR; break;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOMEM:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_setsockopt_error(int err)
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_BUFFER_OVERFLOW_ERROR; break;
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOMEM:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_open_error(int err)
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAGAIN:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EBUSY:		prError = PR_IO_ERROR; break;
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENODEV:	prError = PR_FILE_NOT_FOUND_ERROR; break;
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOMEM:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ETIMEDOUT:	prError = PR_REMOTE_FILE_ERROR; break;
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_mmap_error(int err)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAGAIN:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EMFILE:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENODEV:	prError = PR_OPERATION_NOT_SUPPORTED_ERROR; break;
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENXIO:		prError = PR_INVALID_ARGUMENT_ERROR; break;
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_gethostname_error(int err)
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_select_error(int err)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _PR_POLL_AVAILABLE
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_poll_error(int err)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAGAIN:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_poll_revents_error(int err)
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (err & POLLNVAL)
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PR_SetError(PR_BAD_DESCRIPTOR_ERROR, EBADF);
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else if (err & POLLHUP)
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PR_SetError(PR_CONNECT_RESET_ERROR, EPIPE);
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else if (err & POLLERR)
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PR_SetError(PR_IO_ERROR, EIO);
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PR_SetError(PR_UNKNOWN_ERROR, err);
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* _PR_POLL_AVAILABLE */
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_flock_error(int err)
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_BAD_DESCRIPTOR_ERROR; break;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EWOULDBLOCK:	prError = PR_FILE_IS_LOCKED_ERROR; break;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_lockf_error(int err)
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err) {
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EACCES:	prError = PR_FILE_IS_LOCKED_ERROR; break;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EDEADLK:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		nss_MD_unix_map_default_error(err); return;
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HPUX11
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_hpux_map_sendfile_error(int err)
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    nss_MD_unix_map_default_error(err);
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HPUX11 */
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void nss_MD_unix_map_default_error(int err)
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRErrorCode prError;
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (err ) {
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EACCES:	prError = PR_NO_ACCESS_RIGHTS_ERROR; break;
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EADDRINUSE:	prError = PR_ADDRESS_IN_USE_ERROR; break;
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EADDRNOTAVAIL:	prError = PR_ADDRESS_NOT_AVAILABLE_ERROR; break;
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAFNOSUPPORT:	prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAGAIN:	prError = PR_WOULD_BLOCK_ERROR; break;
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /*
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * On QNX and Neutrino, EALREADY is defined as EBUSY.
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if EALREADY != EBUSY
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EALREADY:	prError = PR_ALREADY_INITIATED_ERROR; break;
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EBADF:		prError = PR_BAD_DESCRIPTOR_ERROR; break;
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef EBADMSG
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EBADMSG:	prError = PR_IO_ERROR; break;
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EBUSY:		prError = PR_FILESYSTEM_MOUNTED_ERROR; break;
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ECONNREFUSED:	prError = PR_CONNECT_REFUSED_ERROR; break;
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ECONNRESET:	prError = PR_CONNECT_RESET_ERROR; break;
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EDEADLK:	prError = PR_DEADLOCK_ERROR; break;
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef EDIRCORRUPTED
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EDIRCORRUPTED:	prError = PR_DIRECTORY_CORRUPTED_ERROR; break;
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef EDQUOT
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EDQUOT:	prError = PR_NO_DEVICE_SPACE_ERROR; break;
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EEXIST:	prError = PR_FILE_EXISTS_ERROR; break;
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EFAULT:	prError = PR_ACCESS_FAULT_ERROR; break;
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EFBIG:		prError = PR_FILE_TOO_BIG_ERROR; break;
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINPROGRESS:	prError = PR_IN_PROGRESS_ERROR; break;
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINTR:		prError = PR_PENDING_INTERRUPT_ERROR; break;
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EINVAL:	prError = PR_INVALID_ARGUMENT_ERROR; break;
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EIO:		prError = PR_IO_ERROR; break;
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EISCONN:	prError = PR_IS_CONNECTED_ERROR; break;
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EISDIR:	prError = PR_IS_DIRECTORY_ERROR; break;
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ELOOP:		prError = PR_LOOP_ERROR; break;
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EMFILE:	prError = PR_PROC_DESC_TABLE_FULL_ERROR; break;
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EMLINK:	prError = PR_MAX_DIRECTORY_ENTRIES_ERROR; break;
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EMSGSIZE:	prError = PR_INVALID_ARGUMENT_ERROR; break;
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef EMULTIHOP
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EMULTIHOP:	prError = PR_REMOTE_FILE_ERROR; break;
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENAMETOOLONG:	prError = PR_NAME_TOO_LONG_ERROR; break;
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENETUNREACH:	prError = PR_NETWORK_UNREACHABLE_ERROR; break;
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENFILE:	prError = PR_SYS_DESC_TABLE_FULL_ERROR; break;
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(SCO)
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOBUFS:	prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENODEV:	prError = PR_FILE_NOT_FOUND_ERROR; break;
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOENT:	prError = PR_FILE_NOT_FOUND_ERROR; break;
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOLCK:	prError = PR_FILE_IS_LOCKED_ERROR; break;
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef ENOLINK
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOLINK:	prError = PR_REMOTE_FILE_ERROR; break;
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOMEM:	prError = PR_OUT_OF_MEMORY_ERROR; break;
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOPROTOOPT:	prError = PR_INVALID_ARGUMENT_ERROR; break;
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOSPC:	prError = PR_NO_DEVICE_SPACE_ERROR; break;
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef ENOSR
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOSR:		prError = PR_INSUFFICIENT_RESOURCES_ERROR; break;
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOTCONN:	prError = PR_NOT_CONNECTED_ERROR; break;
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOTDIR:	prError = PR_NOT_DIRECTORY_ERROR; break;
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENOTSOCK:	prError = PR_NOT_SOCKET_ERROR; break;
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ENXIO:		prError = PR_FILE_NOT_FOUND_ERROR; break;
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EOPNOTSUPP:	prError = PR_NOT_TCP_SOCKET_ERROR; break;
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef EOVERFLOW
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EOVERFLOW:	prError = PR_BUFFER_OVERFLOW_ERROR; break;
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EPERM:		prError = PR_NO_ACCESS_RIGHTS_ERROR; break;
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EPIPE:		prError = PR_CONNECT_RESET_ERROR; break;
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef EPROTO
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EPROTO:	prError = PR_IO_ERROR; break;
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EPROTONOSUPPORT: prError = PR_PROTOCOL_NOT_SUPPORTED_ERROR; break;
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EPROTOTYPE:	prError = PR_ADDRESS_NOT_SUPPORTED_ERROR; break;
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ERANGE:	prError = PR_INVALID_METHOD_ERROR; break;
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EROFS:		prError = PR_READ_ONLY_FILESYSTEM_ERROR; break;
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ESPIPE:	prError = PR_INVALID_METHOD_ERROR; break;
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case ETIMEDOUT:	prError = PR_IO_TIMEOUT_ERROR; break;
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if EWOULDBLOCK != EAGAIN
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EWOULDBLOCK:	prError = PR_WOULD_BLOCK_ERROR; break;
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EXDEV:		prError = PR_NOT_SAME_DEVICE_ERROR; break;
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:		prError = PR_UNKNOWN_ERROR; break;
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_SetError(prError, err);
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
518