summaryrefslogtreecommitdiff
path: root/components/libc
diff options
context:
space:
mode:
Diffstat (limited to 'components/libc')
-rw-r--r--components/libc/posix/io/stdio/libc.c31
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;