提交 b08d8672 编写于 作者: mysterywolf's avatar mysterywolf

[libc][posix/io/stdio] rename libc.c as posix/stdio.c

上级 d862816a
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
#define __SUPPORT_H__ #define __SUPPORT_H__
#include <typedef.h> #include <typedef.h>
#include <kapi.h> #include <kapi.h>
#include <libc.h>
/* /*
* Generic macro to convert pointers to values for comparison purposes. * Generic macro to convert pointers to values for comparison purposes.
*/ */
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
#ifndef _USB_LIST_H_ #ifndef _USB_LIST_H_
#define _USB_LIST_H_ #define _USB_LIST_H_
#include <libc.h>
#include <log.h> #include <log.h>
#include <hal_osal.h> #include <hal_osal.h>
//#include "usb_host_config.h" //#include "usb_host_config.h"
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#endif #endif
#ifdef RT_USING_POSIX_STDIO #ifdef RT_USING_POSIX_STDIO
#include <libc.h> #include <posix/stdio.h>
#endif /* RT_USING_POSIX_STDIO */ #endif /* RT_USING_POSIX_STDIO */
/* Global variables */ /* Global variables */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <compiler_private.h> #include <compiler_private.h>
#ifdef RT_USING_POSIX_STDIO #ifdef RT_USING_POSIX_STDIO
#include "libc.h" #include <posix/stdio.h>
#endif /* RT_USING_POSIX_STDIO */ #endif /* RT_USING_POSIX_STDIO */
#define DBG_TAG "armlibc.syscalls" #define DBG_TAG "armlibc.syscalls"
...@@ -153,7 +153,7 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode) ...@@ -153,7 +153,7 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
if (fh == STDIN) if (fh == STDIN)
{ {
#ifdef RT_USING_POSIX_STDIO #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"); LOG_W("Do not invoke standard output before initializing Compiler");
return 0; /* error, but keep going */ return 0; /* error, but keep going */
...@@ -375,7 +375,7 @@ int fgetc(FILE *f) ...@@ -375,7 +375,7 @@ int fgetc(FILE *f)
#ifdef RT_USING_POSIX_STDIO #ifdef RT_USING_POSIX_STDIO
char ch; 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"); LOG_W("Do not invoke standard output before initializing Compiler");
return 0; return 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 <stdlib.h>
#include <limits.h>
#include <sys/errno.h>
#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 */
/*
* 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 <rtthread.h>
#include <unistd.h>
#include <sys/errno.h>
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);
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include <LowLevelIOInterface.h> #include <LowLevelIOInterface.h>
#include <unistd.h> #include <unistd.h>
#ifdef RT_USING_POSIX_STDIO #ifdef RT_USING_POSIX_STDIO
#include "libc.h" #include <posix/stdio.h>
#endif /* RT_USING_POSIX_STDIO */ #endif /* RT_USING_POSIX_STDIO */
#include <compiler_private.h> #include <compiler_private.h>
#define DBG_TAG "dlib.syscall.read" #define DBG_TAG "dlib.syscall.read"
...@@ -40,7 +40,7 @@ size_t __read(int handle, unsigned char *buf, size_t len) ...@@ -40,7 +40,7 @@ size_t __read(int handle, unsigned char *buf, size_t len)
if (handle == _LLIO_STDIN) if (handle == _LLIO_STDIN)
{ {
#ifdef RT_USING_POSIX_STDIO #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"); LOG_W("Do not invoke standard input before initializing Compiler");
return 0; /* error, but keep going */ return 0; /* error, but keep going */
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#include <sys/errno.h> #include <sys/errno.h>
#include <sys/stat.h> #include <sys/stat.h>
#ifdef RT_USING_POSIX_STDIO #ifdef RT_USING_POSIX_STDIO
#include "libc.h" #include <posix/stdio.h>
#endif /* RT_USING_POSIX_STDIO */ #endif /* RT_USING_POSIX_STDIO */
#ifdef RT_USING_MODULE #ifdef RT_USING_MODULE
#include <dlmodule.h> #include <dlmodule.h>
...@@ -225,7 +225,7 @@ _ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes) ...@@ -225,7 +225,7 @@ _ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes)
if (fd == STDIN_FILENO) if (fd == STDIN_FILENO)
{ {
#ifdef RT_USING_POSIX_STDIO #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"); LOG_W("Do not invoke standard input before initializing Compiler");
return 0; return 0;
......
# RT-Thread building script for component
import os
from building import * from building import *
src = [] src = ['stdio.c']
cwd = GetCurrentDir() group = DefineGroup('POSIX', src, depend = ['RT_USING_POSIX_STDIO'], CPPPATH = [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'))
Return('group') Return('group')
/*
* 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 <rtconfig.h>
#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
/* /*
* Copyright (c) 2006-2022, RT-Thread Development Team * Copyright (c) 2006-2021, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2022-06-07 Meco Man first version * 2017/10/15 bernard the first version
*/ */
#ifndef __POSIX_STDIO_H__ #ifndef __POSIX_STDIO_H__
#define __POSIX_STDIO_H__ #define __POSIX_STDIO_H__
#include <rtconfig.h>
#include <stdio.h>
#include <sys/types.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <stdio.h> int rt_posix_stdio_init(void);
#include <sys/types.h> int rt_posix_stdio_get_console(void);
int rt_posix_stdio_set_console(const char* device_name, int mode);
#ifdef DFS_USING_POSIX
ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream); ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
ssize_t getline(char **lineptr, size_t *n, FILE *stream); ssize_t getline(char **lineptr, size_t *n, FILE *stream);
#endif /* DFS_USING_POSIX */
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2017/10/15 bernard the first version * 2017/10/15 bernard the first version
* 2023/08/07 Meco Man rename as posix/stdio.c
*/ */
#include <rtthread.h> #include <rtthread.h>
...@@ -13,24 +14,24 @@ ...@@ -13,24 +14,24 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <limits.h>
#include <fcntl.h> #include <fcntl.h>
#include <sys/time.h> #include <sys/time.h>
#include <sys/errno.h> #include <sys/errno.h>
#include "libc.h" #include "posix/stdio.h"
#define STDIO_DEVICE_NAME_MAX 32 #define STDIO_DEVICE_NAME_MAX 32
int sys_dup2(int oldfd, int new); 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; rt_device_t dev_console;
dev_console = rt_console_get_device(); dev_console = rt_console_get_device();
if (dev_console) 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) if (fd < 0)
{ {
return -1; return -1;
...@@ -40,15 +41,14 @@ int libc_system_init(void) ...@@ -40,15 +41,14 @@ int libc_system_init(void)
sys_dup2(fd, 1); sys_dup2(fd, 1);
sys_dup2(fd, 2); sys_dup2(fd, 2);
} }
#endif /* RT_USING_POSIX_STDIO */
return 0; 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; 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; FILE *fp;
char name[STDIO_DEVICE_NAME_MAX]; char name[STDIO_DEVICE_NAME_MAX];
...@@ -111,7 +111,7 @@ int libc_stdio_set_console(const char* device_name, int mode) ...@@ -111,7 +111,7 @@ int libc_stdio_set_console(const char* device_name, int mode)
return -1; return -1;
} }
int libc_stdio_get_console(void) int rt_posix_stdio_get_console(void)
{ {
if (std_console) if (std_console)
return fileno(std_console); return fileno(std_console);
...@@ -119,11 +119,11 @@ int libc_stdio_get_console(void) ...@@ -119,11 +119,11 @@ int libc_stdio_get_console(void)
return -1; return -1;
} }
#elif defined(RT_USING_POSIX_STDIO) && defined(RT_USING_MUSLLIBC) #elif defined(RT_USING_MUSLLIBC)
static FILE* std_console = NULL; 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; FILE *fp;
char name[STDIO_DEVICE_NAME_MAX]; char name[STDIO_DEVICE_NAME_MAX];
...@@ -159,7 +159,7 @@ int libc_stdio_set_console(const char* device_name, int mode) ...@@ -159,7 +159,7 @@ int libc_stdio_set_console(const char* device_name, int mode)
return -1; return -1;
} }
int libc_stdio_get_console(void) int rt_posix_stdio_get_console(void)
{ {
int ret = -1; int ret = -1;
if (std_console) if (std_console)
...@@ -170,10 +170,10 @@ int libc_stdio_get_console(void) ...@@ -170,10 +170,10 @@ int libc_stdio_get_console(void)
return ret; return ret;
} }
#elif defined(RT_USING_POSIX_STDIO) #else
static int std_fd = -1; 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; int fd;
char name[STDIO_DEVICE_NAME_MAX]; char name[STDIO_DEVICE_NAME_MAX];
...@@ -194,28 +194,78 @@ int libc_stdio_set_console(const char* device_name, int mode) ...@@ -194,28 +194,78 @@ int libc_stdio_set_console(const char* device_name, int mode)
return std_fd; return std_fd;
} }
int libc_stdio_get_console(void) { int rt_posix_stdio_get_console(void) {
return std_fd; 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) char *cur_pos, *new_lineptr;
if(fd == STDOUT_FILENO || fd == STDERR_FILENO) 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 (*lineptr == NULL)
if(fd == STDIN_FILENO)
{ {
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 #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); *cur_pos++ = (char)c;
return 0;
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);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册