diff --git a/components/net/lwip/src/lwipopts.h b/components/net/lwip/src/lwipopts.h index a706d386abf5caf236db2f63eb6cbc954756d04d..1e8ebf37f34db45e4c37f10d98660db8c349b2b9 100644 --- a/components/net/lwip/src/lwipopts.h +++ b/components/net/lwip/src/lwipopts.h @@ -3,9 +3,7 @@ #include -#if defined(RT_USING_NEWLIB) || defined(RT_USING_MINILIBC) #define ERRNO 1 -#endif #define NO_SYS 0 #define LWIP_SOCKET 1 diff --git a/include/rtthread.h b/include/rtthread.h index 417c86afee1f56d544eef455f09af6427940e9d3..08923f7a32945b42fbb0c3aa2a19149e933ccdf4 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -365,6 +365,12 @@ void rt_kprintf(const char *fmt, ...); rt_err_t rt_get_errno(void); void rt_set_errno(rt_err_t no); +int *_rt_errno(void); +#ifndef RT_USING_NEWLIB +#ifndef errno +#define errno *_rt_errno() +#endif +#endif void* rt_memset(void *src, int c, rt_ubase_t n); void* rt_memcpy(void *dest, const void *src, rt_ubase_t n); diff --git a/src/kservice.c b/src/kservice.c index 10d280708206d2ff06763003382946e8cf2fe2c4..70a8e9060a6189a4817b3f248c5e519e143a99ab 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -27,7 +27,7 @@ #ifndef RT_USING_NEWLIB /* global errno in RT-Thread*/ -volatile int errno; +static volatile int _errno; #else #include #endif @@ -47,11 +47,11 @@ rt_err_t rt_get_errno(void) if(rt_interrupt_get_nest() != 0) { /* it's in interrupt context */ - return errno; + return _errno; } tid = rt_thread_self(); - if (tid == RT_NULL) return errno; + if (tid == RT_NULL) return _errno; return tid->error; } @@ -68,16 +68,33 @@ void rt_set_errno(rt_err_t error) if(rt_interrupt_get_nest() != 0) { /* it's in interrupt context */ - errno = error; + _errno = error; return; } tid = rt_thread_self(); - if (tid == RT_NULL) { errno = error; return; } + if (tid == RT_NULL) { _errno = error; return; } tid->error = error; } +/** + * This function returns errno. + * + * @return the errno in the system + */ +int *_rt_errno(void) +{ + rt_thread_t tid; + + if (rt_interrupt_get_nest() != 0) return (int *)&_errno; + + tid = rt_thread_self(); + if (tid != RT_NULL) return (int *)&(tid->error); + + return (int *)&_errno; +} + /** * This function will set the content of memory to specified value *