Home | History | Annotate | Download | only in arch-mips
      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