diff options
| author | Meco Man <[email protected]> | 2021-11-12 16:47:32 -0500 |
|---|---|---|
| committer | Meco Man <[email protected]> | 2021-11-12 16:47:32 -0500 |
| commit | 3a3b7ee63288456a7e80e42a3480ea19d4bd645b (patch) | |
| tree | 063c61781f83e477a5fb98dab2717be52ac036a8 /components/libc/compilers/armlibc | |
| parent | cb8d5c5d9d3fed61114ed1824b6f0615c31e86c3 (diff) | |
完善IAR KEIL的read write桩函数
Diffstat (limited to 'components/libc/compilers/armlibc')
| -rw-r--r-- | components/libc/compilers/armlibc/syscalls.c | 71 |
1 files changed, 39 insertions, 32 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 */ + } } /* |
