فهرست منبع

[libc] Fix the O_CREAT issue.

libc_stdio_set_console/newlib uses fopen to open console device, which
has O_CREAT flag and cause fault.
BernardXiong 7 سال پیش
والد
کامیت
780c09e3e4
2فایلهای تغییر یافته به همراه4 افزوده شده و 4 حذف شده
  1. 1 3
      components/dfs/filesystems/devfs/devfs.c
  2. 3 1
      components/libc/compilers/newlib/stdio.c

+ 1 - 3
components/dfs/filesystems/devfs/devfs.c

@@ -19,6 +19,7 @@
  *
  * Change Logs:
  * Date           Author       Notes
+ * 2018-02-11     Bernard      Ignore O_CREAT flag in open.
  */
 
 #include <rtthread.h>
@@ -137,9 +138,6 @@ int dfs_device_fs_open(struct dfs_fd *file)
     rt_err_t result;
     rt_device_t device;
 
-    if (file->flags & O_CREAT)
-        return -EINVAL;
-
     /* open root directory */
     if ((file->path[0] == '/') && (file->path[1] == '\0') &&
         (file->flags & O_DIRECTORY))

+ 3 - 1
components/libc/compilers/newlib/stdio.c

@@ -81,7 +81,9 @@ int libc_stdio_set_console(const char* device_name, int mode)
         _GLOBAL_REENT->__sdidinit = 1;
     }
 
-    return fileno(std_console);
+    if (std_console) return fileno(std_console);
+
+    return -1;
 }
 
 int libc_stdio_get_console(void) {