diff options
Diffstat (limited to 'components')
| -rw-r--r-- | components/libc/posix/io/stdio/stdio.c | 42 |
1 files changed, 10 insertions, 32 deletions
diff --git a/components/libc/posix/io/stdio/stdio.c b/components/libc/posix/io/stdio/stdio.c index 06d341d722..76b97fe560 100644 --- a/components/libc/posix/io/stdio/stdio.c +++ b/components/libc/posix/io/stdio/stdio.c @@ -129,53 +129,31 @@ int rt_posix_stdio_get_console(void) #elif defined(RT_USING_MUSLLIBC) -static FILE* std_console = NULL; - -int rt_posix_stdio_set_console(const char* device_name, int mode) +static int std_fd = -1; +int rt_posix_stdio_set_console(const char *device_name, int mode) { - FILE *fp; + int fd; char name[STDIO_DEVICE_NAME_MAX]; - char *file_mode; rt_snprintf(name, sizeof(name) - 1, "/dev/%s", device_name); name[STDIO_DEVICE_NAME_MAX - 1] = '\0'; - if (mode == O_RDWR) file_mode = "r+"; - else if (mode == O_WRONLY) file_mode = "wb"; - else file_mode = "rb"; - - fp = fopen(name, file_mode); - if (fp) + fd = open(name, mode, 0); + if (fd >= 0) { - setvbuf(fp, NULL, _IONBF, 0); - - if (std_console) + if (std_fd >= 0) { - fclose(std_console); - std_console = NULL; + close(std_fd); } - std_console = fp; - } - - if (std_console) - { - int fd = fileno(std_console); - - return fd; + std_fd = fd; } - return -1; + return std_fd; } int rt_posix_stdio_get_console(void) { - int ret = -1; - if (std_console) - { - ret = fileno(std_console); - } - - return ret; + return std_fd; } #else |
