summaryrefslogtreecommitdiff
path: root/components/libc/compilers
diff options
context:
space:
mode:
authorMeco Man <[email protected]>2021-11-12 16:47:32 -0500
committerMeco Man <[email protected]>2021-11-12 16:47:32 -0500
commit3a3b7ee63288456a7e80e42a3480ea19d4bd645b (patch)
tree063c61781f83e477a5fb98dab2717be52ac036a8 /components/libc/compilers
parentcb8d5c5d9d3fed61114ed1824b6f0615c31e86c3 (diff)
完善IAR KEIL的read write桩函数
Diffstat (limited to 'components/libc/compilers')
-rw-r--r--components/libc/compilers/armlibc/syscalls.c71
-rw-r--r--components/libc/compilers/dlib/syscall_close.c2
-rw-r--r--components/libc/compilers/dlib/syscall_lseek.c2
-rw-r--r--components/libc/compilers/dlib/syscall_open.c2
-rw-r--r--components/libc/compilers/dlib/syscall_read.c14
-rw-r--r--components/libc/compilers/dlib/syscall_remove.c2
-rw-r--r--components/libc/compilers/dlib/syscall_write.c29
7 files changed, 64 insertions, 58 deletions
diff --git a/components/libc/compilers/armlibc/syscalls.c b/components/libc/compilers/armlibc/syscalls.c
index 62657a4b64..c8609a92f3 100644
--- a/components/libc/compilers/armlibc/syscalls.c
+++ b/components/libc/compilers/armlibc/syscalls.c
@@ -25,7 +25,7 @@
#include "libc.h"
#endif
-#define DBG_TAG "armlibc.syscalls"
+#define DBG_TAG "Keil.armlibc.syscalls"
#define DBG_LVL DBG_INFO
#include <rtdbg.h>
@@ -144,38 +144,48 @@ int _sys_close(FILEHANDLE fh)
*/
int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
{
-#ifdef RT_USING_POSIX_STDIO
+#ifdef RT_USING_POSIX
int size;
if (fh == STDIN)
{
+#ifdef RT_USING_POSIX_STDIO
if (libc_stdio_get_console() < 0)
{
LOG_W("Do not invoke standard output before initializing libc");
- return 0;
+ return 0; /* error, but keep going */
}
size = read(STDIN_FILENO, buf, len);
- return len - size;
+ return 0; /* success */
+#else
+ return 0; /* error */
+#endif
}
- else if ((fh == STDOUT) || (fh == STDERR))
+ else if (fh == STDOUT || fh == STDERR)
{
return 0; /* error */
}
-
- size = read(fh, buf, len);
- if (size >= 0)
- return len - size;
else
- return 0; /* error */
+ {
+ size = read(fh, buf, len);
+ if (size >= 0)
+ return len - size; /* success */
+ else
+ return 0; /* error */
+ }
#else
return 0; /* error */
-#endif /* RT_USING_POSIX_STDIO */
+#endif /* RT_USING_POSIX */
}
/*
* Write to a file. Returns 0 on success, negative on error, and
* the number of characters _not_ written on partial success.
* `mode' exists for historical reasons and must be ignored.
+ * The return value is either:
+ * A positive number representing the number of characters not written
+ * (so any nonzero return value denotes a failure of some sort).
+ * A negative number indicating an error.
*/
int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
{
@@ -183,39 +193,36 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
int size;
#endif /* RT_USING_POSIX */
- if ((fh == STDOUT) || (fh == STDERR))
+ if (fh == STDOUT || fh == STDERR)
{
-#ifdef RT_USING_POSIX_STDIO
- if (libc_stdio_get_console() < 0)
- {
- LOG_W("Do not invoke standard input before initializing libc");
- return 0;
- }
- size = write(STDOUT_FILENO, buf, len);
- return len - size;
-#elif defined(RT_USING_CONSOLE)
- if (rt_console_get_device())
+#ifdef RT_USING_CONSOLE
+ rt_device_t console;
+ console = rt_console_get_device();
+ if (console)
{
- rt_device_write(rt_console_get_device(), -1, buf, len);
+ rt_device_write(console, -1, buf, len);
}
-
+ return 0; /* success */
+#else
return 0; /* error */
-#endif /* RT_USING_POSIX_STDIO */
+#endif /* RT_USING_CONSOLE */
}
else if (fh == STDIN)
{
return 0; /* error */
}
-
-#ifdef RT_USING_POSIX
- size = write(fh, buf, len);
- if (size >= 0)
- return len - size;
else
- return 0; /* error */
+ {
+#ifdef RT_USING_POSIX
+ size = write(fh, buf, len);
+ if (size >= 0)
+ return 0; /* success */
+ else
+ return 0; /* error */
#else
- return 0;
+ return 0; /* error */
#endif /* RT_USING_POSIX */
+ }
}
/*
diff --git a/components/libc/compilers/dlib/syscall_close.c b/components/libc/compilers/dlib/syscall_close.c
index 2897c2418a..2d14510490 100644
--- a/components/libc/compilers/dlib/syscall_close.c
+++ b/components/libc/compilers/dlib/syscall_close.c
@@ -8,7 +8,7 @@
* 2015-01-28 Bernard first version
*/
#include <rtthread.h>
-#include <yfuns.h>
+#include <LowLevelIOInterface.h>
#include <unistd.h>
#pragma module_name = "?__close"
diff --git a/components/libc/compilers/dlib/syscall_lseek.c b/components/libc/compilers/dlib/syscall_lseek.c
index 4ea55ef1c3..07ebfca2e9 100644
--- a/components/libc/compilers/dlib/syscall_lseek.c
+++ b/components/libc/compilers/dlib/syscall_lseek.c
@@ -8,7 +8,7 @@
* 2015-01-28 Bernard first version
*/
#include <rtthread.h>
-#include <yfuns.h>
+#include <LowLevelIOInterface.h>
#include <unistd.h>
#pragma module_name = "?__lseek"
diff --git a/components/libc/compilers/dlib/syscall_open.c b/components/libc/compilers/dlib/syscall_open.c
index 8fb3c3a11f..93056ffdbe 100644
--- a/components/libc/compilers/dlib/syscall_open.c
+++ b/components/libc/compilers/dlib/syscall_open.c
@@ -9,7 +9,7 @@
*/
#include <rtthread.h>
-#include <yfuns.h>
+#include <LowLevelIOInterface.h>
#include <fcntl.h>
#pragma module_name = "?__open"
diff --git a/components/libc/compilers/dlib/syscall_read.c b/components/libc/compilers/dlib/syscall_read.c
index c926c577b5..0df9766df2 100644
--- a/components/libc/compilers/dlib/syscall_read.c
+++ b/components/libc/compilers/dlib/syscall_read.c
@@ -9,7 +9,7 @@
*/
#include <rtthread.h>
-#include <yfuns.h>
+#include <LowLevelIOInterface.h>
#include <unistd.h>
#ifdef RT_USING_POSIX_STDIO
#include "libc.h"
@@ -22,17 +22,21 @@
#pragma module_name = "?__read"
size_t __read(int handle, unsigned char *buf, size_t len)
{
-#ifdef RT_USING_POSIX_STDIO
+#ifdef RT_USING_POSIX
int size;
if (handle == _LLIO_STDIN)
{
+#ifdef RT_USING_POSIX_STDIO
if (libc_stdio_get_console() < 0)
{
LOG_W("Do not invoke standard input before initializing libc");
- return 0;
+ return 0; /* error, but keep going */
}
- return read(STDIN_FILENO, buf, len);
+ return read(STDIN_FILENO, buf, len); /* return the length of the data read */
+#else
+ return _LLIO_ERROR;
+#endif /* RT_USING_POSIX_STDIO */
}
else if ((handle == _LLIO_STDOUT) || (handle == _LLIO_STDERR))
{
@@ -40,7 +44,7 @@ size_t __read(int handle, unsigned char *buf, size_t len)
}
size = read(handle, buf, len);
- return size;
+ return size; /* return the length of the data read */
#else
return _LLIO_ERROR;
#endif /* RT_USING_POSIX */
diff --git a/components/libc/compilers/dlib/syscall_remove.c b/components/libc/compilers/dlib/syscall_remove.c
index 05bfbb67ae..dcb9bf60ec 100644
--- a/components/libc/compilers/dlib/syscall_remove.c
+++ b/components/libc/compilers/dlib/syscall_remove.c
@@ -8,7 +8,7 @@
* 2015-01-28 Bernard first version
*/
#include <rtthread.h>
-#include <yfuns.h>
+#include <LowLevelIOInterface.h>
#include <unistd.h>
#pragma module_name = "?remove"
diff --git a/components/libc/compilers/dlib/syscall_write.c b/components/libc/compilers/dlib/syscall_write.c
index 72bac6ba49..0f280e1702 100644
--- a/components/libc/compilers/dlib/syscall_write.c
+++ b/components/libc/compilers/dlib/syscall_write.c
@@ -9,13 +9,13 @@
*/
#include <rtthread.h>
-#include <yfuns.h>
+#include <LowLevelIOInterface.h>
#include <unistd.h>
#ifdef RT_USING_POSIX_STDIO
#include "libc.h"
#endif
-#define DBG_TAG "dlib.syscall_write"
+#define DBG_TAG "IAR.dlib.syscall_write"
#define DBG_LVL DBG_INFO
#include <rtdbg.h>
@@ -29,36 +29,31 @@ size_t __write(int handle, const unsigned char *buf, size_t len)
if ((handle == _LLIO_STDOUT) || (handle == _LLIO_STDERR))
{
-#ifdef RT_USING_POSIX_STDIO
- if (libc_stdio_get_console() < 0)
- {
- LOG_W("Do not invoke standard output before initializing libc");
- return 0;
- }
- return write(STDOUT_FILENO, (void*)buf, len);
-#elif defined(RT_USING_CONSOLE)
+#ifdef RT_USING_CONSOLE
rt_device_t console_device;
console_device = rt_console_get_device();
- if (console_device != 0)
+ if (console_device)
{
rt_device_write(console_device, 0, buf, len);
}
- return len;
+ return len; /* return the length of the data written */
#else
return _LLIO_ERROR;
-#endif /* RT_USING_POSIX */
+#endif /* RT_USING_CONSOLE */
}
else if (handle == _LLIO_STDIN)
{
return _LLIO_ERROR;
}
-
+ else
+ {
#ifdef RT_USING_POSIX
- size = write(handle, buf, len);
- return size;
+ size = write(handle, buf, len);
+ return size; /* return the length of the data written */
#else
- return _LLIO_ERROR;
+ return _LLIO_ERROR;
#endif /* RT_USING_POSIX */
+ }
}