1 /* 2 * Copyright 2012, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <errno.h> 18 #include <errno_portable.h> 19 20 #if ENAMETOOLONG==ENAMETOOLONG_PORTABLE 21 #error Bad build environment 22 #endif 23 24 static inline int mips_change_errno(int mips_errno) 25 { 26 switch (mips_errno) { 27 case ENAMETOOLONG: return ENAMETOOLONG_PORTABLE; 28 case ENOLCK: return ENOLCK_PORTABLE; 29 case ENOSYS: return ENOSYS_PORTABLE; 30 case ENOTEMPTY: return ENOTEMPTY_PORTABLE; 31 case ELOOP: return ELOOP_PORTABLE; 32 case EWOULDBLOCK: return EWOULDBLOCK_PORTABLE; 33 case ENOMSG: return ENOMSG_PORTABLE; 34 case EIDRM: return EIDRM_PORTABLE; 35 case ECHRNG: return ECHRNG_PORTABLE; 36 case EL2NSYNC: return EL2NSYNC_PORTABLE; 37 case EL3HLT: return EL3HLT_PORTABLE; 38 case EL3RST: return EL3RST_PORTABLE; 39 case ELNRNG: return ELNRNG_PORTABLE; 40 case EUNATCH: return EUNATCH_PORTABLE; 41 case ENOCSI: return ENOCSI_PORTABLE; 42 case EL2HLT: return EL2HLT_PORTABLE; 43 case EBADE: return EBADE_PORTABLE; 44 case EBADR: return EBADR_PORTABLE; 45 case EXFULL: return EXFULL_PORTABLE; 46 case ENOANO: return ENOANO_PORTABLE; 47 case EBADRQC: return EBADRQC_PORTABLE; 48 case EBADSLT: return EBADSLT_PORTABLE; 49 case EDEADLOCK: return EDEADLOCK_PORTABLE; 50 case EBFONT: return EBFONT_PORTABLE; 51 case ENOSTR: return ENOSTR_PORTABLE; 52 case ENODATA: return ENODATA_PORTABLE; 53 case ETIME: return ETIME_PORTABLE; 54 case ENOSR: return ENOSR_PORTABLE; 55 case ENONET: return ENONET_PORTABLE; 56 case ENOPKG: return ENOPKG_PORTABLE; 57 case EREMOTE: return EREMOTE_PORTABLE; 58 case ENOLINK: return ENOLINK_PORTABLE; 59 case EADV: return EADV_PORTABLE; 60 case ESRMNT: return ESRMNT_PORTABLE; 61 case ECOMM: return ECOMM_PORTABLE; 62 case EPROTO: return EPROTO_PORTABLE; 63 case EMULTIHOP: return EMULTIHOP_PORTABLE; 64 case EDOTDOT: return EDOTDOT_PORTABLE; 65 case EBADMSG: return EBADMSG_PORTABLE; 66 case EOVERFLOW: return EOVERFLOW_PORTABLE; 67 case ENOTUNIQ: return ENOTUNIQ_PORTABLE; 68 case EBADFD: return EBADFD_PORTABLE; 69 case EREMCHG: return EREMCHG_PORTABLE; 70 case ELIBACC: return ELIBACC_PORTABLE; 71 case ELIBBAD: return ELIBBAD_PORTABLE; 72 case ELIBSCN: return ELIBSCN_PORTABLE; 73 case ELIBMAX: return ELIBMAX_PORTABLE; 74 case ELIBEXEC: return ELIBEXEC_PORTABLE; 75 case EILSEQ: return EILSEQ_PORTABLE; 76 case ERESTART: return ERESTART_PORTABLE; 77 case ESTRPIPE: return ESTRPIPE_PORTABLE; 78 case EUSERS: return EUSERS_PORTABLE; 79 case ENOTSOCK: return ENOTSOCK_PORTABLE; 80 case EDESTADDRREQ: return EDESTADDRREQ_PORTABLE; 81 case EMSGSIZE: return EMSGSIZE_PORTABLE; 82 case EPROTOTYPE: return EPROTOTYPE_PORTABLE; 83 case ENOPROTOOPT: return ENOPROTOOPT_PORTABLE; 84 case EPROTONOSUPPORT: return EPROTONOSUPPORT_PORTABLE; 85 case ESOCKTNOSUPPORT: return ESOCKTNOSUPPORT_PORTABLE; 86 case EOPNOTSUPP: return EOPNOTSUPP_PORTABLE; 87 case EPFNOSUPPORT: return EPFNOSUPPORT_PORTABLE; 88 case EAFNOSUPPORT: return EAFNOSUPPORT_PORTABLE; 89 case EADDRINUSE: return EADDRINUSE_PORTABLE; 90 case EADDRNOTAVAIL: return EADDRNOTAVAIL_PORTABLE; 91 case ENETDOWN: return ENETDOWN_PORTABLE; 92 case ENETUNREACH: return ENETUNREACH_PORTABLE; 93 case ENETRESET: return ENETRESET_PORTABLE; 94 case ECONNABORTED: return ECONNABORTED_PORTABLE; 95 case ECONNRESET: return ECONNRESET_PORTABLE; 96 case ENOBUFS: return ENOBUFS_PORTABLE; 97 case EISCONN: return EISCONN_PORTABLE; 98 case ENOTCONN: return ENOTCONN_PORTABLE; 99 case ESHUTDOWN: return ESHUTDOWN_PORTABLE; 100 case ETOOMANYREFS: return ETOOMANYREFS_PORTABLE; 101 case ETIMEDOUT: return ETIMEDOUT_PORTABLE; 102 case ECONNREFUSED: return ECONNREFUSED_PORTABLE; 103 case EHOSTDOWN: return EHOSTDOWN_PORTABLE; 104 case EHOSTUNREACH: return EHOSTUNREACH_PORTABLE; 105 case EALREADY: return EALREADY_PORTABLE; 106 case EINPROGRESS: return EINPROGRESS_PORTABLE; 107 case ESTALE: return ESTALE_PORTABLE; 108 case EUCLEAN: return EUCLEAN_PORTABLE; 109 case ENOTNAM: return ENOTNAM_PORTABLE; 110 case ENAVAIL: return ENAVAIL_PORTABLE; 111 case EISNAM: return EISNAM_PORTABLE; 112 case EREMOTEIO: return EREMOTEIO_PORTABLE; 113 case EDQUOT: return EDQUOT_PORTABLE; 114 case ENOMEDIUM: return ENOMEDIUM_PORTABLE; 115 case EMEDIUMTYPE: return EMEDIUMTYPE_PORTABLE; 116 case ECANCELED: return ECANCELED_PORTABLE; 117 case ENOKEY: return ENOKEY_PORTABLE; 118 case EKEYEXPIRED: return EKEYEXPIRED_PORTABLE; 119 case EKEYREVOKED: return EKEYREVOKED_PORTABLE; 120 case EKEYREJECTED: return EKEYREJECTED_PORTABLE; 121 case EOWNERDEAD: return EOWNERDEAD_PORTABLE; 122 case ENOTRECOVERABLE: return ENOTRECOVERABLE_PORTABLE; 123 } 124 return mips_errno; 125 } 126 127 extern volatile int* __errno(void); 128 volatile int* __errno_portable() 129 { 130 /* Note that writing to static_errno will not affect the underlying system. */ 131 static int static_errno; 132 static_errno = mips_change_errno(*__errno()); 133 return &static_errno; 134 } 135