mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-09 09:20:15 +01:00
338 lines
9.7 KiB
C
338 lines
9.7 KiB
C
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is Mozilla Communicator client code, released
|
|
* March 31, 1998.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Netscape Communications Corporation.
|
|
* Portions created by the Initial Developer are Copyright (C) 1998-1999
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
/*
|
|
* Utilities for manageing the relationship between NSPR errors and
|
|
* OS (errno-style) errors.
|
|
*
|
|
* The overall strategy used is to map NSPR errors into OS errors.
|
|
*/
|
|
|
|
#include "ldappr-int.h"
|
|
|
|
void
|
|
prldap_set_system_errno( int oserrno )
|
|
{
|
|
PR_SetError( PR_UNKNOWN_ERROR, oserrno );
|
|
}
|
|
|
|
|
|
int
|
|
prldap_get_system_errno( void )
|
|
{
|
|
return( PR_GetOSError());
|
|
}
|
|
|
|
/*
|
|
* Retrieve the NSPR error number, convert to a system error code, and return
|
|
* the result.
|
|
*/
|
|
struct prldap_errormap_entry {
|
|
PRInt32 erm_nspr; /* NSPR error code */
|
|
int erm_system; /* corresponding system error code */
|
|
};
|
|
|
|
/* XXX: not sure if this extra mapping for Windows is good or correct */
|
|
#ifdef _WINDOWS
|
|
#ifndef ENOTSUP
|
|
#define ENOTSUP -1
|
|
#endif
|
|
#ifndef ETIMEDOUT
|
|
#define ETIMEDOUT WSAETIMEDOUT
|
|
#endif
|
|
#ifndef EADDRNOTAVAIL
|
|
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
|
|
#endif
|
|
#ifndef EAFNOSUPPORT
|
|
#define EAFNOSUPPORT WSAEAFNOSUPPORT
|
|
#endif
|
|
#ifndef EISCONN
|
|
#define EISCONN WSAEISCONN
|
|
#endif
|
|
#ifndef EADDRINUSE
|
|
#define EADDRINUSE WSAEADDRINUSE
|
|
#endif
|
|
#ifndef ECONNREFUSED
|
|
#define ECONNREFUSED WSAECONNREFUSED
|
|
#endif
|
|
#ifndef EHOSTUNREACH
|
|
#define EHOSTUNREACH WSAEHOSTUNREACH
|
|
#endif
|
|
#ifndef ENOTCONN
|
|
#define ENOTCONN WSAENOTCONN
|
|
#endif
|
|
#ifndef ENOTSOCK
|
|
#define ENOTSOCK WSAENOTSOCK
|
|
#endif
|
|
#ifndef EPROTOTYPE
|
|
#define EPROTOTYPE WSAEPROTOTYPE
|
|
#endif
|
|
#ifndef EOPNOTSUPP
|
|
#define EOPNOTSUPP WSAEOPNOTSUPP
|
|
#endif
|
|
#ifndef EPROTONOSUPPORT
|
|
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
|
|
#endif
|
|
#ifndef EOVERFLOW
|
|
#define EOVERFLOW -1
|
|
#endif
|
|
#ifndef ECONNRESET
|
|
#define ECONNRESET WSAECONNRESET
|
|
#endif
|
|
#ifndef ELOOP
|
|
#define ELOOP WSAELOOP
|
|
#endif
|
|
#ifndef ENOTBLK
|
|
#define ENOTBLK -1
|
|
#endif
|
|
#ifndef ETXTBSY
|
|
#define ETXTBSY -1
|
|
#endif
|
|
#ifndef ENETDOWN
|
|
#define ENETDOWN WSAENETDOWN
|
|
#endif
|
|
#ifndef ESHUTDOWN
|
|
#define ESHUTDOWN WSAESHUTDOWN
|
|
#endif
|
|
#ifndef ECONNABORTED
|
|
#define ECONNABORTED WSAECONNABORTED
|
|
#endif
|
|
#endif /* _WINDOWS */
|
|
|
|
#if defined(macintosh)
|
|
/*
|
|
* Some Unix error defs. Under CW 7, we can't define OTUNIXERRORS because
|
|
* it generates many conflicts with errno.h. Define what we need here.
|
|
* These need to be in sync with OpenTransport.h
|
|
*/
|
|
#define EWOULDBLOCK 35
|
|
#define ENOTSOCK 38
|
|
#define EPROTOTYPE 41
|
|
#define EPROTONOSUPPORT 43
|
|
#define EOPNOTSUPP 45
|
|
#define EADDRINUSE 48
|
|
#define EADDRNOTAVAIL 49
|
|
#define ENETDOWN 50
|
|
#define ECONNABORTED 53
|
|
#define ECONNRESET 54
|
|
#define EISCONN 56
|
|
#define ENOTCONN 57
|
|
#define ESHUTDOWN 58
|
|
#define ETIMEDOUT 60
|
|
#define ECONNREFUSED 61
|
|
#define EHOSTUNREACH 65
|
|
#define EAFNOSUPPORT -1
|
|
#define ELOOP -1
|
|
#define ENOTBLK -1
|
|
#define ENOTSUP -1
|
|
#define EOVERFLOW -1
|
|
#define ETXTBSY -1
|
|
#endif /* macintosh */
|
|
|
|
#ifdef XP_OS2
|
|
#ifdef XP_OS2_EMX
|
|
#define SOCBASEERR 0
|
|
#endif
|
|
#ifndef ENOTSUP
|
|
#define ENOTSUP -1
|
|
#endif
|
|
#ifndef EOVERFLOW
|
|
#define EOVERFLOW -1
|
|
#endif
|
|
#ifndef EDEADLOCK
|
|
#define EDEADLOCK -1
|
|
#endif
|
|
#ifndef EFAULT
|
|
#define EFAULT SOCEFAULT
|
|
#endif
|
|
#ifndef EPIPE
|
|
#define EPIPE SOCEPIPE
|
|
#endif
|
|
#ifndef EIO
|
|
#define EIO (SOCBASEERR+5)
|
|
#endif
|
|
#ifndef EDEADLK
|
|
#define EDEADLK (SOCBASEERR+11)
|
|
#endif
|
|
#ifndef ENOTBLK
|
|
#define ENOTBLK (SOCBASEERR+15)
|
|
#endif
|
|
#ifndef EBUSY
|
|
#define EBUSY (SOCBASEERR+16)
|
|
#endif
|
|
#ifndef ENOTDIR
|
|
#define ENOTDIR (SOCBASEERR+20)
|
|
#endif
|
|
#ifndef EISDIR
|
|
#define EISDIR (SOCBASEERR+21)
|
|
#endif
|
|
#ifndef ENFILE
|
|
#define ENFILE (SOCBASEERR+23)
|
|
#endif
|
|
#ifndef ETXTBSY
|
|
#define ETXTBSY (SOCBASEERR+26)
|
|
#endif
|
|
#ifndef EFBIG
|
|
#define EFBIG (SOCBASEERR+27)
|
|
#endif
|
|
#ifndef ESPIPE
|
|
#define ESPIPE (SOCBASEERR+29)
|
|
#endif
|
|
#ifndef EROFS
|
|
#define EROFS (SOCBASEERR+30)
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef BEOS
|
|
#define ENOTSUP -1
|
|
#define ENOTBLK -1
|
|
#define ETXTBSY -1
|
|
#endif
|
|
|
|
#if defined(BSDI) || defined(OPENBSD) || defined (NETBSD)
|
|
#define ENOTSUP -1
|
|
#endif
|
|
|
|
#if defined(OSF1) || defined(BSDI) || defined(VMS) || defined(OPENBSD)
|
|
#define EOVERFLOW -1
|
|
#endif
|
|
|
|
#if defined(__hpux) || defined(_AIX) || defined(OSF1) || defined(DARWIN) || \
|
|
defined(BEOS) || defined(FREEBSD) || defined(BSDI) || defined(VMS) || \
|
|
defined(OPENBSD) || defined(NETBSD)
|
|
#define EDEADLOCK -1
|
|
#endif
|
|
|
|
/* XXX: need to verify that the -1 entries are correct (no mapping) */
|
|
static struct prldap_errormap_entry prldap_errormap[] = {
|
|
{ PR_OUT_OF_MEMORY_ERROR, ENOMEM },
|
|
{ PR_BAD_DESCRIPTOR_ERROR, EBADF },
|
|
{ PR_WOULD_BLOCK_ERROR, EAGAIN },
|
|
{ PR_ACCESS_FAULT_ERROR, EFAULT },
|
|
{ PR_INVALID_METHOD_ERROR, EINVAL }, /* XXX: correct mapping ? */
|
|
{ PR_ILLEGAL_ACCESS_ERROR, EACCES }, /* XXX: correct mapping ? */
|
|
{ PR_UNKNOWN_ERROR, -1 },
|
|
{ PR_PENDING_INTERRUPT_ERROR, -1 },
|
|
{ PR_NOT_IMPLEMENTED_ERROR, ENOTSUP },
|
|
{ PR_IO_ERROR, EIO },
|
|
{ PR_IO_TIMEOUT_ERROR, ETIMEDOUT }, /* XXX: correct mapping ? */
|
|
{ PR_IO_PENDING_ERROR, -1 },
|
|
{ PR_DIRECTORY_OPEN_ERROR, ENOTDIR },
|
|
{ PR_INVALID_ARGUMENT_ERROR, EINVAL },
|
|
{ PR_ADDRESS_NOT_AVAILABLE_ERROR, EADDRNOTAVAIL },
|
|
{ PR_ADDRESS_NOT_SUPPORTED_ERROR, EAFNOSUPPORT },
|
|
{ PR_IS_CONNECTED_ERROR, EISCONN },
|
|
{ PR_BAD_ADDRESS_ERROR, EFAULT }, /* XXX: correct mapping ? */
|
|
{ PR_ADDRESS_IN_USE_ERROR, EADDRINUSE },
|
|
{ PR_CONNECT_REFUSED_ERROR, ECONNREFUSED },
|
|
{ PR_NETWORK_UNREACHABLE_ERROR, EHOSTUNREACH },
|
|
{ PR_CONNECT_TIMEOUT_ERROR, ETIMEDOUT },
|
|
{ PR_NOT_CONNECTED_ERROR, ENOTCONN },
|
|
{ PR_LOAD_LIBRARY_ERROR, -1 },
|
|
{ PR_UNLOAD_LIBRARY_ERROR, -1 },
|
|
{ PR_FIND_SYMBOL_ERROR, -1 },
|
|
{ PR_INSUFFICIENT_RESOURCES_ERROR, -1 },
|
|
{ PR_DIRECTORY_LOOKUP_ERROR, EHOSTUNREACH },/* an approximation */
|
|
{ PR_TPD_RANGE_ERROR, -1 },
|
|
{ PR_PROC_DESC_TABLE_FULL_ERROR, -1 },
|
|
{ PR_SYS_DESC_TABLE_FULL_ERROR, -1 },
|
|
{ PR_NOT_SOCKET_ERROR, ENOTSOCK },
|
|
{ PR_NOT_TCP_SOCKET_ERROR, EPROTOTYPE },
|
|
{ PR_SOCKET_ADDRESS_IS_BOUND_ERROR, -1 },
|
|
{ PR_NO_ACCESS_RIGHTS_ERROR, EACCES }, /* XXX: correct mapping ? */
|
|
{ PR_OPERATION_NOT_SUPPORTED_ERROR, EOPNOTSUPP },
|
|
{ PR_PROTOCOL_NOT_SUPPORTED_ERROR, EPROTONOSUPPORT },
|
|
{ PR_REMOTE_FILE_ERROR, -1 },
|
|
{ PR_BUFFER_OVERFLOW_ERROR, EOVERFLOW },
|
|
{ PR_CONNECT_RESET_ERROR, ECONNRESET },
|
|
{ PR_RANGE_ERROR, ERANGE },
|
|
{ PR_DEADLOCK_ERROR, EDEADLK },
|
|
{ PR_FILE_IS_LOCKED_ERROR, EDEADLOCK }, /* XXX: correct mapping ? */
|
|
{ PR_FILE_TOO_BIG_ERROR, EFBIG },
|
|
{ PR_NO_DEVICE_SPACE_ERROR, ENOSPC },
|
|
{ PR_PIPE_ERROR, EPIPE },
|
|
{ PR_NO_SEEK_DEVICE_ERROR, ESPIPE },
|
|
{ PR_IS_DIRECTORY_ERROR, EISDIR },
|
|
{ PR_LOOP_ERROR, ELOOP },
|
|
{ PR_NAME_TOO_LONG_ERROR, ENAMETOOLONG },
|
|
{ PR_FILE_NOT_FOUND_ERROR, ENOENT },
|
|
{ PR_NOT_DIRECTORY_ERROR, ENOTDIR },
|
|
{ PR_READ_ONLY_FILESYSTEM_ERROR, EROFS },
|
|
{ PR_DIRECTORY_NOT_EMPTY_ERROR, ENOTEMPTY },
|
|
{ PR_FILESYSTEM_MOUNTED_ERROR, EBUSY },
|
|
{ PR_NOT_SAME_DEVICE_ERROR, EXDEV },
|
|
{ PR_DIRECTORY_CORRUPTED_ERROR, -1 },
|
|
{ PR_FILE_EXISTS_ERROR, EEXIST },
|
|
{ PR_MAX_DIRECTORY_ENTRIES_ERROR, -1 },
|
|
{ PR_INVALID_DEVICE_STATE_ERROR, ENOTBLK }, /* XXX: correct mapping ? */
|
|
{ PR_DEVICE_IS_LOCKED_ERROR, -2 },
|
|
{ PR_NO_MORE_FILES_ERROR, ENFILE },
|
|
{ PR_END_OF_FILE_ERROR, -1 },
|
|
{ PR_FILE_SEEK_ERROR, ESPIPE }, /* XXX: correct mapping ? */
|
|
{ PR_FILE_IS_BUSY_ERROR, ETXTBSY },
|
|
{ PR_OPERATION_ABORTED_ERROR, -1 },
|
|
{ PR_IN_PROGRESS_ERROR, -1 },
|
|
{ PR_ALREADY_INITIATED_ERROR, -1 },
|
|
{ PR_GROUP_EMPTY_ERROR, -1 },
|
|
{ PR_INVALID_STATE_ERROR, -1 },
|
|
{ PR_NETWORK_DOWN_ERROR, ENETDOWN },
|
|
{ PR_SOCKET_SHUTDOWN_ERROR, ESHUTDOWN },
|
|
{ PR_CONNECT_ABORTED_ERROR, ECONNABORTED },
|
|
{ PR_HOST_UNREACHABLE_ERROR, EHOSTUNREACH },
|
|
{ PR_MAX_ERROR, -1 },
|
|
};
|
|
|
|
|
|
int
|
|
prldap_prerr2errno( void )
|
|
{
|
|
int oserr, i;
|
|
PRInt32 nsprerr;
|
|
|
|
nsprerr = PR_GetError();
|
|
|
|
oserr = -1; /* unknown */
|
|
for ( i = 0; prldap_errormap[i].erm_nspr != PR_MAX_ERROR; ++i ) {
|
|
if ( prldap_errormap[i].erm_nspr == nsprerr ) {
|
|
oserr = prldap_errormap[i].erm_system;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return( oserr );
|
|
}
|