diff options
Diffstat (limited to 'components/libc')
| -rw-r--r-- | components/libc/posix/io/stdio/libc.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/components/libc/posix/io/stdio/libc.c b/components/libc/posix/io/stdio/libc.c index a5bee3f448..9c7d28fefd 100644 --- a/components/libc/posix/io/stdio/libc.c +++ b/components/libc/posix/io/stdio/libc.c @@ -30,15 +30,34 @@ int libc_system_init(void) dev_console = rt_console_get_device(); if (dev_console) { - int fd = libc_stdio_set_console(dev_console->parent.name, O_RDWR); - if (fd < 0) + int fd, ret; + char name[STDIO_DEVICE_NAME_MAX]; + + rt_snprintf(name, sizeof(name) - 1, "/dev/%s", dev_console->parent.name); + name[STDIO_DEVICE_NAME_MAX - 1] = '\0'; + + fd = open(name, O_RDWR); + if (fd >= 0) + { + /* set fd (0, 1, 2) */ + ret = sys_dup2(fd, 0); + if (ret != fd) + { + close(fd); + } + sys_dup2(ret, 1); + sys_dup2(ret, 2); + + ret = libc_stdio_set_console(dev_console->parent.name, O_RDWR); + if (ret < 0) + { + return -1; + } + } + else { return -1; } - /* set fd (0, 1, 2) */ - sys_dup2(fd, 0); - sys_dup2(fd, 1); - sys_dup2(fd, 2); } #endif /* RT_USING_POSIX_STDIO */ return 0; |
