mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-22 03:09:16 +08:00
Merge pull request #5228 from mysterywolf/posix
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
+35
-32
@@ -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
|
||||
|
||||
@@ -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'])
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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']
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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,162 +147,22 @@ 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)
|
||||
{
|
||||
#ifndef RT_USING_DFS
|
||||
/* return "not supported" */
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
#else
|
||||
_off_t rc;
|
||||
|
||||
rc = lseek(fd, pos, whence);
|
||||
return rc;
|
||||
#endif
|
||||
}
|
||||
|
||||
int _mkdir_r(struct _reent *ptr, const char *name, int mode)
|
||||
{
|
||||
#ifndef RT_USING_DFS
|
||||
/* return "not supported" */
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
#else
|
||||
int rc;
|
||||
|
||||
rc = mkdir(name, mode);
|
||||
return rc;
|
||||
#endif
|
||||
}
|
||||
|
||||
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
|
||||
int rc;
|
||||
|
||||
rc = open(file, flags, mode);
|
||||
return rc;
|
||||
#endif
|
||||
}
|
||||
|
||||
_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
|
||||
_ssize_t rc;
|
||||
if (libc_stdio_get_console() < 0 && fd == STDIN_FILENO)
|
||||
{
|
||||
LOG_W("Do not invoke standard input before initializing libc");
|
||||
return 0;
|
||||
}
|
||||
rc = read(fd, buf, nbytes);
|
||||
return rc;
|
||||
#endif
|
||||
}
|
||||
|
||||
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
|
||||
int rc;
|
||||
|
||||
rc = rename(old, new);
|
||||
return rc;
|
||||
#endif
|
||||
}
|
||||
|
||||
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
|
||||
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" */
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
#else
|
||||
return unlink(file);
|
||||
#endif
|
||||
}
|
||||
|
||||
int _wait_r(struct _reent *ptr, int *status)
|
||||
{
|
||||
/* return "not supported" */
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
_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
|
||||
_ssize_t rc;
|
||||
if (libc_stdio_get_console() < 0 && fd == STDOUT_FILENO)
|
||||
{
|
||||
LOG_W("Do not invoke standard output before initializing libc");
|
||||
return 0;
|
||||
}
|
||||
rc = write(fd, buf, nbytes);
|
||||
return rc;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* for exit() and abort() */
|
||||
__attribute__ ((noreturn)) void _exit (int status)
|
||||
{
|
||||
extern void __rt_libc_exit(int status);
|
||||
__rt_libc_exit(status);
|
||||
while(1);
|
||||
}
|
||||
|
||||
mode_t umask(mode_t mask)
|
||||
{
|
||||
return 022;
|
||||
@@ -326,6 +173,131 @@ 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;
|
||||
#else
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
#endif /* RT_LIBC_USING_FILEIO */
|
||||
}
|
||||
|
||||
int _mkdir_r(struct _reent *ptr, const char *name, int mode)
|
||||
{
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
int rc;
|
||||
|
||||
rc = mkdir(name, mode);
|
||||
return rc;
|
||||
#else
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
#endif /* RT_LIBC_USING_FILEIO */
|
||||
}
|
||||
|
||||
int _open_r(struct _reent *ptr, const char *file, int flags, int mode)
|
||||
{
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
int rc;
|
||||
|
||||
rc = open(file, flags, mode);
|
||||
return rc;
|
||||
#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)
|
||||
{
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
_ssize_t rc;
|
||||
if (libc_stdio_get_console() < 0 && fd == STDIN_FILENO)
|
||||
{
|
||||
LOG_W("Do not invoke standard input before initializing libc");
|
||||
return 0;
|
||||
}
|
||||
rc = read(fd, buf, nbytes);
|
||||
return rc;
|
||||
#else
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
#endif /* RT_LIBC_USING_FILEIO */
|
||||
}
|
||||
|
||||
int _rename_r(struct _reent *ptr, const char *old, const char *new)
|
||||
{
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
int rc;
|
||||
|
||||
rc = rename(old, new);
|
||||
return rc;
|
||||
#else
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
#endif /* RT_LIBC_USING_FILEIO */
|
||||
}
|
||||
|
||||
int _stat_r(struct _reent *ptr, const char *file, struct stat *pstat)
|
||||
{
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
int rc;
|
||||
|
||||
rc = stat(file, pstat);
|
||||
return rc;
|
||||
#else
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
#endif /* RT_LIBC_USING_FILEIO */
|
||||
}
|
||||
|
||||
int _unlink_r(struct _reent *ptr, const char *file)
|
||||
{
|
||||
#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)
|
||||
{
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
_ssize_t rc;
|
||||
if (libc_stdio_get_console() < 0 && fd == STDOUT_FILENO)
|
||||
{
|
||||
LOG_W("Do not invoke standard output before initializing libc");
|
||||
return 0;
|
||||
}
|
||||
rc = write(fd, buf, nbytes);
|
||||
return rc;
|
||||
#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() */
|
||||
__attribute__ ((noreturn)) void _exit (int status)
|
||||
{
|
||||
extern void __rt_libc_exit(int status);
|
||||
__rt_libc_exit(status);
|
||||
while(1);
|
||||
}
|
||||
|
||||
/*
|
||||
These functions are implemented and replaced by the 'common/time.c' file
|
||||
int _gettimeofday_r(struct _reent *ptr, struct timeval *__tp, void *__tzp);
|
||||
|
||||
Reference in New Issue
Block a user