diff options
| author | guo <[email protected]> | 2021-10-27 12:22:35 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-10-27 12:22:35 +0800 |
| commit | 4d256eb308f4e9f7abc1644dda3fd675e560d518 (patch) | |
| tree | 4da0b0458ca8749c4fcee2ede8681304641ba89d /components/libc/compilers | |
| parent | 31bf735d2159995358315036be1529523ac96d7d (diff) | |
| parent | a9910a780edc43df6b64bcd13c37785a15ec3428 (diff) | |
Merge pull request #5228 from mysterywolf/posix
Diffstat (limited to 'components/libc/compilers')
20 files changed, 193 insertions, 272 deletions
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); |
