summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorMeco Man <[email protected]>2021-10-26 00:51:32 -0400
committerMeco Man <[email protected]>2021-10-26 23:09:54 -0400
commita9910a780edc43df6b64bcd13c37785a15ec3428 (patch)
tree0402e433f252c5ded3472deb266616ee7a47e90f /components
parent50bb6e33d13237f71812e81a6a13ba5ba0693c8f (diff)
[posix][libc] 优化libc中posix结构
Diffstat (limited to 'components')
-rw-r--r--components/dfs/src/dfs.c4
-rw-r--r--components/finsh/shell.c8
-rw-r--r--components/finsh/shell.h2
-rw-r--r--components/libc/Kconfig67
-rw-r--r--components/libc/compilers/armlibc/SConscript3
-rw-r--r--components/libc/compilers/armlibc/libc.c11
-rw-r--r--components/libc/compilers/armlibc/libc.h4
-rw-r--r--components/libc/compilers/armlibc/stdio.c9
-rw-r--r--components/libc/compilers/armlibc/syscalls.c121
-rw-r--r--components/libc/compilers/common/SConscript2
-rw-r--r--components/libc/compilers/dlib/SConscript5
-rw-r--r--components/libc/compilers/dlib/libc.c12
-rw-r--r--components/libc/compilers/dlib/libc.h2
-rw-r--r--components/libc/compilers/dlib/stdio.c12
-rw-r--r--components/libc/compilers/dlib/syscall_close.c11
-rw-r--r--components/libc/compilers/dlib/syscall_lseek.c7
-rw-r--r--components/libc/compilers/dlib/syscall_open.c12
-rw-r--r--components/libc/compilers/dlib/syscall_read.c18
-rw-r--r--components/libc/compilers/dlib/syscall_remove.c12
-rw-r--r--components/libc/compilers/dlib/syscall_write.c30
-rw-r--r--components/libc/compilers/gcc/newlib/libc.c15
-rw-r--r--components/libc/compilers/gcc/newlib/libc.h7
-rw-r--r--components/libc/compilers/gcc/newlib/stdio.c8
-rw-r--r--components/libc/compilers/gcc/newlib/syscalls.c164
24 files changed, 235 insertions, 311 deletions
diff --git a/components/dfs/src/dfs.c b/components/dfs/src/dfs.c
index fa93afd749..8cf642a2f9 100644
--- a/components/dfs/src/dfs.c
+++ b/components/dfs/src/dfs.c
@@ -18,7 +18,7 @@
#include <lwp.h>
#endif
-#ifdef RT_USING_LIBC
+#ifdef RT_LIBC_USING_FILEIO
#include <libc.h>
#endif
@@ -216,7 +216,7 @@ struct dfs_fd *fd_get(int fd)
struct dfs_fd *d;
struct dfs_fdtable *fdt;
-#ifdef RT_USING_LIBC
+#ifdef RT_LIBC_USING_FILEIO
if ((0 <= fd) && (fd <= 2))
fd = libc_stdio_get_console();
#endif
diff --git a/components/finsh/shell.c b/components/finsh/shell.c
index 292ea588cf..16aaaac27b 100644
--- a/components/finsh/shell.c
+++ b/components/finsh/shell.c
@@ -145,7 +145,7 @@ void finsh_set_prompt_mode(rt_uint32_t prompt_mode)
int finsh_getchar(void)
{
#ifdef RT_USING_DEVICE
-#ifdef RT_USING_LIBC
+#ifdef RT_LIBC_USING_FILEIO
return getchar();
#else
char ch = 0;
@@ -163,14 +163,14 @@ int finsh_getchar(void)
rt_sem_take(&shell->rx_sem, RT_WAITING_FOREVER);
return ch;
-#endif /* RT_USING_LIBC */
+#endif /* RT_LIBC_USING_FILEIO */
#else
extern char rt_hw_console_getchar(void);
return rt_hw_console_getchar();
#endif /* RT_USING_DEVICE */
}
-#if !defined(RT_USING_LIBC) && defined(RT_USING_DEVICE)
+#if !defined(RT_LIBC_USING_FILEIO) && defined(RT_USING_DEVICE)
static rt_err_t finsh_rx_ind(rt_device_t dev, rt_size_t size)
{
RT_ASSERT(shell != RT_NULL);
@@ -436,7 +436,7 @@ void finsh_thread_entry(void *parameter)
shell->echo_mode = 0;
#endif
-#if !defined(RT_USING_LIBC) && defined(RT_USING_DEVICE)
+#if !defined(RT_LIBC_USING_FILEIO) && defined(RT_USING_DEVICE)
/* set console device as shell device */
if (shell->device == RT_NULL)
{
diff --git a/components/finsh/shell.h b/components/finsh/shell.h
index 598596ce00..6082c77fd5 100644
--- a/components/finsh/shell.h
+++ b/components/finsh/shell.h
@@ -78,7 +78,7 @@ struct finsh_shell
rt_uint16_t line_position;
rt_uint16_t line_curpos;
-#if !defined(RT_USING_LIBC) && defined(RT_USING_DEVICE)
+#if !defined(RT_LIBC_USING_FILEIO) && defined(RT_USING_DEVICE)
rt_device_t device;
#endif
diff --git a/components/libc/Kconfig b/components/libc/Kconfig
index 812b1ce48c..b2af15e841 100644
--- a/components/libc/Kconfig
+++ b/components/libc/Kconfig
@@ -2,18 +2,49 @@ menu "POSIX layer and C standard library"
config RT_USING_LIBC
bool "Enable libc APIs from toolchain"
- select RT_USING_DFS
- select RT_USING_POSIX
default y
+if RT_USING_LIBC
+ config RT_LIBC_USING_TIME
+ default y
+
+ config RT_LIBC_USING_FILEIO
+ bool "Enable libc with file operation, eg.fopen/fwrite/fread/getchar"
+ select RT_USING_DFS
+ select RT_USING_POSIX
+ default n
+
+ config RT_USING_MODULE
+ bool "Enable dynamic module with dlopen/dlsym/dlclose feature"
+ default n
+
+ if RT_USING_MODULE
+ config RT_USING_CUSTOM_DLMODULE
+ bool "Enable load dynamic module by custom"
+ default n
+ endif
+endif
+
+if RT_USING_LIBC != y
+ config RT_LIBC_USING_TIME
+ bool "Enable time functions without compiler's libc"
+ default y
+endif
+
+config RT_LIBC_DEFAULT_TIMEZONE
+ depends on (RT_LIBC_USING_TIME || RT_USING_LIBC)
+ int "Set the default time zone (UTC+)"
+ range -12 12
+ default 8
+
config RT_USING_PTHREADS
bool "Enable pthreads APIs"
default n
if RT_USING_PTHREADS
config PTHREAD_NUM_MAX
- int "Maximum number of pthreads"
- default 8
+ int "Maximum number of pthreads"
+ default 8
endif
if RT_USING_DFS
@@ -42,32 +73,4 @@ if RT_USING_DFS
endif
-if RT_USING_LIBC
- config RT_LIBC_USING_TIME
- default y
-
- config RT_USING_MODULE
- bool "Enable dynamic module with dlopen/dlsym/dlclose feature"
- default n
-
- if RT_USING_MODULE
- config RT_USING_CUSTOM_DLMODULE
- bool "Enable load dynamic module by custom"
- default n
- endif
-
-endif
-
-if RT_USING_LIBC != y
- config RT_LIBC_USING_TIME
- bool "Enable time functions without compiler's libc"
- default y
-endif
-
-config RT_LIBC_DEFAULT_TIMEZONE
- depends on (RT_LIBC_USING_TIME || RT_USING_LIBC)
- int "Set the default time zone (UTC+)"
- range -12 12
- default 8
-
endmenu
diff --git a/components/libc/compilers/armlibc/SConscript b/components/libc/compilers/armlibc/SConscript
index 52f7a6d93a..d77a7c69d5 100644
--- a/components/libc/compilers/armlibc/SConscript
+++ b/components/libc/compilers/armlibc/SConscript
@@ -8,9 +8,6 @@ group = []
CPPPATH = [cwd]
CPPDEFINES = ['RT_USING_ARM_LIBC']
-if GetDepend('RT_USING_DFS') == False:
- SrcRemove(src, ['stdio.c'])
-
if GetDepend('RT_USING_MODULE') == False:
SrcRemove(src, ['libc_syms.c'])
diff --git a/components/libc/compilers/armlibc/libc.c b/components/libc/compilers/armlibc/libc.c
index 889c687309..bc09759fef 100644
--- a/components/libc/compilers/armlibc/libc.c
+++ b/components/libc/compilers/armlibc/libc.c
@@ -7,29 +7,24 @@
* Date Author Notes
* 2017/10/15 bernard the first version
*/
-#include <fcntl.h>
#include <rtthread.h>
+#include <fcntl.h>
#include "libc.h"
-
#ifdef RT_USING_PTHREADS
#include <pthread.h>
#endif
int libc_system_init(void)
{
-#if defined(RT_USING_DFS) & defined(RT_USING_DFS_DEVFS)
+#ifdef RT_USING_POSIX
rt_device_t dev_console;
dev_console = rt_console_get_device();
if (dev_console)
{
- #if defined(RT_USING_POSIX)
libc_stdio_set_console(dev_console->parent.name, O_RDWR);
- #else
- libc_stdio_set_console(dev_console->parent.name, O_WRONLY);
- #endif
}
-#endif
+#endif /* RT_USING_POSIX */
#if defined RT_USING_PTHREADS && !defined RT_USING_COMPONENTS_INIT
pthread_system_init();
diff --git a/components/libc/compilers/armlibc/libc.h b/components/libc/compilers/armlibc/libc.h
index 5c1613728e..f81380bf78 100644
--- a/components/libc/compilers/armlibc/libc.h
+++ b/components/libc/compilers/armlibc/libc.h
@@ -10,13 +10,17 @@
#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
int libc_stdio_get_console(void);
int libc_stdio_set_console(const char* device_name, int mode);
+#endif /* RT_USING_POSIX */
#ifdef __cplusplus
}
diff --git a/components/libc/compilers/armlibc/stdio.c b/components/libc/compilers/armlibc/stdio.c
index 7dd9dbfe3f..e5db167ea4 100644
--- a/components/libc/compilers/armlibc/stdio.c
+++ b/components/libc/compilers/armlibc/stdio.c
@@ -7,16 +7,17 @@
* Date Author Notes
* 2017/10/15 bernard implement stdio for armcc.
*/
+#include <rtthread.h>
+#ifdef RT_USING_POSIX
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <rtthread.h>
#include "libc.h"
-#if defined(RT_USING_DFS) && defined(RT_USING_DFS_DEVFS)
-#include <dfs_posix.h>
+#include <fcntl.h>
+#include <unistd.h>
#define STDIO_DEVICE_NAME_MAX 32
@@ -48,4 +49,4 @@ int libc_stdio_get_console(void)
return std_fd;
}
-#endif
+#endif /* RT_USING_POSIX */
diff --git a/components/libc/compilers/armlibc/syscalls.c b/components/libc/compilers/armlibc/syscalls.c
index ccdcfc86ea..ecb1a9da5a 100644
--- a/components/libc/compilers/armlibc/syscalls.c
+++ b/components/libc/compilers/armlibc/syscalls.c
@@ -14,16 +14,15 @@
* 2020-02-13 Meco Man re-implement exit() and abort()
* 2020-02-14 Meco Man implement _sys_tmpnam()
*/
-
#include <string.h>
#include <rt_sys.h>
#include <rtthread.h>
#include "libc.h"
-#ifdef RT_USING_DFS
-#include <dfs_posix.h>
-#endif
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
#define DBG_TAG "armlibc.syscalls"
#define DBG_LVL DBG_INFO
@@ -55,7 +54,7 @@ const char __stderr_name[] = "STDERR";
*/
FILEHANDLE _sys_open(const char *name, int openmode)
{
-#ifdef RT_USING_DFS
+#ifdef RT_LIBC_USING_FILEIO
int fd;
int mode = O_RDONLY;
#endif
@@ -68,8 +67,8 @@ FILEHANDLE _sys_open(const char *name, int openmode)
if (strcmp(name, __stderr_name) == 0)
return (STDERR);
-#ifndef RT_USING_DFS
- return -1;
+#ifndef RT_LIBC_USING_FILEIO
+ return 0; /* error */
#else
/* Correct openmode from fopen to open */
if (openmode & OPEN_PLUS)
@@ -99,21 +98,22 @@ FILEHANDLE _sys_open(const char *name, int openmode)
fd = open(name, mode, 0);
if (fd < 0)
- return -1;
+ return 0; /* error */
else
return fd;
-#endif
+#endif /* RT_LIBC_USING_FILEIO */
}
int _sys_close(FILEHANDLE fh)
{
-#ifndef RT_USING_DFS
- return 0;
-#else
- if (fh <= STDERR) return 0;
+#ifdef RT_LIBC_USING_FILEIO
+ if (fh <= STDERR)
+ return 0; /* error */
return close(fh);
-#endif
+#else
+ return 0;
+#endif /* RT_LIBC_USING_FILEIO */
}
/*
@@ -143,13 +143,11 @@ int _sys_close(FILEHANDLE fh)
*/
int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
{
-#ifdef RT_USING_DFS
+#ifdef RT_LIBC_USING_FILEIO
int size;
-#endif
if (fh == STDIN)
{
-#ifdef RT_USING_POSIX
if (libc_stdio_get_console() < 0)
{
LOG_W("Do not invoke standard output before initializing libc");
@@ -157,25 +155,20 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
}
size = read(STDIN_FILENO, buf, len);
return len - size;
-#else
- /* no stdin */
- return -1;
-#endif
}
else if ((fh == STDOUT) || (fh == STDERR))
{
- return -1;
+ return 0; /* error */
}
-#ifndef RT_USING_DFS
- return 0;
-#else
size = read(fh, buf, len);
if (size >= 0)
return len - size;
else
- return -1;
-#endif
+ return 0; /* error */
+#else
+ return 0; /* error */
+#endif /* RT_LIBC_USING_FILEIO */
}
/*
@@ -185,16 +178,13 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
*/
int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
{
-#ifdef RT_USING_DFS
+#ifdef RT_LIBC_USING_FILEIO
int size;
-#endif
+#endif /* RT_LIBC_USING_FILEIO */
if ((fh == STDOUT) || (fh == STDERR))
{
-#if !defined(RT_USING_CONSOLE) || !defined(RT_USING_DEVICE)
- return 0;
-#else
-#ifdef RT_USING_POSIX
+#ifdef RT_LIBC_USING_FILEIO
if (libc_stdio_get_console() < 0)
{
LOG_W("Do not invoke standard input before initializing libc");
@@ -202,31 +192,29 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
}
size = write(STDOUT_FILENO, buf, len);
return len - size;
-#else
+#elif defined(RT_USING_CONSOLE)
if (rt_console_get_device())
{
rt_device_write(rt_console_get_device(), -1, buf, len);
- return 0;
}
- return -1;
-#endif
-#endif
+ return 0; /* error */
+#endif /* RT_LIBC_USING_FILEIO */
}
else if (fh == STDIN)
{
- return -1;
+ return 0; /* error */
}
-#ifndef RT_USING_DFS
- return 0;
-#else
+#ifdef RT_LIBC_USING_FILEIO
size = write(fh, buf, len);
if (size >= 0)
return len - size;
else
- return -1;
-#endif
+ return 0; /* error */
+#else
+ return 0;
+#endif /* RT_LIBC_USING_FILEIO */
}
/*
@@ -235,16 +223,15 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
*/
int _sys_seek(FILEHANDLE fh, long pos)
{
+#ifdef RT_LIBC_USING_FILEIO
if (fh < STDERR)
- return -1;
-
-#ifndef RT_USING_DFS
- return -1;
-#else
+ return 0; /* error */
/* position is relative to the start of file fh */
return lseek(fh, pos, 0);
-#endif
+#else
+ return 0; /* error */
+#endif /* RT_LIBC_USING_FILEIO */
}
/**
@@ -270,7 +257,7 @@ void _ttywrch(int ch)
c = (char)ch;
rt_kprintf(&c);
-#endif
+#endif /* RT_USING_CONSOLE */
}
/* for exit() and abort() */
@@ -289,17 +276,17 @@ RT_WEAK void _sys_exit(int return_code)
*/
long _sys_flen(FILEHANDLE fh)
{
-#ifdef RT_USING_DFS
+#ifdef RT_LIBC_USING_FILEIO
struct stat stat;
if (fh < STDERR)
- return -1;
+ return 0; /* error */
fstat(fh, &stat);
return stat.st_size;
#else
- return -1;
-#endif
+ return 0;
+#endif /* RT_LIBC_USING_FILEIO */
}
int _sys_istty(FILEHANDLE fh)
@@ -312,11 +299,11 @@ int _sys_istty(FILEHANDLE fh)
int remove(const char *filename)
{
-#ifndef RT_USING_DFS
- return -1;
-#else
+#ifdef RT_LIBC_USING_FILEIO
return unlink(filename);
-#endif
+#else
+ return 0; /* error */
+#endif /* RT_LIBC_USING_FILEIO */
}
#ifdef __MICROLIB
@@ -324,28 +311,32 @@ int remove(const char *filename)
int fputc(int c, FILE *f)
{
+#ifdef RT_USING_CONSOLE
char ch[2] = {0};
ch[0] = c;
rt_kprintf(&ch[0]);
return 1;
+#else
+ return 0; /* error */
+#endif /* RT_USING_CONSOLE */
}
int fgetc(FILE *f)
{
-#ifdef RT_USING_POSIX
+#ifdef RT_LIBC_USING_FILEIO
char ch;
if (libc_stdio_get_console() < 0)
{
LOG_W("Do not invoke standard output before initializing libc");
- return -1;
+ return 0;
}
if(read(STDIN_FILENO, &ch, 1) == 1)
return ch;
-#endif
-
- return -1;
+#endif /* RT_LIBC_USING_FILEIO */
+ return 0; /* error */
}
-#endif
+
+#endif /* __MICROLIB */
diff --git a/components/libc/compilers/common/SConscript b/components/libc/compilers/common/SConscript
index b7a6626a36..1c1d645564 100644
--- a/components/libc/compilers/common/SConscript
+++ b/components/libc/compilers/common/SConscript
@@ -11,7 +11,7 @@ CPPDEFINES = []
if GetDepend('RT_USING_LIBC'):
src += Glob('*.c')
elif GetDepend('RT_LIBC_USING_TIME'):
- src += Glob('time.c')
+ src += ['time.c']
if rtconfig.CROSS_TOOL == 'keil':
CPPDEFINES += ['__CLK_TCK=RT_TICK_PER_SECOND']
diff --git a/components/libc/compilers/dlib/SConscript b/components/libc/compilers/dlib/SConscript
index 75a5812fab..3eee0e0184 100644
--- a/components/libc/compilers/dlib/SConscript
+++ b/components/libc/compilers/dlib/SConscript
@@ -11,7 +11,7 @@ CPPDEFINES = ['RT_USING_DLIBC']
if rtconfig.PLATFORM == 'iar':
- if GetDepend('RT_USING_DFS'):
+ if GetDepend('RT_LIBC_USING_FILEIO'):
from distutils.version import LooseVersion
from iar import IARVersion
@@ -20,7 +20,6 @@ if rtconfig.PLATFORM == 'iar':
if LooseVersion(IARVersion()) < LooseVersion("8.20.1"):
CPPDEFINES = CPPDEFINES + ['_DLIB_THREAD_SUPPORT']
- group = DefineGroup('libc', src, depend = ['RT_USING_LIBC'],
- CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
+ group = DefineGroup('libc', src, depend = ['RT_USING_LIBC'], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
Return('group')
diff --git a/components/libc/compilers/dlib/libc.c b/components/libc/compilers/dlib/libc.c
index f540ac955f..f6e504bdae 100644
--- a/components/libc/compilers/dlib/libc.c
+++ b/components/libc/compilers/dlib/libc.c
@@ -7,29 +7,24 @@
* Date Author Notes
* 2017/10/15 bernard the first version
*/
-#include <fcntl.h>
#include <rtthread.h>
+#include <fcntl.h>
#include "libc.h"
-
#ifdef RT_USING_PTHREADS
#include <pthread.h>
#endif
int libc_system_init(void)
{
-#if defined(RT_USING_DFS) && defined(RT_USING_DFS_DEVFS)
+#ifdef RT_USING_POSIX
rt_device_t dev_console;
dev_console = rt_console_get_device();
if (dev_console)
{
- #if defined(RT_USING_POSIX)
libc_stdio_set_console(dev_console->parent.name, O_RDWR);
- #else
- libc_stdio_set_console(dev_console->parent.name, O_WRONLY);
- #endif
}
-#endif
+#endif /* RT_USING_POSIX */
#if defined (RT_USING_PTHREADS) && !defined (RT_USING_COMPONENTS_INIT)
pthread_system_init();
@@ -38,4 +33,3 @@ int libc_system_init(void)
return 0;
}
INIT_COMPONENT_EXPORT(libc_system_init);
-
diff --git a/components/libc/compilers/dlib/libc.h b/components/libc/compilers/dlib/libc.h
index 9643c1161f..292dbde973 100644
--- a/components/libc/compilers/dlib/libc.h
+++ b/components/libc/compilers/dlib/libc.h
@@ -16,8 +16,10 @@ extern "C" {
#endif
int libc_system_init(void);
+#ifdef RT_USING_POSIX
int libc_stdio_get_console(void);
int libc_stdio_set_console(const char* device_name, int mode);
+#endif /* RT_USING_POSIX */
#ifdef __cplusplus
}
diff --git a/components/libc/compilers/dlib/stdio.c b/components/libc/compilers/dlib/stdio.c
index ed3f5dfef9..fea98aedd5 100644
--- a/components/libc/compilers/dlib/stdio.c
+++ b/components/libc/compilers/dlib/stdio.c
@@ -7,17 +7,17 @@
* Date Author Notes
* 2017/10/15 bernard implement stdio for IAR dlib.
*/
+#include <rtthread.h>
+
+#ifdef RT_USING_POSIX
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-
-#include <rtthread.h>
+#include <fcntl.h>
+#include <unistd.h>
#include "libc.h"
-#if defined(RT_USING_DFS) && defined(RT_USING_DFS_DEVFS)
-#include <dfs_posix.h>
-
#define STDIO_DEVICE_NAME_MAX 32
static int std_fd = -1;
@@ -46,4 +46,4 @@ int libc_stdio_get_console(void) {
return std_fd;
}
-#endif
+#endif /* RT_USING_POSIX */
diff --git a/components/libc/compilers/dlib/syscall_close.c b/components/libc/compilers/dlib/syscall_close.c
index 7ed1cc2f2d..bafe21aa4b 100644
--- a/components/libc/compilers/dlib/syscall_close.c
+++ b/components/libc/compilers/dlib/syscall_close.c
@@ -8,10 +8,8 @@
* 2015-01-28 Bernard first version
*/
#include <rtthread.h>
-#ifdef RT_USING_DFS
-#include <dfs_posix.h>
-#endif
#include <yfuns.h>
+#include <unistd.h>
#pragma module_name = "?__close"
int __close(int handle)
@@ -20,10 +18,9 @@ int __close(int handle)
handle == _LLIO_STDERR ||
handle == _LLIO_STDIN)
return _LLIO_ERROR;
-
-#ifdef RT_USING_DFS
+#ifdef RT_LIBC_USING_FILEIO
return close(handle);
#else
- return 0;
-#endif
+ return _LLIO_ERROR;
+#endif /* RT_LIBC_USING_FILEIO */
}
diff --git a/components/libc/compilers/dlib/syscall_lseek.c b/components/libc/compilers/dlib/syscall_lseek.c
index 47a069bf0a..4a3a5c6a46 100644
--- a/components/libc/compilers/dlib/syscall_lseek.c
+++ b/components/libc/compilers/dlib/syscall_lseek.c
@@ -8,10 +8,8 @@
* 2015-01-28 Bernard first version
*/
#include <rtthread.h>
-#ifdef RT_USING_DFS
-#include <dfs_posix.h>
-#endif
#include <yfuns.h>
+#include <unistd.h>
#pragma module_name = "?__lseek"
long __lseek(int handle, long offset, int whence)
@@ -20,8 +18,7 @@ long __lseek(int handle, long offset, int whence)
handle == _LLIO_STDERR ||
handle == _LLIO_STDIN)
return _LLIO_ERROR;
-
-#ifdef RT_USING_DFS
+#ifdef RT_LIBC_USING_FILEIO
return lseek(handle, offset, whence);
#else
return _LLIO_ERROR;
diff --git a/components/libc/compilers/dlib/syscall_open.c b/components/libc/compilers/dlib/syscall_open.c
index 37bfcecb47..891b9afe58 100644
--- a/components/libc/compilers/dlib/syscall_open.c
+++ b/components/libc/compilers/dlib/syscall_open.c
@@ -10,17 +10,13 @@
#include <rtthread.h>
#include <yfuns.h>
-#ifdef RT_USING_DFS
-#include <dfs_posix.h>
-#endif
+#include <fcntl.h>
#pragma module_name = "?__open"
int __open(const char *filename, int mode)
{
-#ifndef RT_USING_DFS
- return _LLIO_ERROR;
-#else
+#ifdef RT_LIBC_USING_FILEIO
int handle;
int open_mode = O_RDONLY;
@@ -70,5 +66,7 @@ int __open(const char *filename, int mode)
return _LLIO_ERROR;
return handle;
-#endif
+#else
+ return _LLIO_ERROR;
+#endif /* RT_LIBC_USING_FILEIO */
}
diff --git a/components/libc/compilers/dlib/syscall_read.c b/components/libc/compilers/dlib/syscall_read.c
index ae980be6ca..f65b502966 100644
--- a/components/libc/compilers/dlib/syscall_read.c
+++ b/components/libc/compilers/dlib/syscall_read.c
@@ -9,10 +9,8 @@
*/
#include <rtthread.h>
-#ifdef RT_USING_DFS
-#include <dfs_posix.h>
-#endif
#include <yfuns.h>
+#include <unistd.h>
#include "libc.h"
#define DBG_TAG "dlib.syscall_read"
@@ -22,32 +20,26 @@
#pragma module_name = "?__read"
size_t __read(int handle, unsigned char *buf, size_t len)
{
-#ifdef RT_USING_DFS
+#ifdef RT_LIBC_USING_FILEIO
int size;
-#endif
if (handle == _LLIO_STDIN)
{
-#ifdef RT_USING_POSIX
if (libc_stdio_get_console() < 0)
{
LOG_W("Do not invoke standard input before initializing libc");
return 0;
}
return read(STDIN_FILENO, buf, len);
-#else
- return _LLIO_ERROR;
-#endif
}
else if ((handle == _LLIO_STDOUT) || (handle == _LLIO_STDERR))
{
return _LLIO_ERROR;
}
-#ifndef RT_USING_DFS
- return _LLIO_ERROR;
-#else
size = read(handle, buf, len);
return size;
-#endif
+#else
+ return _LLIO_ERROR;
+#endif /* RT_LIBC_USING_FILEIO */
}
diff --git a/components/libc/compilers/dlib/syscall_remove.c b/components/libc/compilers/dlib/syscall_remove.c
index 7d74236f4c..05bfbb67ae 100644
--- a/components/libc/compilers/dlib/syscall_remove.c
+++ b/components/libc/compilers/dlib/syscall_remove.c
@@ -8,17 +8,15 @@
* 2015-01-28 Bernard first version
*/
#include <rtthread.h>
-#ifdef RT_USING_DFS
-#include <dfs_posix.h>
-#endif
#include <yfuns.h>
+#include <unistd.h>
#pragma module_name = "?remove"
int remove(const char *val)
{
-#ifndef RT_USING_DFS
- return -1;
-#else
+#ifdef RT_USING_POSIX
return unlink(val);
-#endif
+#else
+ return -1;
+#endif /* RT_USING_POSIX */
}
diff --git a/components/libc/compilers/dlib/syscall_write.c b/components/libc/compilers/dlib/syscall_write.c
index ffee51882d..af47d64a3e 100644
--- a/components/libc/compilers/dlib/syscall_write.c
+++ b/components/libc/compilers/dlib/syscall_write.c
@@ -9,10 +9,8 @@
*/
#include <rtthread.h>
-#ifdef RT_USING_DFS
-#include <dfs_posix.h>
-#endif
#include <yfuns.h>
+#include <unistd.h>
#include "libc.h"
#define DBG_TAG "dlib.syscall_write"
@@ -23,24 +21,20 @@
size_t __write(int handle, const unsigned char *buf, size_t len)
{
-#ifdef RT_USING_DFS
+#ifdef RT_LIBC_USING_FILEIO
int size;
-#endif
+#endif /* RT_LIBC_USING_FILEIO */
if ((handle == _LLIO_STDOUT) || (handle == _LLIO_STDERR))
{
-#ifndef RT_USING_CONSOLE
- return _LLIO_ERROR;
-#else
-
-#ifdef RT_USING_POSIX
+#ifdef RT_LIBC_USING_FILEIO
if (libc_stdio_get_console() < 0)
{
LOG_W("Do not invoke standard output before initializing libc");
return 0;
}
return write(STDOUT_FILENO, (void*)buf, len);
-#else
+#elif defined(RT_USING_CONSOLE)
rt_device_t console_device;
console_device = rt_console_get_device();
@@ -50,19 +44,19 @@ size_t __write(int handle, const unsigned char *buf, size_t len)
}
return len;
-#endif
-#endif
+#else
+ return _LLIO_ERROR;
+#endif /* RT_LIBC_USING_FILEIO */
}
else if (handle == _LLIO_STDIN)
{
return _LLIO_ERROR;
}
-#ifndef RT_USING_DFS
- return _LLIO_ERROR;
-#else
+#ifdef RT_LIBC_USING_FILEIO
size = write(handle, buf, len);
return size;
-#endif
+#else
+ return _LLIO_ERROR;
+#endif /* RT_LIBC_USING_FILEIO */
}
-
diff --git a/components/libc/compilers/gcc/newlib/libc.c b/components/libc/compilers/gcc/newlib/libc.c
index 9834a9a015..943d127eed 100644
--- a/components/libc/compilers/gcc/newlib/libc.c
+++ b/components/libc/compilers/gcc/newlib/libc.c
@@ -12,34 +12,23 @@
#include <stdlib.h>
#include <fcntl.h>
#include <sys/time.h>
-
#include "libc.h"
#ifdef RT_USING_PTHREADS
#include <pthread.h>
#endif
-int _EXFUN(putenv,(char *__string));
-
int libc_system_init(void)
{
-#if defined(RT_USING_DFS) & defined(RT_USING_DFS_DEVFS) & defined(RT_USING_CONSOLE)
+#ifdef RT_LIBC_USING_FILEIO
rt_device_t dev_console;
dev_console = rt_console_get_device();
if (dev_console)
{
- #if defined(RT_USING_POSIX)
libc_stdio_set_console(dev_console->parent.name, O_RDWR);
- #else
- libc_stdio_set_console(dev_console->parent.name, O_WRONLY);
- #endif
}
-
- /* set PATH and HOME */
- putenv("PATH=/bin");
- putenv("HOME=/home");
-#endif
+#endif /* RT_LIBC_USING_FILEIO */
#if defined RT_USING_PTHREADS && !defined RT_USING_COMPONENTS_INIT
pthread_system_init();
diff --git a/components/libc/compilers/gcc/newlib/libc.h b/components/libc/compilers/gcc/newlib/libc.h
index c470698aa6..fdb0a45472 100644
--- a/components/libc/compilers/gcc/newlib/libc.h
+++ b/components/libc/compilers/gcc/newlib/libc.h
@@ -10,16 +10,15 @@
#ifndef __RTT_LIBC_H__
#define __RTT_LIBC_H__
-#ifndef _EXFUN
-#define _EXFUN(name, proto) name proto
-#endif
-
#ifdef __cplusplus
extern "C" {
#endif
+
int libc_system_init(void);
+#ifdef RT_LIBC_USING_FILEIO
int libc_stdio_get_console(void);
int libc_stdio_set_console(const char* device_name, int mode);
+#endif /* RT_LIBC_USING_FILEIO */
#ifdef __cplusplus
}
diff --git a/components/libc/compilers/gcc/newlib/stdio.c b/components/libc/compilers/gcc/newlib/stdio.c
index 1875d50e3f..5f9dd2de4c 100644
--- a/components/libc/compilers/gcc/newlib/stdio.c
+++ b/components/libc/compilers/gcc/newlib/stdio.c
@@ -7,16 +7,16 @@
* Date Author Notes
* 2017/10/15 bernard the first version
*/
+#include <rtthread.h>
+
+#ifdef RT_LIBC_USING_FILEIO
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
-#include <rtthread.h>
#include "libc.h"
#define STDIO_DEVICE_NAME_MAX 32
-int _EXFUN(fileno, (FILE *));
-
static FILE* std_console = NULL;
int libc_stdio_set_console(const char* device_name, int mode)
@@ -79,3 +79,5 @@ int libc_stdio_get_console(void)
else
return -1;
}
+
+#endif /* RT_LIBC_USING_FILEIO */
diff --git a/components/libc/compilers/gcc/newlib/syscalls.c b/components/libc/compilers/gcc/newlib/syscalls.c
index f5a2c16ecc..6cb60e1776 100644
--- a/components/libc/compilers/gcc/newlib/syscalls.c
+++ b/components/libc/compilers/gcc/newlib/syscalls.c
@@ -13,9 +13,16 @@
#include <reent.h>
#include <rtthread.h>
+#include <stdio.h>
#include <stddef.h>
+#include <fcntl.h>
#include <unistd.h>
#include <sys/errno.h>
+#include <sys/stat.h>
+#include "libc.h"
+#ifdef RT_USING_MODULE
+#include <dlmodule.h>
+#endif
#define DBG_TAG "newlib.syscalls"
#define DBG_LVL DBG_INFO
@@ -83,18 +90,8 @@ void __libc_init_array(void)
}
#ifdef RT_USING_LIBC
-#include <reent.h>
-#include <stdio.h>
-#include "libc.h"
-#ifdef RT_USING_DFS
-#include <dfs_posix.h>
-#endif
-#ifdef RT_USING_MODULE
-#include <dlmodule.h>
-#endif
/* Reentrant versions of system calls. */
-
#ifndef _REENT_ONLY
int *__errno ()
{
@@ -109,39 +106,29 @@ int _getpid_r(struct _reent *ptr)
int _close_r(struct _reent *ptr, int fd)
{
-#ifndef RT_USING_DFS
- /* return "not supported" */
- ptr->_errno = ENOTSUP;
- return -1;
-#else
return close(fd);
-#endif
}
int _execve_r(struct _reent *ptr, const char * name, char *const *argv, char *const *env)
{
- /* return "not supported" */
ptr->_errno = ENOTSUP;
return -1;
}
int _fcntl_r(struct _reent *ptr, int fd, int cmd, int arg)
{
- /* return "not supported" */
ptr->_errno = ENOTSUP;
return -1;
}
int _fork_r(struct _reent *ptr)
{
- /* return "not supported" */
ptr->_errno = ENOTSUP;
return -1;
}
int _fstat_r(struct _reent *ptr, int fd, struct stat *pstat)
{
- /* return "not supported" */
ptr->_errno = ENOTSUP;
return -1;
}
@@ -160,67 +147,74 @@ int _isatty_r(struct _reent *ptr, int fd)
int _kill_r(struct _reent *ptr, int pid, int sig)
{
- /* return "not supported" */
ptr->_errno = ENOTSUP;
return -1;
}
int _link_r(struct _reent *ptr, const char *old, const char *new)
{
- /* return "not supported" */
ptr->_errno = ENOTSUP;
return -1;
}
-_off_t _lseek_r(struct _reent *ptr, int fd, _off_t pos, int whence)
+int _wait_r(struct _reent *ptr, int *status)
{
-#ifndef RT_USING_DFS
- /* return "not supported" */
ptr->_errno = ENOTSUP;
return -1;
-#else
+}
+
+mode_t umask(mode_t mask)
+{
+ return 022;
+}
+
+int flock(int fd, int operation)
+{
+ return 0;
+}
+
+_off_t _lseek_r(struct _reent *ptr, int fd, _off_t pos, int whence)
+{
+#ifdef RT_LIBC_USING_FILEIO
_off_t rc;
rc = lseek(fd, pos, whence);
return rc;
-#endif
+#else
+ ptr->_errno = ENOTSUP;
+ return -1;
+#endif /* RT_LIBC_USING_FILEIO */
}
int _mkdir_r(struct _reent *ptr, const char *name, int mode)
{
-#ifndef RT_USING_DFS
- /* return "not supported" */
- ptr->_errno = ENOTSUP;
- return -1;
-#else
+#ifdef RT_LIBC_USING_FILEIO
int rc;
rc = mkdir(name, mode);
return rc;
-#endif
+#else
+ ptr->_errno = ENOTSUP;
+ return -1;
+#endif /* RT_LIBC_USING_FILEIO */
}
int _open_r(struct _reent *ptr, const char *file, int flags, int mode)
{
-#ifndef RT_USING_DFS
- /* return "not supported" */
- ptr->_errno = ENOTSUP;
- return -1;
-#else
+#ifdef RT_LIBC_USING_FILEIO
int rc;
rc = open(file, flags, mode);
return rc;
-#endif
+#else
+ ptr->_errno = ENOTSUP;
+ return -1;
+#endif /* RT_LIBC_USING_FILEIO */
}
_ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes)
{
-#ifndef RT_USING_DFS
- /* return "not supported" */
- ptr->_errno = ENOTSUP;
- return -1;
-#else
+#ifdef RT_LIBC_USING_FILEIO
_ssize_t rc;
if (libc_stdio_get_console() < 0 && fd == STDIN_FILENO)
{
@@ -229,74 +223,51 @@ _ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes)
}
rc = read(fd, buf, nbytes);
return rc;
-#endif
+#else
+ ptr->_errno = ENOTSUP;
+ return -1;
+#endif /* RT_LIBC_USING_FILEIO */
}
int _rename_r(struct _reent *ptr, const char *old, const char *new)
{
-#ifndef RT_USING_DFS
- /* return "not supported" */
- ptr->_errno = ENOTSUP;
- return -1;
-#else
+#ifdef RT_LIBC_USING_FILEIO
int rc;
rc = rename(old, new);
return rc;
-#endif
+#else
+ ptr->_errno = ENOTSUP;
+ return -1;
+#endif /* RT_LIBC_USING_FILEIO */
}
int _stat_r(struct _reent *ptr, const char *file, struct stat *pstat)
{
-#ifndef RT_USING_DFS
- /* return "not supported" */
- ptr->_errno = ENOTSUP;
- return -1;
-#else
+#ifdef RT_LIBC_USING_FILEIO
int rc;
rc = stat(file, pstat);
return rc;
-#endif
-}
-
-int _unlink_r(struct _reent *ptr, const char *file)
-{
-#ifndef RT_USING_DFS
- /* return "not supported" */
+#else
ptr->_errno = ENOTSUP;
return -1;
-#else
- return unlink(file);
-#endif
+#endif /* RT_LIBC_USING_FILEIO */
}
-int _wait_r(struct _reent *ptr, int *status)
+int _unlink_r(struct _reent *ptr, const char *file)
{
- /* return "not supported" */
+#ifdef RT_LIBC_USING_FILEIO
+ return unlink(file);
+#else
ptr->_errno = ENOTSUP;
return -1;
+#endif /* RT_LIBC_USING_FILEIO */
}
_ssize_t _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes)
{
-#ifndef RT_USING_DFS
-#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
- if (STDOUT_FILENO == fd)
- {
- rt_device_t console;
-
- console = rt_console_get_device();
- if (console) return rt_device_write(console, -1, buf, nbytes);
- }
-
- return 0;
-#else
- /* return "not supported" */
- ptr->_errno = ENOTSUP;
- return -1;
-#endif /*RT_USING_DEVICE*/
-#else
+#ifdef RT_LIBC_USING_FILEIO
_ssize_t rc;
if (libc_stdio_get_console() < 0 && fd == STDOUT_FILENO)
{
@@ -305,7 +276,18 @@ _ssize_t _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes)
}
rc = write(fd, buf, nbytes);
return rc;
-#endif
+#elif defined(RT_USING_CONSOLE)
+ if (STDOUT_FILENO == fd)
+ {
+ rt_device_t console;
+
+ console = rt_console_get_device();
+ if (console)
+ return rt_device_write(console, -1, buf, nbytes);
+ }
+#endif /* RT_LIBC_USING_FILEIO */
+ ptr->_errno = ENOTSUP;
+ return -1;
}
/* for exit() and abort() */
@@ -316,16 +298,6 @@ __attribute__ ((noreturn)) void _exit (int status)
while(1);
}
-mode_t umask(mode_t mask)
-{
- return 022;
-}
-
-int flock(int fd, int operation)
-{
- return 0;
-}
-
/*
These functions are implemented and replaced by the 'common/time.c' file
int _gettimeofday_r(struct _reent *ptr, struct timeval *__tp, void *__tzp);