1
0
Эх сурвалжийг харах

完善IAR KEIL的read write桩函数

Meco Man 3 жил өмнө
parent
commit
3a3b7ee632

+ 39 - 32
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 */
+    }
 }
 
 /*

+ 1 - 1
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"

+ 1 - 1
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"

+ 1 - 1
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"

+ 9 - 5
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 */

+ 1 - 1
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"

+ 12 - 17
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 */
+    }
 }