From b08d8672d258b029edc4d2c45543c3af9e595830 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Mon, 7 Aug 2023 13:46:34 -0400 Subject: [PATCH] [libc][posix/io/stdio] rename libc.c as posix/stdio.c --- .../libraries/libos/include/misc/support.h | 2 - .../hal/source/usb/include/usb_list.h | 1 - components/dfs/dfs_v1/src/dfs.c | 2 +- components/libc/compilers/armlibc/syscalls.c | 6 +- components/libc/compilers/common/cstdio.c | 87 --------------- components/libc/compilers/common/cunistd.c | 34 ++++++ components/libc/compilers/dlib/syscall_read.c | 4 +- components/libc/compilers/newlib/syscalls.c | 4 +- components/libc/posix/io/stdio/SConscript | 20 +--- components/libc/posix/io/stdio/libc.h | 30 ----- .../include => posix/io/stdio}/posix/stdio.h | 16 +-- .../libc/posix/io/stdio/{libc.c => stdio.c} | 104 +++++++++++++----- 12 files changed, 130 insertions(+), 180 deletions(-) delete mode 100644 components/libc/compilers/common/cstdio.c create mode 100644 components/libc/compilers/common/cunistd.c delete mode 100644 components/libc/posix/io/stdio/libc.h rename components/libc/{compilers/common/include => posix/io/stdio}/posix/stdio.h (62%) rename components/libc/posix/io/stdio/{libc.c => stdio.c} (60%) diff --git a/bsp/allwinner/libraries/libos/include/misc/support.h b/bsp/allwinner/libraries/libos/include/misc/support.h index 7b77cc9a2..1551cbb74 100644 --- a/bsp/allwinner/libraries/libos/include/misc/support.h +++ b/bsp/allwinner/libraries/libos/include/misc/support.h @@ -21,8 +21,6 @@ #define __SUPPORT_H__ #include #include -#include - /* * Generic macro to convert pointers to values for comparison purposes. */ diff --git a/bsp/allwinner/libraries/sunxi-hal/hal/source/usb/include/usb_list.h b/bsp/allwinner/libraries/sunxi-hal/hal/source/usb/include/usb_list.h index 6ecff911b..1329c32cc 100644 --- a/bsp/allwinner/libraries/sunxi-hal/hal/source/usb/include/usb_list.h +++ b/bsp/allwinner/libraries/sunxi-hal/hal/source/usb/include/usb_list.h @@ -25,7 +25,6 @@ #ifndef _USB_LIST_H_ #define _USB_LIST_H_ -#include #include #include //#include "usb_host_config.h" diff --git a/components/dfs/dfs_v1/src/dfs.c b/components/dfs/dfs_v1/src/dfs.c index 5487b1c01..51040ca0b 100644 --- a/components/dfs/dfs_v1/src/dfs.c +++ b/components/dfs/dfs_v1/src/dfs.c @@ -19,7 +19,7 @@ #endif #ifdef RT_USING_POSIX_STDIO -#include +#include #endif /* RT_USING_POSIX_STDIO */ /* Global variables */ diff --git a/components/libc/compilers/armlibc/syscalls.c b/components/libc/compilers/armlibc/syscalls.c index f163ab1ad..5f7bcd017 100644 --- a/components/libc/compilers/armlibc/syscalls.c +++ b/components/libc/compilers/armlibc/syscalls.c @@ -23,7 +23,7 @@ #include #include #ifdef RT_USING_POSIX_STDIO - #include "libc.h" +#include #endif /* RT_USING_POSIX_STDIO */ #define DBG_TAG "armlibc.syscalls" @@ -153,7 +153,7 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode) if (fh == STDIN) { #ifdef RT_USING_POSIX_STDIO - if (libc_stdio_get_console() < 0) + if (rt_posix_stdio_get_console() < 0) { LOG_W("Do not invoke standard output before initializing Compiler"); return 0; /* error, but keep going */ @@ -375,7 +375,7 @@ int fgetc(FILE *f) #ifdef RT_USING_POSIX_STDIO char ch; - if (libc_stdio_get_console() < 0) + if (rt_posix_stdio_get_console() < 0) { LOG_W("Do not invoke standard output before initializing Compiler"); return 0; diff --git a/components/libc/compilers/common/cstdio.c b/components/libc/compilers/common/cstdio.c deleted file mode 100644 index fc14c0b9c..000000000 --- a/components/libc/compilers/common/cstdio.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2006-2022, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2014-05-22 ivanrad implement getline - */ - -#include "posix/stdio.h" -#include -#include -#include - -#ifdef DFS_USING_POSIX -ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream) -{ - char *cur_pos, *new_lineptr; - size_t new_lineptr_len; - int c; - - if (lineptr == NULL || n == NULL || stream == NULL) - { - errno = EINVAL; - return -1; - } - - if (*lineptr == NULL) - { - *n = 128; /* init len */ - if ((*lineptr = (char *)malloc(*n)) == NULL) - { - errno = ENOMEM; - return -1; - } - } - - cur_pos = *lineptr; - for (;;) - { - c = getc(stream); - - if (ferror(stream) || (c == EOF && cur_pos == *lineptr)) - return -1; - - if (c == EOF) - break; - - if ((*lineptr + *n - cur_pos) < 2) - { - if (LONG_MAX / 2 < *n) - { -#ifdef EOVERFLOW - errno = EOVERFLOW; -#else - errno = ERANGE; /* no EOVERFLOW defined */ -#endif - return -1; - } - new_lineptr_len = *n * 2; - - if ((new_lineptr = (char *)realloc(*lineptr, new_lineptr_len)) == NULL) - { - errno = ENOMEM; - return -1; - } - cur_pos = new_lineptr + (cur_pos - *lineptr); - *lineptr = new_lineptr; - *n = new_lineptr_len; - } - - *cur_pos++ = (char)c; - - if (c == delim) - break; - } - - *cur_pos = '\0'; - return (ssize_t)(cur_pos - *lineptr); -} - -ssize_t getline(char **lineptr, size_t *n, FILE *stream) -{ - return getdelim(lineptr, n, '\n', stream); -} -#endif /* DFS_USING_POSIX */ diff --git a/components/libc/compilers/common/cunistd.c b/components/libc/compilers/common/cunistd.c new file mode 100644 index 000000000..eda1c02a1 --- /dev/null +++ b/components/libc/compilers/common/cunistd.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-08-16 Meco Man first version + */ + +#include +#include +#include + +int isatty(int fd) +{ +#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE) + if(fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + return 1; + } +#endif /* defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE) */ + +#ifdef RT_USING_POSIX_STDIO + if(fd == STDIN_FILENO) + { + return 1; + } +#endif /* RT_USING_POSIX_STDIO */ + + rt_set_errno(ENOTTY); + return 0; +} +RTM_EXPORT(isatty); diff --git a/components/libc/compilers/dlib/syscall_read.c b/components/libc/compilers/dlib/syscall_read.c index a276a3e40..9cb60d72d 100644 --- a/components/libc/compilers/dlib/syscall_read.c +++ b/components/libc/compilers/dlib/syscall_read.c @@ -12,7 +12,7 @@ #include #include #ifdef RT_USING_POSIX_STDIO -#include "libc.h" +#include #endif /* RT_USING_POSIX_STDIO */ #include #define DBG_TAG "dlib.syscall.read" @@ -40,7 +40,7 @@ size_t __read(int handle, unsigned char *buf, size_t len) if (handle == _LLIO_STDIN) { #ifdef RT_USING_POSIX_STDIO - if (libc_stdio_get_console() < 0) + if (rt_posix_stdio_get_console() < 0) { LOG_W("Do not invoke standard input before initializing Compiler"); return 0; /* error, but keep going */ diff --git a/components/libc/compilers/newlib/syscalls.c b/components/libc/compilers/newlib/syscalls.c index 8a5996832..ece5494b7 100644 --- a/components/libc/compilers/newlib/syscalls.c +++ b/components/libc/compilers/newlib/syscalls.c @@ -21,7 +21,7 @@ #include #include #ifdef RT_USING_POSIX_STDIO -#include "libc.h" +#include #endif /* RT_USING_POSIX_STDIO */ #ifdef RT_USING_MODULE #include @@ -225,7 +225,7 @@ _ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes) if (fd == STDIN_FILENO) { #ifdef RT_USING_POSIX_STDIO - if (libc_stdio_get_console() < 0) + if (rt_posix_stdio_get_console() < 0) { LOG_W("Do not invoke standard input before initializing Compiler"); return 0; diff --git a/components/libc/posix/io/stdio/SConscript b/components/libc/posix/io/stdio/SConscript index d33809ce4..8180c9b0b 100644 --- a/components/libc/posix/io/stdio/SConscript +++ b/components/libc/posix/io/stdio/SConscript @@ -1,22 +1,6 @@ -# RT-Thread building script for component - -import os from building import * -src = [] -cwd = GetCurrentDir() -CPPPATH = [cwd] -group = [] - -if GetDepend('RT_USING_POSIX_STDIO'): - src += ['libc.c'] - -group = DefineGroup('POSIX', src, depend = [''], CPPPATH = CPPPATH) - -list = os.listdir(cwd) -for d in list: - path = os.path.join(cwd, d) - if os.path.isfile(os.path.join(path, 'SConscript')): - group = group + SConscript(os.path.join(d, 'SConscript')) +src = ['stdio.c'] +group = DefineGroup('POSIX', src, depend = ['RT_USING_POSIX_STDIO'], CPPPATH = [GetCurrentDir()]) Return('group') diff --git a/components/libc/posix/io/stdio/libc.h b/components/libc/posix/io/stdio/libc.h deleted file mode 100644 index 6b5dfd1fc..000000000 --- a/components/libc/posix/io/stdio/libc.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2006-2021, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2017/10/15 bernard the first version - */ - -#ifndef __RTT_LIBC_H__ -#define __RTT_LIBC_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -int libc_system_init(void); -#ifdef RT_USING_POSIX_STDIO -int libc_stdio_get_console(void); -int libc_stdio_set_console(const char* device_name, int mode); -#endif /* RT_USING_POSIX_STDIO */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/components/libc/compilers/common/include/posix/stdio.h b/components/libc/posix/io/stdio/posix/stdio.h similarity index 62% rename from components/libc/compilers/common/include/posix/stdio.h rename to components/libc/posix/io/stdio/posix/stdio.h index a2cf01f6b..d5e76859b 100644 --- a/components/libc/compilers/common/include/posix/stdio.h +++ b/components/libc/posix/io/stdio/posix/stdio.h @@ -1,27 +1,29 @@ /* - * Copyright (c) 2006-2022, RT-Thread Development Team + * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes - * 2022-06-07 Meco Man first version + * 2017/10/15 bernard the first version */ #ifndef __POSIX_STDIO_H__ #define __POSIX_STDIO_H__ +#include +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - -#ifdef DFS_USING_POSIX +int rt_posix_stdio_init(void); +int rt_posix_stdio_get_console(void); +int rt_posix_stdio_set_console(const char* device_name, int mode); ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream); ssize_t getline(char **lineptr, size_t *n, FILE *stream); -#endif /* DFS_USING_POSIX */ #ifdef __cplusplus } diff --git a/components/libc/posix/io/stdio/libc.c b/components/libc/posix/io/stdio/stdio.c similarity index 60% rename from components/libc/posix/io/stdio/libc.c rename to components/libc/posix/io/stdio/stdio.c index 522ff3651..4e5464c53 100644 --- a/components/libc/posix/io/stdio/libc.c +++ b/components/libc/posix/io/stdio/stdio.c @@ -6,6 +6,7 @@ * Change Logs: * Date Author Notes * 2017/10/15 bernard the first version + * 2023/08/07 Meco Man rename as posix/stdio.c */ #include @@ -13,24 +14,24 @@ #include #include #include +#include #include #include #include -#include "libc.h" +#include "posix/stdio.h" #define STDIO_DEVICE_NAME_MAX 32 int sys_dup2(int oldfd, int new); -int libc_system_init(void) +int rt_posix_stdio_init(void) { -#ifdef RT_USING_POSIX_STDIO rt_device_t dev_console; dev_console = rt_console_get_device(); if (dev_console) { - int fd = libc_stdio_set_console(dev_console->parent.name, O_RDWR); + int fd = rt_posix_stdio_set_console(dev_console->parent.name, O_RDWR); if (fd < 0) { return -1; @@ -40,15 +41,14 @@ int libc_system_init(void) sys_dup2(fd, 1); sys_dup2(fd, 2); } -#endif /* RT_USING_POSIX_STDIO */ return 0; } -INIT_ENV_EXPORT(libc_system_init); +INIT_ENV_EXPORT(rt_posix_stdio_init); -#if defined(RT_USING_POSIX_STDIO) && defined(RT_USING_NEWLIBC) +#if defined(RT_USING_NEWLIBC) static FILE* std_console = NULL; -int libc_stdio_set_console(const char* device_name, int mode) +int rt_posix_stdio_set_console(const char* device_name, int mode) { FILE *fp; char name[STDIO_DEVICE_NAME_MAX]; @@ -111,7 +111,7 @@ int libc_stdio_set_console(const char* device_name, int mode) return -1; } -int libc_stdio_get_console(void) +int rt_posix_stdio_get_console(void) { if (std_console) return fileno(std_console); @@ -119,11 +119,11 @@ int libc_stdio_get_console(void) return -1; } -#elif defined(RT_USING_POSIX_STDIO) && defined(RT_USING_MUSLLIBC) +#elif defined(RT_USING_MUSLLIBC) static FILE* std_console = NULL; -int libc_stdio_set_console(const char* device_name, int mode) +int rt_posix_stdio_set_console(const char* device_name, int mode) { FILE *fp; char name[STDIO_DEVICE_NAME_MAX]; @@ -159,7 +159,7 @@ int libc_stdio_set_console(const char* device_name, int mode) return -1; } -int libc_stdio_get_console(void) +int rt_posix_stdio_get_console(void) { int ret = -1; if (std_console) @@ -170,10 +170,10 @@ int libc_stdio_get_console(void) return ret; } -#elif defined(RT_USING_POSIX_STDIO) +#else static int std_fd = -1; -int libc_stdio_set_console(const char* device_name, int mode) +int rt_posix_stdio_set_console(const char* device_name, int mode) { int fd; char name[STDIO_DEVICE_NAME_MAX]; @@ -194,28 +194,78 @@ int libc_stdio_set_console(const char* device_name, int mode) return std_fd; } -int libc_stdio_get_console(void) { +int rt_posix_stdio_get_console(void) { return std_fd; } -#endif /* defined(RT_USING_POSIX_STDIO) && defined(RT_USING_NEWLIBC) */ +#endif /* defined(RT_USING_NEWLIBC) */ -int isatty(int fd) +ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream) { -#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE) - if(fd == STDOUT_FILENO || fd == STDERR_FILENO) + char *cur_pos, *new_lineptr; + size_t new_lineptr_len; + int c; + + if (lineptr == NULL || n == NULL || stream == NULL) { - return 1; + errno = EINVAL; + return -1; } -#endif -#ifdef RT_USING_POSIX_STDIO - if(fd == STDIN_FILENO) + if (*lineptr == NULL) { - return 1; + *n = 128; /* init len */ + if ((*lineptr = (char *)malloc(*n)) == NULL) + { + errno = ENOMEM; + return -1; + } } + + cur_pos = *lineptr; + for (;;) + { + c = getc(stream); + + if (ferror(stream) || (c == EOF && cur_pos == *lineptr)) + return -1; + + if (c == EOF) + break; + + if ((*lineptr + *n - cur_pos) < 2) + { + if (LONG_MAX / 2 < *n) + { +#ifdef EOVERFLOW + errno = EOVERFLOW; +#else + errno = ERANGE; /* no EOVERFLOW defined */ #endif + return -1; + } + new_lineptr_len = *n * 2; + + if ((new_lineptr = (char *)realloc(*lineptr, new_lineptr_len)) == NULL) + { + errno = ENOMEM; + return -1; + } + cur_pos = new_lineptr + (cur_pos - *lineptr); + *lineptr = new_lineptr; + *n = new_lineptr_len; + } - rt_set_errno(ENOTTY); - return 0; + *cur_pos++ = (char)c; + + if (c == delim) + break; + } + + *cur_pos = '\0'; + return (ssize_t)(cur_pos - *lineptr); +} + +ssize_t getline(char **lineptr, size_t *n, FILE *stream) +{ + return getdelim(lineptr, n, '\n', stream); } -RTM_EXPORT(isatty); -- GitLab