summaryrefslogtreecommitdiff
path: root/components/lwp/syscall_generic.h
diff options
context:
space:
mode:
Diffstat (limited to 'components/lwp/syscall_generic.h')
-rw-r--r--components/lwp/syscall_generic.h35
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__ */