/* * 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 #include #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; }