Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[rtdef] support POSIX compatible errno #7954

Merged
merged 2 commits into from
Sep 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions components/libc/compilers/picolibc/syscall.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,31 @@
*/

#include <rtthread.h>
#include <sys/types.h>

int pico_get_errno(void)
/* global errno */
static volatile int __pico_errno;

int *pico_get_errno(void)
{
return rt_get_errno();
rt_thread_t tid = RT_NULL;

if (rt_interrupt_get_nest() != 0)
{
/* it's in interrupt context */
return &__pico_errno;
}

tid = rt_thread_self();
if (tid == RT_NULL)
{
return &__pico_errno;
}

return &tid->error;
}

#ifdef RT_USING_HEAP /* Memory routine */
#ifdef RT_USING_HEAP
void *malloc(size_t n)
{
return rt_malloc(n);
Expand All @@ -39,4 +57,4 @@ void free(void *rmem)
rt_free(rmem);
}
RTM_EXPORT(free);
#endif
#endif /* RT_USING_HEAP */
32 changes: 25 additions & 7 deletions include/rtdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
#include <stdarg.h>
#if !RT_USING_LIBC_ISO_ONLY
#include <sys/types.h>
#include <sys/errno.h>
#if defined(RT_USING_SIGNALS) || defined(RT_USING_SMART)
#include <sys/signal.h>
#endif /* defined(RT_USING_SIGNALS) || defined(RT_USING_SMART) */
Expand Down Expand Up @@ -396,27 +397,44 @@ typedef int (*init_fn_t)(void);
#endif

/**
* @addtogroup Error
* @addtogroup Error Code
*/

/**@{*/

/* RT-Thread error code definitions */
#if defined(RT_USING_LIBC) && !RT_USING_LIBC_ISO_ONLY
/* POSIX error code compatible */
#define RT_EOK 0 /**< There is no error */
#define RT_ERROR 255 /**< A generic/unknown error happens */
#define RT_ETIMEOUT ETIMEDOUT /**< Timed out */
#define RT_EFULL ENOSPC /**< The resource is full */
#define RT_EEMPTY ENODATA /**< The resource is empty */
#define RT_ENOMEM ENOMEM /**< No memory */
#define RT_ENOSYS ENOSYS /**< Function not implemented */
#define RT_EBUSY EBUSY /**< Busy */
#define RT_EIO EIO /**< IO error */
#define RT_EINTR EINTR /**< Interrupted system call */
#define RT_EINVAL EINVAL /**< Invalid argument */
#define RT_ENOENT ENOENT /**< No entry */
#define RT_ENOSPC ENOSPC /**< No space left */
#define RT_EPERM EPERM /**< Operation not permitted */
#else
#define RT_EOK 0 /**< There is no error */
#define RT_ERROR 1 /**< A generic error happens */
#define RT_ERROR 1 /**< A generic/unknown error happens */
#define RT_ETIMEOUT 2 /**< Timed out */
#define RT_EFULL 3 /**< The resource is full */
#define RT_EEMPTY 4 /**< The resource is empty */
#define RT_ENOMEM 5 /**< No memory */
#define RT_ENOSYS 6 /**< No system */
#define RT_ENOSYS 6 /**< Function not implemented */
#define RT_EBUSY 7 /**< Busy */
#define RT_EIO 8 /**< IO error */
#define RT_EINTR 9 /**< Interrupted system call */
#define RT_EINVAL 10 /**< Invalid argument */
#define RT_ETRAP 11 /**< Trap event */
#define RT_ENOENT 12 /**< No entry */
#define RT_ENOSPC 13 /**< No space left */
#define RT_EPERM 14 /**< Operation not permitted */
#define RT_ENOENT 11 /**< No entry */
#define RT_ENOSPC 12 /**< No space left */
#define RT_EPERM 13 /**< Operation not permitted */
#endif /* defined(RT_USING_LIBC) && !RT_USING_LIBC_ISO_ONLY */

/**@}*/

Expand Down