diff options
Diffstat (limited to 'components/lwp/syscall_generic.h')
| -rw-r--r-- | components/lwp/syscall_generic.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/components/lwp/syscall_generic.h b/components/lwp/syscall_generic.h index 04b93e5fb8..a589b6fcdd 100644 --- a/components/lwp/syscall_generic.h +++ b/components/lwp/syscall_generic.h @@ -13,6 +13,9 @@ #include <rtthread.h> +#include <errno.h> +#include <stdlib.h> + typedef long sysret_t; struct rt_syscall_def @@ -40,4 +43,36 @@ struct rt_syscall_def #define _SYS_WRAP(func) ({int _ret = func; _ret < 0 ? GET_ERRNO() : _ret;}) +rt_inline sysret_t lwp_errno_to_posix(rt_err_t error) +{ + sysret_t posix_rc; + + switch (labs(error)) + { + case RT_EOK: + posix_rc = 0; + break; + case RT_ETIMEOUT: + posix_rc = -ETIMEDOUT; + break; + case RT_EINVAL: + posix_rc = -EINVAL; + break; + case RT_ENOENT: + posix_rc = -ENOENT; + break; + case RT_ENOSPC: + posix_rc = -ENOSPC; + break; + case RT_EPERM: + posix_rc = -EPERM; + break; + default: + posix_rc = -1; + break; + } + + return posix_rc; +} + #endif /* __SYSCALL_DATA_H__ */ |
