提交 472cc933 编写于 作者: B bernard.xiong@gmail.com

add errno implementation in RT-Thread.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1682 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 da74af23
......@@ -3,9 +3,7 @@
#include <rtconfig.h>
#if defined(RT_USING_NEWLIB) || defined(RT_USING_MINILIBC)
#define ERRNO 1
#endif
#define NO_SYS 0
#define LWIP_SOCKET 1
......
......@@ -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);
......
......@@ -27,7 +27,7 @@
#ifndef RT_USING_NEWLIB
/* global errno in RT-Thread*/
volatile int errno;
static volatile int _errno;
#else
#include <errno.h>
#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
*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册