135 lines
5.5 KiB
C
135 lines
5.5 KiB
C
/*
|
|
* Copyright 2012, The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <errno.h>
|
|
#include <errno_portable.h>
|
|
|
|
#if ENAMETOOLONG==ENAMETOOLONG_PORTABLE
|
|
#error Bad build environment
|
|
#endif
|
|
|
|
static inline int mips_change_errno(int mips_errno)
|
|
{
|
|
switch (mips_errno) {
|
|
case ENAMETOOLONG: return ENAMETOOLONG_PORTABLE;
|
|
case ENOLCK: return ENOLCK_PORTABLE;
|
|
case ENOSYS: return ENOSYS_PORTABLE;
|
|
case ENOTEMPTY: return ENOTEMPTY_PORTABLE;
|
|
case ELOOP: return ELOOP_PORTABLE;
|
|
case EWOULDBLOCK: return EWOULDBLOCK_PORTABLE;
|
|
case ENOMSG: return ENOMSG_PORTABLE;
|
|
case EIDRM: return EIDRM_PORTABLE;
|
|
case ECHRNG: return ECHRNG_PORTABLE;
|
|
case EL2NSYNC: return EL2NSYNC_PORTABLE;
|
|
case EL3HLT: return EL3HLT_PORTABLE;
|
|
case EL3RST: return EL3RST_PORTABLE;
|
|
case ELNRNG: return ELNRNG_PORTABLE;
|
|
case EUNATCH: return EUNATCH_PORTABLE;
|
|
case ENOCSI: return ENOCSI_PORTABLE;
|
|
case EL2HLT: return EL2HLT_PORTABLE;
|
|
case EBADE: return EBADE_PORTABLE;
|
|
case EBADR: return EBADR_PORTABLE;
|
|
case EXFULL: return EXFULL_PORTABLE;
|
|
case ENOANO: return ENOANO_PORTABLE;
|
|
case EBADRQC: return EBADRQC_PORTABLE;
|
|
case EBADSLT: return EBADSLT_PORTABLE;
|
|
case EDEADLOCK: return EDEADLOCK_PORTABLE;
|
|
case EBFONT: return EBFONT_PORTABLE;
|
|
case ENOSTR: return ENOSTR_PORTABLE;
|
|
case ENODATA: return ENODATA_PORTABLE;
|
|
case ETIME: return ETIME_PORTABLE;
|
|
case ENOSR: return ENOSR_PORTABLE;
|
|
case ENONET: return ENONET_PORTABLE;
|
|
case ENOPKG: return ENOPKG_PORTABLE;
|
|
case EREMOTE: return EREMOTE_PORTABLE;
|
|
case ENOLINK: return ENOLINK_PORTABLE;
|
|
case EADV: return EADV_PORTABLE;
|
|
case ESRMNT: return ESRMNT_PORTABLE;
|
|
case ECOMM: return ECOMM_PORTABLE;
|
|
case EPROTO: return EPROTO_PORTABLE;
|
|
case EMULTIHOP: return EMULTIHOP_PORTABLE;
|
|
case EDOTDOT: return EDOTDOT_PORTABLE;
|
|
case EBADMSG: return EBADMSG_PORTABLE;
|
|
case EOVERFLOW: return EOVERFLOW_PORTABLE;
|
|
case ENOTUNIQ: return ENOTUNIQ_PORTABLE;
|
|
case EBADFD: return EBADFD_PORTABLE;
|
|
case EREMCHG: return EREMCHG_PORTABLE;
|
|
case ELIBACC: return ELIBACC_PORTABLE;
|
|
case ELIBBAD: return ELIBBAD_PORTABLE;
|
|
case ELIBSCN: return ELIBSCN_PORTABLE;
|
|
case ELIBMAX: return ELIBMAX_PORTABLE;
|
|
case ELIBEXEC: return ELIBEXEC_PORTABLE;
|
|
case EILSEQ: return EILSEQ_PORTABLE;
|
|
case ERESTART: return ERESTART_PORTABLE;
|
|
case ESTRPIPE: return ESTRPIPE_PORTABLE;
|
|
case EUSERS: return EUSERS_PORTABLE;
|
|
case ENOTSOCK: return ENOTSOCK_PORTABLE;
|
|
case EDESTADDRREQ: return EDESTADDRREQ_PORTABLE;
|
|
case EMSGSIZE: return EMSGSIZE_PORTABLE;
|
|
case EPROTOTYPE: return EPROTOTYPE_PORTABLE;
|
|
case ENOPROTOOPT: return ENOPROTOOPT_PORTABLE;
|
|
case EPROTONOSUPPORT: return EPROTONOSUPPORT_PORTABLE;
|
|
case ESOCKTNOSUPPORT: return ESOCKTNOSUPPORT_PORTABLE;
|
|
case EOPNOTSUPP: return EOPNOTSUPP_PORTABLE;
|
|
case EPFNOSUPPORT: return EPFNOSUPPORT_PORTABLE;
|
|
case EAFNOSUPPORT: return EAFNOSUPPORT_PORTABLE;
|
|
case EADDRINUSE: return EADDRINUSE_PORTABLE;
|
|
case EADDRNOTAVAIL: return EADDRNOTAVAIL_PORTABLE;
|
|
case ENETDOWN: return ENETDOWN_PORTABLE;
|
|
case ENETUNREACH: return ENETUNREACH_PORTABLE;
|
|
case ENETRESET: return ENETRESET_PORTABLE;
|
|
case ECONNABORTED: return ECONNABORTED_PORTABLE;
|
|
case ECONNRESET: return ECONNRESET_PORTABLE;
|
|
case ENOBUFS: return ENOBUFS_PORTABLE;
|
|
case EISCONN: return EISCONN_PORTABLE;
|
|
case ENOTCONN: return ENOTCONN_PORTABLE;
|
|
case ESHUTDOWN: return ESHUTDOWN_PORTABLE;
|
|
case ETOOMANYREFS: return ETOOMANYREFS_PORTABLE;
|
|
case ETIMEDOUT: return ETIMEDOUT_PORTABLE;
|
|
case ECONNREFUSED: return ECONNREFUSED_PORTABLE;
|
|
case EHOSTDOWN: return EHOSTDOWN_PORTABLE;
|
|
case EHOSTUNREACH: return EHOSTUNREACH_PORTABLE;
|
|
case EALREADY: return EALREADY_PORTABLE;
|
|
case EINPROGRESS: return EINPROGRESS_PORTABLE;
|
|
case ESTALE: return ESTALE_PORTABLE;
|
|
case EUCLEAN: return EUCLEAN_PORTABLE;
|
|
case ENOTNAM: return ENOTNAM_PORTABLE;
|
|
case ENAVAIL: return ENAVAIL_PORTABLE;
|
|
case EISNAM: return EISNAM_PORTABLE;
|
|
case EREMOTEIO: return EREMOTEIO_PORTABLE;
|
|
case EDQUOT: return EDQUOT_PORTABLE;
|
|
case ENOMEDIUM: return ENOMEDIUM_PORTABLE;
|
|
case EMEDIUMTYPE: return EMEDIUMTYPE_PORTABLE;
|
|
case ECANCELED: return ECANCELED_PORTABLE;
|
|
case ENOKEY: return ENOKEY_PORTABLE;
|
|
case EKEYEXPIRED: return EKEYEXPIRED_PORTABLE;
|
|
case EKEYREVOKED: return EKEYREVOKED_PORTABLE;
|
|
case EKEYREJECTED: return EKEYREJECTED_PORTABLE;
|
|
case EOWNERDEAD: return EOWNERDEAD_PORTABLE;
|
|
case ENOTRECOVERABLE: return ENOTRECOVERABLE_PORTABLE;
|
|
}
|
|
return mips_errno;
|
|
}
|
|
|
|
extern volatile int* __errno(void);
|
|
volatile int* __errno_portable()
|
|
{
|
|
/* Note that writing to static_errno will not affect the underlying system. */
|
|
static int static_errno;
|
|
static_errno = mips_change_errno(*__errno());
|
|
return &static_errno;
|
|
}
|