Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
RT-Thread
rt-thread
提交
973f2590
R
rt-thread
项目概览
RT-Thread
/
rt-thread
9 个月 前同步成功
通知
751
Star
8909
Fork
4735
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
973f2590
编写于
11月 15, 2021
作者:
mysterywolf
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[dfs] move dfs back
上级
0bcab289
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
1090 addition
and
1134 deletion
+1090
-1134
bsp/mini2440/.config
bsp/mini2440/.config
+38
-70
bsp/mini2440/rtconfig.h
bsp/mini2440/rtconfig.h
+16
-52
bsp/qemu-vexpress-a9/.config
bsp/qemu-vexpress-a9/.config
+3
-0
bsp/qemu-vexpress-a9/rtconfig.h
bsp/qemu-vexpress-a9/rtconfig.h
+1
-0
components/dfs/Kconfig
components/dfs/Kconfig
+4
-0
components/dfs/SConscript
components/dfs/SConscript
+3
-0
components/dfs/include/dfs.h
components/dfs/include/dfs.h
+5
-3
components/dfs/src/dfs.c
components/dfs/src/dfs.c
+3
-1
components/dfs/src/dfs_file.c
components/dfs/src/dfs_file.c
+2
-2
components/dfs/src/dfs_posix.c
components/dfs/src/dfs_posix.c
+937
-0
components/finsh/SConscript
components/finsh/SConscript
+1
-1
components/finsh/msh.c
components/finsh/msh.c
+17
-19
components/finsh/msh_file.c
components/finsh/msh_file.c
+2
-3
components/finsh/shell.c
components/finsh/shell.c
+3
-3
components/libc/compilers/armlibc/syscalls.c
components/libc/compilers/armlibc/syscalls.c
+19
-19
components/libc/compilers/dlib/SConscript
components/libc/compilers/dlib/SConscript
+1
-1
components/libc/compilers/dlib/syscall_close.c
components/libc/compilers/dlib/syscall_close.c
+2
-2
components/libc/compilers/dlib/syscall_lseek.c
components/libc/compilers/dlib/syscall_lseek.c
+2
-2
components/libc/compilers/dlib/syscall_open.c
components/libc/compilers/dlib/syscall_open.c
+2
-2
components/libc/compilers/dlib/syscall_read.c
components/libc/compilers/dlib/syscall_read.c
+2
-2
components/libc/compilers/dlib/syscall_remove.c
components/libc/compilers/dlib/syscall_remove.c
+2
-2
components/libc/compilers/dlib/syscall_write.c
components/libc/compilers/dlib/syscall_write.c
+4
-4
components/libc/compilers/gcc/newlib/syscalls.c
components/libc/compilers/gcc/newlib/syscalls.c
+20
-20
components/libc/posix/src/unistd.c
components/libc/posix/src/unistd.c
+1
-926
未找到文件。
bsp/mini2440/.config
浏览文件 @
973f2590
# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)
#
# Automatically generated file; DO NOT EDIT.
# RT-Thread Project Configuration
#
CONFIG_BOARD_MINI2440
=
y
#
# RT-Thread Kernel
#
CONFIG_RT_NAME_MAX
=
8
# CONFIG_RT_USING_BIG_ENDIAN is not set
# CONFIG_RT_USING_ARCH_DATA_TYPE is not set
# CONFIG_RT_USING_SMP is not set
CONFIG_RT_ALIGN_SIZE
=
4
...
...
@@ -27,8 +31,8 @@ CONFIG_RT_TIMER_THREAD_STACK_SIZE=512
#
# CONFIG_RT_KSERVICE_USING_STDLIB is not set
# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set
#
end of kservice optimization
#
CONFIG_RT_USING_ASM_MEMCPY is not set
# CONFIG_RT_USING_TINY_FFS is not set
CONFIG_RT_DEBUG
=
y
# CONFIG_RT_DEBUG_COLOR is not set
# CONFIG_RT_DEBUG_INIT_CONFIG is not set
...
...
@@ -51,7 +55,6 @@ CONFIG_RT_USING_EVENT=y
CONFIG_RT_USING_MAILBOX
=
y
CONFIG_RT_USING_MESSAGEQUEUE
=
y
# CONFIG_RT_USING_SIGNALS is not set
# end of Inter-Thread communication
#
# Memory Management
...
...
@@ -65,7 +68,6 @@ CONFIG_RT_USING_SMALL_MEM=y
# CONFIG_RT_USING_USERHEAP is not set
# CONFIG_RT_USING_MEMTRACE is not set
CONFIG_RT_USING_HEAP
=
y
# end of Memory Management
#
# Kernel Device Object
...
...
@@ -77,13 +79,11 @@ CONFIG_RT_USING_CONSOLE=y
CONFIG_RT_CONSOLEBUF_SIZE
=
128
CONFIG_RT_CONSOLE_DEVICE_NAME
=
"uart"
# CONFIG_RT_PRINTF_LONGLONG is not set
# end of Kernel Device Object
CONFIG_RT_VER_NUM
=
0
x40004
# end of RT-Thread Kernel
CONFIG_ARCH_ARM
=
y
# CONFIG_RT_USING_CPU_FFS is not set
CONFIG_ARCH_ARM_ARM9
=
y
# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
#
# RT-Thread Components
...
...
@@ -98,7 +98,6 @@ CONFIG_RT_MAIN_THREAD_PRIORITY=10
#
CONFIG_RT_USING_CPLUSPLUS
=
y
# CONFIG_RT_USING_CPLUSPLUS11 is not set
# end of C++ features
#
# Command shell
...
...
@@ -118,12 +117,12 @@ CONFIG_FINSH_USING_DESCRIPTION=y
# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
# CONFIG_FINSH_USING_AUTH is not set
CONFIG_FINSH_ARG_MAX
=
10
# end of Command shell
#
# Device virtual file system
#
CONFIG_RT_USING_DFS
=
y
CONFIG_DFS_USING_POSIX
=
y
CONFIG_DFS_USING_WORKDIR
=
y
CONFIG_DFS_FILESYSTEMS_MAX
=
5
CONFIG_DFS_FILESYSTEM_TYPES_MAX
=
5
...
...
@@ -152,13 +151,10 @@ CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512
# CONFIG_RT_DFS_ELM_USE_ERASE is not set
CONFIG_RT_DFS_ELM_REENTRANT
=
y
CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT
=
3000
# end of elm-chan's FatFs, Generic FAT Filesystem Module
CONFIG_RT_USING_DFS_DEVFS
=
y
# CONFIG_RT_USING_DFS_ROMFS is not set
CONFIG_RT_USING_DFS_RAMFS
=
y
# CONFIG_RT_USING_DFS_NFS is not set
# end of Device virtual file system
#
# Device Drivers
...
...
@@ -206,27 +202,30 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16
#
# Using USB
#
# CONFIG_RT_USING_USB is not set
# CONFIG_RT_USING_USB_HOST is not set
# CONFIG_RT_USING_USB_DEVICE is not set
# end of Using USB
# end of Device Drivers
#
# POSIX layer and C standard library
#
CONFIG_RT_USING_LIBC
=
y
CONFIG_RT_USING_PTHREADS
=
y
CONFIG_PTHREAD_NUM_MAX
=
8
CONFIG_RT_USING_POSIX
=
y
CONFIG_RT_USING_POSIX_MMAP
=
y
CONFIG_RT_USING_POSIX_TERMIOS
=
y
# CONFIG_RT_USING_POSIX_GETLINE is not set
CONFIG_RT_USING_POSIX_AIO
=
y
CONFIG_RT_LIBC_USING_TIME
=
y
# CONFIG_RT_LIBC_USING_FILEIO is not set
CONFIG_RT_USING_MODULE
=
y
CONFIG_RT_USING_CUSTOM_DLMODULE
=
y
CONFIG_RT_LIBC_DEFAULT_TIMEZONE
=
8
# end of POSIX layer and C standard library
CONFIG_RT_USING_POSIX
=
y
# CONFIG_RT_USING_POSIX_STDIO is not set
CONFIG_RT_USING_POSIX_POLL
=
y
CONFIG_RT_USING_POSIX_SELECT
=
y
# CONFIG_RT_USING_POSIX_DELAY is not set
# CONFIG_RT_USING_POSIX_GETLINE is not set
CONFIG_RT_USING_POSIX_MMAP
=
y
CONFIG_RT_USING_POSIX_TERMIOS
=
y
CONFIG_RT_USING_POSIX_AIO
=
y
CONFIG_RT_USING_PTHREADS
=
y
CONFIG_PTHREAD_NUM_MAX
=
8
#
# Network
...
...
@@ -242,10 +241,7 @@ CONFIG_SAL_INTERNET_CHECK=y
# protocol stack implement
#
CONFIG_SAL_USING_LWIP
=
y
# end of protocol stack implement
CONFIG_SAL_USING_POSIX
=
y
# end of Socket abstraction layer
#
# Network interface device
...
...
@@ -258,7 +254,7 @@ CONFIG_NETDEV_USING_AUTO_DEFAULT=y
# CONFIG_NETDEV_USING_IPV6 is not set
CONFIG_NETDEV_IPV4
=
1
CONFIG_NETDEV_IPV6
=
0
#
end of Network interface device
#
CONFIG_NETDEV_IPV6_SCOPES is not set
#
# light weight TCP/IP stack
...
...
@@ -284,8 +280,6 @@ CONFIG_IP_SOF_BROADCAST_RECV=1
CONFIG_RT_LWIP_IPADDR
=
"192.168.0.30"
CONFIG_RT_LWIP_GWADDR
=
"192.168.0.1"
CONFIG_RT_LWIP_MSKADDR
=
"255.255.255.0"
# end of Static IPv4 Address
CONFIG_RT_LWIP_UDP
=
y
CONFIG_RT_LWIP_TCP
=
y
CONFIG_RT_LWIP_RAW
=
y
...
...
@@ -320,22 +314,17 @@ CONFIG_RT_LWIP_STATS=y
# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set
CONFIG_RT_LWIP_USING_PING
=
y
# CONFIG_RT_LWIP_DEBUG is not set
# end of light weight TCP/IP stack
#
# AT commands
#
# CONFIG_RT_USING_AT is not set
# end of AT commands
# CONFIG_LWIP_USING_DHCPD is not set
# end of Network
#
# VBUS(Virtual Software BUS)
#
# CONFIG_RT_USING_VBUS is not set
# end of VBUS(Virtual Software BUS)
#
# Utilities
...
...
@@ -347,16 +336,12 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_RT_USING_UTEST is not set
# CONFIG_RT_USING_VAR_EXPORT is not set
# CONFIG_RT_USING_RT_LINK is not set
# end of Utilities
# CONFIG_RT_USING_LWP is not set
# end of RT-Thread Components
#
# RT-Thread Utestcases
#
# CONFIG_RT_USING_UTESTCASES is not set
# end of RT-Thread Utestcases
#
# RT-Thread online packages
...
...
@@ -391,17 +376,12 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# Marvell WiFi
#
# CONFIG_PKG_USING_WLANMARVELL is not set
# end of Marvell WiFi
#
# Wiced WiFi
#
# CONFIG_PKG_USING_WLAN_WICED is not set
# end of Wiced WiFi
# CONFIG_PKG_USING_RW007 is not set
# end of Wi-Fi
# CONFIG_PKG_USING_COAP is not set
# CONFIG_PKG_USING_NOPOLL is not set
# CONFIG_PKG_USING_NETUTILS is not set
...
...
@@ -423,8 +403,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_JIOT-C-SDK is not set
# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
# CONFIG_PKG_USING_JOYLINK is not set
# end of IoT Cloud
# CONFIG_PKG_USING_NIMBLE is not set
# CONFIG_PKG_USING_OTA_DOWNLOADER is not set
# CONFIG_PKG_USING_IPMSG is not set
...
...
@@ -458,7 +436,7 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set
# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set
# CONFIG_PKG_USING_HM is not set
#
end of IoT - internet of things
#
CONFIG_PKG_USING_SMALL_MODBUS is not set
#
# security packages
...
...
@@ -468,7 +446,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_TINYCRYPT is not set
# CONFIG_PKG_USING_TFM is not set
# CONFIG_PKG_USING_YD_CRYPTO is not set
# end of security packages
#
# language packages
...
...
@@ -477,22 +454,19 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_JERRYSCRIPT is not set
# CONFIG_PKG_USING_MICROPYTHON is not set
# CONFIG_PKG_USING_PIKASCRIPT is not set
# end of language packages
#
# multimedia packages
#
# CONFIG_PKG_USING_OPENMV is not set
# CONFIG_PKG_USING_MUPDF is not set
# CONFIG_PKG_USING_STEMWIN is not set
#
#
lvgl
: powerful and easy-to-use embedded GUI library
#
LVGL
: powerful and easy-to-use embedded GUI library
#
# CONFIG_PKG_USING_LITTLEVGL2RTT is not set
# CONFIG_PKG_USING_LVGL is not set
# end of lvgl: powerful and easy-to-use embedded GUI library
# CONFIG_PKG_USING_OPENMV is not set
# CONFIG_PKG_USING_MUPDF is not set
# CONFIG_PKG_USING_STEMWIN is not set
# CONFIG_PKG_USING_WAVPLAYER is not set
# CONFIG_PKG_USING_TJPGD is not set
# CONFIG_PKG_USING_PDFGEN is not set
...
...
@@ -509,8 +483,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
#
# CONFIG_PKG_USING_U8G2_OFFICIAL is not set
# CONFIG_PKG_USING_U8G2 is not set
# end of u8g2: a monochrome graphic library
# end of multimedia packages
#
# tools packages
...
...
@@ -553,7 +525,7 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_MEM_SANDBOX is not set
# CONFIG_PKG_USING_SOLAR_TERMS is not set
# CONFIG_PKG_USING_GAN_ZHI is not set
#
end of tools packages
#
CONFIG_PKG_USING_FDT is not set
#
# system packages
...
...
@@ -566,7 +538,13 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set
# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set
# CONFIG_PKG_USING_QFPLIB_M3 is not set
# end of acceleration: Assembly language or algorithmic acceleration packages
#
# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard
#
# CONFIG_PKG_USING_CMSIS_5 is not set
# CONFIG_PKG_USING_CMSIS_5_AUX is not set
# CONFIG_PKG_USING_CMSIS_RTOS2 is not set
#
# Micrium: Micrium software products porting for RT-Thread
...
...
@@ -577,8 +555,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_UC_CLK is not set
# CONFIG_PKG_USING_UC_COMMON is not set
# CONFIG_PKG_USING_UC_MODBUS is not set
# end of Micrium: Micrium software products porting for RT-Thread
# CONFIG_PKG_USING_GUIENGINE is not set
# CONFIG_PKG_USING_PERSIMMON is not set
# CONFIG_PKG_USING_CAIRO is not set
...
...
@@ -588,7 +564,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_FLASHDB is not set
# CONFIG_PKG_USING_SQLITE is not set
# CONFIG_PKG_USING_RTI is not set
# CONFIG_PKG_USING_CMSIS is not set
# CONFIG_PKG_USING_DFS_YAFFS is not set
# CONFIG_PKG_USING_LITTLEFS is not set
# CONFIG_PKG_USING_DFS_JFFS2 is not set
...
...
@@ -613,7 +588,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_WCWIDTH is not set
# CONFIG_PKG_USING_MCUBOOT is not set
# CONFIG_PKG_USING_TINYUSB is not set
# end of system packages
#
# peripheral libraries and drivers
...
...
@@ -689,7 +663,7 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set
# CONFIG_PKG_USING_BL_MCU_SDK is not set
# CONFIG_PKG_USING_SOFT_SERIAL is not set
#
end of peripheral libraries and drivers
#
CONFIG_PKG_USING_MB85RS16 is not set
#
# AI packages
...
...
@@ -703,7 +677,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_ULAPACK is not set
# CONFIG_PKG_USING_QUEST is not set
# CONFIG_PKG_USING_NAXOS is not set
# end of AI packages
#
# miscellaneous packages
...
...
@@ -716,7 +689,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set
# CONFIG_PKG_USING_NETWORK_SAMPLES is not set
# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set
# end of samples: kernel and components samples
#
# entertainment: terminal games and other interesting software packages
...
...
@@ -730,8 +702,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_SNAKE is not set
# CONFIG_PKG_USING_TETRIS is not set
# CONFIG_PKG_USING_DONUT is not set
# end of entertainment: terminal games and other interesting software packages
# CONFIG_PKG_USING_LIBCSV is not set
# CONFIG_PKG_USING_OPTPARSE is not set
# CONFIG_PKG_USING_FASTLZ is not set
...
...
@@ -761,5 +731,3 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_MCURSES is not set
# CONFIG_PKG_USING_COWSAY is not set
# CONFIG_PKG_USING_TERMBOX is not set
# end of miscellaneous packages
# end of RT-Thread online packages
bsp/mini2440/rtconfig.h
浏览文件 @
973f2590
#ifndef RT_CONFIG_H__
#define RT_CONFIG_H__
/* Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) */
/* Automatically generated file; DO NOT EDIT. */
/* RT-Thread Project Configuration */
#define BOARD_MINI2440
/* RT-Thread Kernel */
...
...
@@ -22,7 +24,6 @@
/* kservice optimization */
/* end of kservice optimization */
#define RT_DEBUG
/* Inter-Thread communication */
...
...
@@ -32,7 +33,6 @@
#define RT_USING_EVENT
#define RT_USING_MAILBOX
#define RT_USING_MESSAGEQUEUE
/* end of Inter-Thread communication */
/* Memory Management */
...
...
@@ -40,7 +40,6 @@
#define RT_USING_MEMHEAP
#define RT_USING_SMALL_MEM
#define RT_USING_HEAP
/* end of Memory Management */
/* Kernel Device Object */
...
...
@@ -48,9 +47,7 @@
#define RT_USING_CONSOLE
#define RT_CONSOLEBUF_SIZE 128
#define RT_CONSOLE_DEVICE_NAME "uart"
/* end of Kernel Device Object */
#define RT_VER_NUM 0x40004
/* end of RT-Thread Kernel */
#define ARCH_ARM
#define ARCH_ARM_ARM9
...
...
@@ -64,7 +61,6 @@
/* C++ features */
#define RT_USING_CPLUSPLUS
/* end of C++ features */
/* Command shell */
...
...
@@ -81,11 +77,11 @@
#define MSH_USING_BUILT_IN_COMMANDS
#define FINSH_USING_DESCRIPTION
#define FINSH_ARG_MAX 10
/* end of Command shell */
/* Device virtual file system */
#define RT_USING_DFS
#define DFS_USING_POSIX
#define DFS_USING_WORKDIR
#define DFS_FILESYSTEMS_MAX 5
#define DFS_FILESYSTEM_TYPES_MAX 5
...
...
@@ -105,10 +101,8 @@
#define RT_DFS_ELM_MAX_SECTOR_SIZE 512
#define RT_DFS_ELM_REENTRANT
#define RT_DFS_ELM_MUTEX_TIMEOUT 3000
/* end of elm-chan's FatFs, Generic FAT Filesystem Module */
#define RT_USING_DFS_DEVFS
#define RT_USING_DFS_RAMFS
/* end of Device virtual file system */
/* Device Drivers */
...
...
@@ -131,23 +125,22 @@
/* Using USB */
/* end of Using USB */
/* end of Device Drivers */
/* POSIX layer and C standard library */
#define RT_USING_LIBC
#define RT_USING_PTHREADS
#define PTHREAD_NUM_MAX 8
#define RT_USING_POSIX
#define RT_USING_POSIX_MMAP
#define RT_USING_POSIX_TERMIOS
#define RT_USING_POSIX_AIO
#define RT_LIBC_USING_TIME
#define RT_USING_MODULE
#define RT_USING_CUSTOM_DLMODULE
#define RT_LIBC_DEFAULT_TIMEZONE 8
/* end of POSIX layer and C standard library */
#define RT_USING_POSIX
#define RT_USING_POSIX_POLL
#define RT_USING_POSIX_SELECT
#define RT_USING_POSIX_MMAP
#define RT_USING_POSIX_TERMIOS
#define RT_USING_POSIX_AIO
#define RT_USING_PTHREADS
#define PTHREAD_NUM_MAX 8
/* Network */
...
...
@@ -159,9 +152,7 @@
/* protocol stack implement */
#define SAL_USING_LWIP
/* end of protocol stack implement */
#define SAL_USING_POSIX
/* end of Socket abstraction layer */
/* Network interface device */
...
...
@@ -172,7 +163,6 @@
#define NETDEV_USING_AUTO_DEFAULT
#define NETDEV_IPV4 1
#define NETDEV_IPV6 0
/* end of Network interface device */
/* light weight TCP/IP stack */
...
...
@@ -191,7 +181,6 @@
#define RT_LWIP_IPADDR "192.168.0.30"
#define RT_LWIP_GWADDR "192.168.0.1"
#define RT_LWIP_MSKADDR "255.255.255.0"
/* end of Static IPv4 Address */
#define RT_LWIP_UDP
#define RT_LWIP_TCP
#define RT_LWIP_RAW
...
...
@@ -220,28 +209,21 @@
#define LWIP_NETIF_LOOPBACK 1
#define RT_LWIP_STATS
#define RT_LWIP_USING_PING
/* end of light weight TCP/IP stack */
/* AT commands */
/* end of AT commands */
/* end of Network */
/* VBUS(Virtual Software BUS) */
/* end of VBUS(Virtual Software BUS) */
/* Utilities */
#define RT_USING_RYM
#define YMODEM_USING_CRC_TABLE
#define YMODEM_USING_FILE_TRANSFER
/* end of Utilities */
/* end of RT-Thread Components */
/* RT-Thread Utestcases */
/* end of RT-Thread Utestcases */
/* RT-Thread online packages */
...
...
@@ -252,71 +234,53 @@
/* Marvell WiFi */
/* end of Marvell WiFi */
/* Wiced WiFi */
/* end of Wiced WiFi */
/* end of Wi-Fi */
/* IoT Cloud */
/* end of IoT Cloud */
/* end of IoT - internet of things */
/* security packages */
/* end of security packages */
/* language packages */
/* end of language packages */
/* multimedia packages */
/* LVGL: powerful and easy-to-use embedded GUI library */
/* lvgl: powerful and easy-to-use embedded GUI library */
/* end of lvgl: powerful and easy-to-use embedded GUI library */
/* u8g2: a monochrome graphic library */
/* end of u8g2: a monochrome graphic library */
/* end of multimedia packages */
/* tools packages */
/* end of tools packages */
/* system packages */
/* acceleration: Assembly language or algorithmic acceleration packages */
/* end of acceleration: Assembly language or algorithmic acceleration packages */
/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */
/* Micrium: Micrium software products porting for RT-Thread */
/* end of Micrium: Micrium software products porting for RT-Thread */
/* end of system packages */
/* peripheral libraries and drivers */
/* end of peripheral libraries and drivers */
/* AI packages */
/* end of AI packages */
/* miscellaneous packages */
/* samples: kernel and components samples */
/* end of samples: kernel and components samples */
/* entertainment: terminal games and other interesting software packages */
/* end of entertainment: terminal games and other interesting software packages */
/* end of miscellaneous packages */
/* end of RT-Thread online packages */
#endif
bsp/qemu-vexpress-a9/.config
浏览文件 @
973f2590
...
...
@@ -33,6 +33,7 @@ CONFIG_RT_TIMER_THREAD_STACK_SIZE=1024
# CONFIG_RT_KSERVICE_USING_STDLIB is not set
# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set
# CONFIG_RT_USING_ASM_MEMCPY is not set
# CONFIG_RT_USING_TINY_FFS is not set
CONFIG_RT_DEBUG
=
y
CONFIG_RT_DEBUG_COLOR
=
y
# CONFIG_RT_DEBUG_INIT_CONFIG is not set
...
...
@@ -126,6 +127,7 @@ CONFIG_FINSH_ARG_MAX=10
# Device virtual file system
#
CONFIG_RT_USING_DFS
=
y
CONFIG_DFS_USING_POSIX
=
y
CONFIG_DFS_USING_WORKDIR
=
y
CONFIG_DFS_FILESYSTEMS_MAX
=
4
CONFIG_DFS_FILESYSTEM_TYPES_MAX
=
8
...
...
@@ -541,6 +543,7 @@ CONFIG_RT_USING_LWP=y
# CONFIG_PKG_USING_MEM_SANDBOX is not set
# CONFIG_PKG_USING_SOLAR_TERMS is not set
# CONFIG_PKG_USING_GAN_ZHI is not set
# CONFIG_PKG_USING_FDT is not set
#
# system packages
...
...
bsp/qemu-vexpress-a9/rtconfig.h
浏览文件 @
973f2590
...
...
@@ -90,6 +90,7 @@
/* Device virtual file system */
#define RT_USING_DFS
#define DFS_USING_POSIX
#define DFS_USING_WORKDIR
#define DFS_FILESYSTEMS_MAX 4
#define DFS_FILESYSTEM_TYPES_MAX 8
...
...
components/dfs/Kconfig
浏览文件 @
973f2590
...
...
@@ -8,6 +8,10 @@ config RT_USING_DFS
The device file system is a light weight virtual file system.
if RT_USING_DFS
config DFS_USING_POSIX
bool "Using posix-like functions, open/read/write/close"
default y
config DFS_USING_WORKDIR
bool "Using working directory"
default y
...
...
components/dfs/SConscript
浏览文件 @
973f2590
...
...
@@ -9,6 +9,9 @@ src/dfs_fs.c
cwd
=
GetCurrentDir
()
CPPPATH
=
[
cwd
+
"/include"
]
if
GetDepend
(
'DFS_USING_POSIX'
):
src
+=
[
'src/dfs_posix.c'
]
group
=
DefineGroup
(
'Filesystem'
,
src
,
depend
=
[
'RT_USING_DFS'
],
CPPPATH
=
CPPPATH
)
if
GetDepend
(
'RT_USING_DFS'
):
...
...
components/dfs/include/dfs.h
浏览文件 @
973f2590
...
...
@@ -81,16 +81,18 @@ int dfs_init(void);
char
*
dfs_normalize_path
(
const
char
*
directory
,
const
char
*
filename
);
const
char
*
dfs_subdir
(
const
char
*
directory
,
const
char
*
filename
);
int
fd_is_open
(
const
char
*
pathname
);
struct
dfs_fdtable
*
dfs_fdtable_get
(
void
);
void
dfs_lock
(
void
);
void
dfs_unlock
(
void
);
#ifdef DFS_USING_POSIX
/* FD APIs */
int
fd_new
(
void
);
struct
dfs_fd
*
fd_get
(
int
fd
);
void
fd_put
(
struct
dfs_fd
*
fd
);
int
fd_is_open
(
const
char
*
pathname
);
struct
dfs_fdtable
*
dfs_fdtable_get
(
void
);
#endif
/* DFS_USING_POSIX */
#ifdef __cplusplus
}
...
...
components/dfs/src/dfs.c
浏览文件 @
973f2590
...
...
@@ -34,7 +34,6 @@ char working_directory[DFS_PATH_MAX] = {"/"};
#endif
static
struct
dfs_fdtable
_fdtab
;
static
int
fd_alloc
(
struct
dfs_fdtable
*
fdt
,
int
startfd
);
/**
* @addtogroup DFS
...
...
@@ -118,6 +117,7 @@ void dfs_unlock(void)
rt_mutex_release
(
&
fslock
);
}
#ifdef DFS_USING_POSIX
static
int
fd_alloc
(
struct
dfs_fdtable
*
fdt
,
int
startfd
)
{
int
idx
;
...
...
@@ -276,6 +276,8 @@ void fd_put(struct dfs_fd *fd)
dfs_unlock
();
}
#endif
/* DFS_USING_POSIX */
/**
* @ingroup Fd
*
...
...
components/dfs/src/dfs_file.c
浏览文件 @
973f2590
...
...
@@ -621,7 +621,7 @@ void cat(const char *filename)
}
FINSH_FUNCTION_EXPORT
(
cat
,
print
file
);
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
#define BUF_SZ 4096
static
void
copyfile
(
const
char
*
src
,
const
char
*
dst
)
{
...
...
@@ -843,7 +843,7 @@ void copy(const char *src, const char *dst)
}
}
FINSH_FUNCTION_EXPORT
(
copy
,
copy
file
or
dir
)
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
#endif
/* RT_USING_FINSH */
/* @} */
...
...
components/dfs/src/dfs_posix.c
0 → 100644
浏览文件 @
973f2590
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2009-05-27 Yi.qiu The first version
* 2018-02-07 Bernard Change the 3rd parameter of open/fcntl/ioctl to '...'
*/
#include <dfs_file.h>
#include <dfs_private.h>
#include <sys/errno.h>
/**
* this function is a POSIX compliant version, which will open a file and
* return a file descriptor according specified flags.
*
* @param file the path name of file.
* @param flags the file open flags.
*
* @return the non-negative integer on successful open, others for failed.
*/
int
open
(
const
char
*
file
,
int
flags
,
...)
{
int
fd
,
result
;
struct
dfs_fd
*
d
;
/* allocate a fd */
fd
=
fd_new
();
if
(
fd
<
0
)
{
rt_set_errno
(
-
ENOMEM
);
return
-
1
;
}
d
=
fd_get
(
fd
);
result
=
dfs_file_open
(
d
,
file
,
flags
);
if
(
result
<
0
)
{
/* release the ref-count of fd */
fd_put
(
d
);
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
fd
;
}
RTM_EXPORT
(
open
);
/**
* this function is a POSIX compliant version, which will close the open
* file descriptor.
*
* @param fd the file descriptor.
*
* @return 0 on successful, -1 on failed.
*/
int
close
(
int
fd
)
{
int
result
;
struct
dfs_fd
*
d
;
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
result
=
dfs_file_close
(
d
);
fd_put
(
d
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
fd_put
(
d
);
return
0
;
}
RTM_EXPORT
(
close
);
/**
* this function is a POSIX compliant version, which will read specified data
* buffer length for an open file descriptor.
*
* @param fd the file descriptor.
* @param buf the buffer to save the read data.
* @param len the maximal length of data buffer
*
* @return the actual read data buffer length. If the returned value is 0, it
* may be reach the end of file, please check errno.
*/
#ifdef _READ_WRITE_RETURN_TYPE
_READ_WRITE_RETURN_TYPE
read
(
int
fd
,
void
*
buf
,
size_t
len
)
/* some gcc tool chains will use different data structure */
#else
ssize_t
read
(
int
fd
,
void
*
buf
,
size_t
len
)
#endif
{
int
result
;
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
result
=
dfs_file_read
(
d
,
buf
,
len
);
if
(
result
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
result
;
}
RTM_EXPORT
(
read
);
/**
* this function is a POSIX compliant version, which will write specified data
* buffer length for an open file descriptor.
*
* @param fd the file descriptor
* @param buf the data buffer to be written.
* @param len the data buffer length.
*
* @return the actual written data buffer length.
*/
#ifdef _READ_WRITE_RETURN_TYPE
_READ_WRITE_RETURN_TYPE
write
(
int
fd
,
const
void
*
buf
,
size_t
len
)
/* some gcc tool chains will use different data structure */
#else
ssize_t
write
(
int
fd
,
const
void
*
buf
,
size_t
len
)
#endif
{
int
result
;
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
result
=
dfs_file_write
(
d
,
buf
,
len
);
if
(
result
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
result
;
}
RTM_EXPORT
(
write
);
/**
* this function is a POSIX compliant version, which will seek the offset for
* an open file descriptor.
*
* @param fd the file descriptor.
* @param offset the offset to be seeked.
* @param whence the directory of seek.
*
* @return the current read/write position in the file, or -1 on failed.
*/
off_t
lseek
(
int
fd
,
off_t
offset
,
int
whence
)
{
int
result
;
struct
dfs_fd
*
d
;
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
switch
(
whence
)
{
case
SEEK_SET
:
break
;
case
SEEK_CUR
:
offset
+=
d
->
pos
;
break
;
case
SEEK_END
:
offset
+=
d
->
size
;
break
;
default:
fd_put
(
d
);
rt_set_errno
(
-
EINVAL
);
return
-
1
;
}
if
(
offset
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
-
EINVAL
);
return
-
1
;
}
result
=
dfs_file_lseek
(
d
,
offset
);
if
(
result
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
offset
;
}
RTM_EXPORT
(
lseek
);
#ifndef _WIN32
/**
* this function is a POSIX compliant version, which will rename old file name
* to new file name.
*
* @param old the old file name.
* @param new the new file name.
*
* @return 0 on successful, -1 on failed.
*
* note: the old and new file name must be belong to a same file system.
*/
int
rename
(
const
char
*
old_file
,
const
char
*
new_file
)
{
int
result
;
result
=
dfs_file_rename
(
old_file
,
new_file
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
0
;
}
RTM_EXPORT
(
rename
);
#endif
/**
* this function is a POSIX compliant version, which will unlink (remove) a
* specified path file from file system.
*
* @param pathname the specified path name to be unlinked.
*
* @return 0 on successful, -1 on failed.
*/
int
unlink
(
const
char
*
pathname
)
{
int
result
;
result
=
dfs_file_unlink
(
pathname
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
0
;
}
RTM_EXPORT
(
unlink
);
/**
* this function is a POSIX compliant version, which will get file information.
*
* @param file the file name
* @param buf the data buffer to save stat description.
*
* @return 0 on successful, -1 on failed.
*/
int
stat
(
const
char
*
file
,
struct
stat
*
buf
)
{
int
result
;
result
=
dfs_file_stat
(
file
,
buf
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
result
;
}
RTM_EXPORT
(
stat
);
/**
* this function is a POSIX compliant version, which will get file status.
*
* @param fildes the file description
* @param buf the data buffer to save stat description.
*
* @return 0 on successful, -1 on failed.
*/
int
fstat
(
int
fildes
,
struct
stat
*
buf
)
{
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fildes
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
/* it's the root directory */
buf
->
st_dev
=
0
;
buf
->
st_mode
=
S_IFREG
|
S_IRUSR
|
S_IRGRP
|
S_IROTH
|
S_IWUSR
|
S_IWGRP
|
S_IWOTH
;
if
(
d
->
type
==
FT_DIRECTORY
)
{
buf
->
st_mode
&=
~
S_IFREG
;
buf
->
st_mode
|=
S_IFDIR
|
S_IXUSR
|
S_IXGRP
|
S_IXOTH
;
}
buf
->
st_size
=
d
->
size
;
buf
->
st_mtime
=
0
;
fd_put
(
d
);
return
RT_EOK
;
}
RTM_EXPORT
(
fstat
);
/**
* this function is a POSIX compliant version, which shall request that all data
* for the open file descriptor named by fildes is to be transferred to the storage
* device associated with the file described by fildes.
*
* @param fildes the file description
*
* @return 0 on successful completion. Otherwise, -1 shall be returned and errno
* set to indicate the error.
*/
int
fsync
(
int
fildes
)
{
int
ret
;
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fildes
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
ret
=
dfs_file_flush
(
d
);
fd_put
(
d
);
return
ret
;
}
RTM_EXPORT
(
fsync
);
/**
* this function is a POSIX compliant version, which shall perform a variety of
* control functions on devices.
*
* @param fildes the file description
* @param cmd the specified command
* @param data represents the additional information that is needed by this
* specific device to perform the requested function.
*
* @return 0 on successful completion. Otherwise, -1 shall be returned and errno
* set to indicate the error.
*/
int
fcntl
(
int
fildes
,
int
cmd
,
...)
{
int
ret
=
-
1
;
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fildes
);
if
(
d
)
{
void
*
arg
;
va_list
ap
;
va_start
(
ap
,
cmd
);
arg
=
va_arg
(
ap
,
void
*
);
va_end
(
ap
);
ret
=
dfs_file_ioctl
(
d
,
cmd
,
arg
);
fd_put
(
d
);
}
else
ret
=
-
EBADF
;
if
(
ret
<
0
)
{
rt_set_errno
(
ret
);
ret
=
-
1
;
}
return
ret
;
}
RTM_EXPORT
(
fcntl
);
/**
* this function is a POSIX compliant version, which shall perform a variety of
* control functions on devices.
*
* @param fildes the file description
* @param cmd the specified command
* @param data represents the additional information that is needed by this
* specific device to perform the requested function.
*
* @return 0 on successful completion. Otherwise, -1 shall be returned and errno
* set to indicate the error.
*/
int
ioctl
(
int
fildes
,
int
cmd
,
...)
{
void
*
arg
;
va_list
ap
;
va_start
(
ap
,
cmd
);
arg
=
va_arg
(
ap
,
void
*
);
va_end
(
ap
);
/* we use fcntl for this API. */
return
fcntl
(
fildes
,
cmd
,
arg
);
}
RTM_EXPORT
(
ioctl
);
/**
*
* this function is a POSIX compliant version, which cause the regular file
* referenced by fd to be truncated to a size of precisely length bytes.
* @param fd the file descriptor.
* @param length the length to be truncated.
*
* @return Upon successful completion, ftruncate() shall return 0;
* otherwise, -1 shall be returned and errno set to indicate the error.
*/
int
ftruncate
(
int
fd
,
off_t
length
)
{
int
result
;
struct
dfs_fd
*
d
;
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
if
(
length
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
-
EINVAL
);
return
-
1
;
}
result
=
dfs_file_ftruncate
(
d
,
length
);
if
(
result
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
0
;
}
RTM_EXPORT
(
ftruncate
);
/**
* this function is a POSIX compliant version, which will return the
* information about a mounted file system.
*
* @param path the path which mounted file system.
* @param buf the buffer to save the returned information.
*
* @return 0 on successful, others on failed.
*/
int
statfs
(
const
char
*
path
,
struct
statfs
*
buf
)
{
int
result
;
result
=
dfs_statfs
(
path
,
buf
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
result
;
}
RTM_EXPORT
(
statfs
);
/**
* this function is a POSIX compliant version, which will make a directory
*
* @param path the directory path to be made.
* @param mode
*
* @return 0 on successful, others on failed.
*/
int
mkdir
(
const
char
*
path
,
mode_t
mode
)
{
int
fd
;
struct
dfs_fd
*
d
;
int
result
;
fd
=
fd_new
();
if
(
fd
==
-
1
)
{
rt_set_errno
(
-
ENOMEM
);
return
-
1
;
}
d
=
fd_get
(
fd
);
result
=
dfs_file_open
(
d
,
path
,
O_DIRECTORY
|
O_CREAT
);
if
(
result
<
0
)
{
fd_put
(
d
);
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
dfs_file_close
(
d
);
fd_put
(
d
);
fd_put
(
d
);
return
0
;
}
RTM_EXPORT
(
mkdir
);
/**
* this function is a POSIX compliant version, which will remove a directory.
*
* @param pathname the path name to be removed.
*
* @return 0 on successful, others on failed.
*/
int
rmdir
(
const
char
*
pathname
)
{
int
result
;
result
=
dfs_file_unlink
(
pathname
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
0
;
}
RTM_EXPORT
(
rmdir
);
/**
* this function is a POSIX compliant version, which will open a directory.
*
* @param name the path name to be open.
*
* @return the DIR pointer of directory, NULL on open directory failed.
*/
DIR
*
opendir
(
const
char
*
name
)
{
struct
dfs_fd
*
d
;
int
fd
,
result
;
DIR
*
t
;
t
=
NULL
;
/* allocate a fd */
fd
=
fd_new
();
if
(
fd
==
-
1
)
{
rt_set_errno
(
-
ENOMEM
);
return
NULL
;
}
d
=
fd_get
(
fd
);
result
=
dfs_file_open
(
d
,
name
,
O_RDONLY
|
O_DIRECTORY
);
if
(
result
>=
0
)
{
/* open successfully */
t
=
(
DIR
*
)
rt_malloc
(
sizeof
(
DIR
));
if
(
t
==
NULL
)
{
dfs_file_close
(
d
);
fd_put
(
d
);
}
else
{
memset
(
t
,
0
,
sizeof
(
DIR
));
t
->
fd
=
fd
;
}
fd_put
(
d
);
return
t
;
}
/* open failed */
fd_put
(
d
);
fd_put
(
d
);
rt_set_errno
(
result
);
return
NULL
;
}
RTM_EXPORT
(
opendir
);
/**
* this function is a POSIX compliant version, which will return a pointer
* to a dirent structure representing the next directory entry in the
* directory stream.
*
* @param d the directory stream pointer.
*
* @return the next directory entry, NULL on the end of directory or failed.
*/
struct
dirent
*
readdir
(
DIR
*
d
)
{
int
result
;
struct
dfs_fd
*
fd
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
NULL
;
}
if
(
d
->
num
)
{
struct
dirent
*
dirent_ptr
;
dirent_ptr
=
(
struct
dirent
*
)
&
d
->
buf
[
d
->
cur
];
d
->
cur
+=
dirent_ptr
->
d_reclen
;
}
if
(
!
d
->
num
||
d
->
cur
>=
d
->
num
)
{
/* get a new entry */
result
=
dfs_file_getdents
(
fd
,
(
struct
dirent
*
)
d
->
buf
,
sizeof
(
d
->
buf
)
-
1
);
if
(
result
<=
0
)
{
fd_put
(
fd
);
rt_set_errno
(
result
);
return
NULL
;
}
d
->
num
=
result
;
d
->
cur
=
0
;
/* current entry index */
}
fd_put
(
fd
);
return
(
struct
dirent
*
)(
d
->
buf
+
d
->
cur
);
}
RTM_EXPORT
(
readdir
);
/**
* this function is a POSIX compliant version, which will return current
* location in directory stream.
*
* @param d the directory stream pointer.
*
* @return the current location in directory stream.
*/
long
telldir
(
DIR
*
d
)
{
struct
dfs_fd
*
fd
;
long
result
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
0
;
}
result
=
fd
->
pos
-
d
->
num
+
d
->
cur
;
fd_put
(
fd
);
return
result
;
}
RTM_EXPORT
(
telldir
);
/**
* this function is a POSIX compliant version, which will set position of
* next directory structure in the directory stream.
*
* @param d the directory stream.
* @param offset the offset in directory stream.
*/
void
seekdir
(
DIR
*
d
,
off_t
offset
)
{
struct
dfs_fd
*
fd
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
;
}
/* seek to the offset position of directory */
if
(
dfs_file_lseek
(
fd
,
offset
)
>=
0
)
d
->
num
=
d
->
cur
=
0
;
fd_put
(
fd
);
}
RTM_EXPORT
(
seekdir
);
/**
* this function is a POSIX compliant version, which will reset directory
* stream.
*
* @param d the directory stream.
*/
void
rewinddir
(
DIR
*
d
)
{
struct
dfs_fd
*
fd
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
;
}
/* seek to the beginning of directory */
if
(
dfs_file_lseek
(
fd
,
0
)
>=
0
)
d
->
num
=
d
->
cur
=
0
;
fd_put
(
fd
);
}
RTM_EXPORT
(
rewinddir
);
/**
* this function is a POSIX compliant version, which will close a directory
* stream.
*
* @param d the directory stream.
*
* @return 0 on successful, -1 on failed.
*/
int
closedir
(
DIR
*
d
)
{
int
result
;
struct
dfs_fd
*
fd
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
result
=
dfs_file_close
(
fd
);
fd_put
(
fd
);
fd_put
(
fd
);
rt_free
(
d
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
else
return
0
;
}
RTM_EXPORT
(
closedir
);
#ifdef DFS_USING_WORKDIR
/**
* this function is a POSIX compliant version, which will change working
* directory.
*
* @param path the path name to be changed to.
*
* @return 0 on successful, -1 on failed.
*/
int
chdir
(
const
char
*
path
)
{
char
*
fullpath
;
DIR
*
d
;
if
(
path
==
NULL
)
{
dfs_lock
();
rt_kprintf
(
"%s
\n
"
,
working_directory
);
dfs_unlock
();
return
0
;
}
if
(
strlen
(
path
)
>
DFS_PATH_MAX
)
{
rt_set_errno
(
-
ENOTDIR
);
return
-
1
;
}
fullpath
=
dfs_normalize_path
(
NULL
,
path
);
if
(
fullpath
==
NULL
)
{
rt_set_errno
(
-
ENOTDIR
);
return
-
1
;
/* build path failed */
}
dfs_lock
();
d
=
opendir
(
fullpath
);
if
(
d
==
NULL
)
{
rt_free
(
fullpath
);
/* this is a not exist directory */
dfs_unlock
();
return
-
1
;
}
/* close directory stream */
closedir
(
d
);
/* copy full path to working directory */
strncpy
(
working_directory
,
fullpath
,
DFS_PATH_MAX
);
/* release normalize directory path name */
rt_free
(
fullpath
);
dfs_unlock
();
return
0
;
}
RTM_EXPORT
(
chdir
);
#ifdef RT_USING_FINSH
FINSH_FUNCTION_EXPORT_ALIAS
(
chdir
,
cd
,
change
current
working
directory
);
#endif
#endif
/**
* this function is a POSIX compliant version, which shall check the file named
* by the pathname pointed to by the path argument for accessibility according
* to the bit pattern contained in amode.
*
* @param path the specified file/dir path.
* @param amode the value is either the bitwise-inclusive OR of the access
* permissions to be checked (R_OK, W_OK, X_OK) or the existence test (F_OK).
*/
int
access
(
const
char
*
path
,
int
amode
)
{
struct
stat
sb
;
if
(
stat
(
path
,
&
sb
)
<
0
)
return
-
1
;
/* already sets errno */
/* ignore R_OK,W_OK,X_OK condition */
return
0
;
}
/**
* this function is a POSIX compliant version, which will return current
* working directory.
*
* @param buf the returned current directory.
* @param size the buffer size.
*
* @return the returned current directory.
*/
char
*
getcwd
(
char
*
buf
,
size_t
size
)
{
#ifdef DFS_USING_WORKDIR
dfs_lock
();
strncpy
(
buf
,
working_directory
,
size
);
dfs_unlock
();
#else
rt_kprintf
(
NO_WORKING_DIR
);
#endif
return
buf
;
}
RTM_EXPORT
(
getcwd
);
components/finsh/SConscript
浏览文件 @
973f2590
...
...
@@ -9,7 +9,7 @@ msh.c
if
GetDepend
(
'MSH_USING_BUILT_IN_COMMANDS'
):
src
+=
[
'cmd.c'
]
if
GetDepend
(
'
RT
_USING_POSIX'
):
if
GetDepend
(
'
DFS
_USING_POSIX'
):
src
+=
[
'msh_file.c'
]
CPPPATH
=
[
cwd
]
...
...
components/finsh/msh.c
浏览文件 @
973f2590
...
...
@@ -15,19 +15,17 @@
#ifdef RT_USING_FINSH
#ifndef FINSH_ARG_MAX
#define FINSH_ARG_MAX 8
#endif
#define FINSH_ARG_MAX 8
#endif
/* FINSH_ARG_MAX */
#include "msh.h"
#include "shell.h"
#ifdef RT_USING_POSIX
#include <dfs_posix.h>
#endif
#ifdef DFS_USING_POSIX
#include <dfs_posix.h>
#endif
/* DFS_USING_POSIX */
#ifdef RT_USING_MODULE
#include <dlmodule.h>
#endif
#include <dlmodule.h>
#endif
/* RT_USING_MODULE */
typedef
int
(
*
cmd_function_t
)(
int
argc
,
char
**
argv
);
...
...
@@ -186,7 +184,7 @@ static cmd_function_t msh_get_cmd(char *cmd, int size)
return
cmd_func
;
}
#if defined(RT_USING_MODULE) && defined(
RT
_USING_POSIX)
#if defined(RT_USING_MODULE) && defined(
DFS
_USING_POSIX)
/* Return 0 on module executed. Other value indicate error.
*/
int
msh_exec_module
(
const
char
*
cmd_line
,
int
size
)
...
...
@@ -257,7 +255,7 @@ int msh_exec_module(const char *cmd_line, int size)
rt_free
(
pg_name
);
return
ret
;
}
#endif
/* defined(RT_USING_MODULE) && defined(
RT
_USING_POSIX) */
#endif
/* defined(RT_USING_MODULE) && defined(
DFS
_USING_POSIX) */
static
int
_msh_exec_cmd
(
char
*
cmd
,
rt_size_t
length
,
int
*
retp
)
{
...
...
@@ -290,7 +288,7 @@ static int _msh_exec_cmd(char *cmd, rt_size_t length, int *retp)
return
0
;
}
#if defined(RT_USING_LWP) && defined(
RT
_USING_POSIX)
#if defined(RT_USING_LWP) && defined(
DFS
_USING_POSIX)
static
int
_msh_exec_lwp
(
char
*
cmd
,
rt_size_t
length
)
{
int
argc
;
...
...
@@ -326,7 +324,7 @@ static int _msh_exec_lwp(char *cmd, rt_size_t length)
return
0
;
}
#endif
/* defined(RT_USING_LWP) && defined(
RT_USING_DFS
) */
#endif
/* defined(RT_USING_LWP) && defined(
DFS_USING_POSIX
) */
int
msh_exec
(
char
*
cmd
,
rt_size_t
length
)
{
...
...
@@ -350,7 +348,7 @@ int msh_exec(char *cmd, rt_size_t length)
{
return
cmd_ret
;
}
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
#ifdef DFS_USING_WORKDIR
if
(
msh_exec_script
(
cmd
,
length
)
==
0
)
{
...
...
@@ -371,7 +369,7 @@ int msh_exec(char *cmd, rt_size_t length)
return
0
;
}
#endif
/* RT_USING_LWP */
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
/* truncate the cmd at the first space. */
{
...
...
@@ -400,7 +398,7 @@ static int str_common(const char *str1, const char *str2)
return
(
str
-
str1
);
}
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
void
msh_auto_complete_path
(
char
*
path
)
{
DIR
*
dir
=
RT_NULL
;
...
...
@@ -521,7 +519,7 @@ void msh_auto_complete_path(char *path)
closedir
(
dir
);
rt_free
(
full_path
);
}
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
void
msh_auto_complete
(
char
*
prefix
)
{
...
...
@@ -538,7 +536,7 @@ void msh_auto_complete(char *prefix)
return
;
}
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
/* check whether a spare in the command */
{
char
*
ptr
;
...
...
@@ -564,7 +562,7 @@ void msh_auto_complete(char *prefix)
}
#endif
/* RT_USING_MODULE */
}
#endif
/*
RT_USING_DFS
*/
#endif
/*
DFS_USING_POSIX
*/
/* checks in internal command */
{
...
...
components/finsh/msh_file.c
浏览文件 @
973f2590
...
...
@@ -11,7 +11,7 @@
#include <rtthread.h>
#if defined(RT_USING_FINSH) && defined(
RT
_USING_POSIX)
#if defined(RT_USING_FINSH) && defined(
DFS
_USING_POSIX)
#include <finsh.h>
#include "msh.h"
...
...
@@ -702,5 +702,4 @@ static int cmd_tail(int argc, char **argv)
}
MSH_CMD_EXPORT_ALIAS
(
cmd_tail
,
tail
,
print
the
last
N
-
lines
data
of
the
given
file
);
#endif
/* defined(RT_USING_FINSH) && defined(RT_USING_POSIX) */
#endif
/* defined(RT_USING_FINSH) && defined(DFS_USING_POSIX) */
components/finsh/shell.c
浏览文件 @
973f2590
...
...
@@ -27,9 +27,9 @@
#include "shell.h"
#include "msh.h"
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
#include <dfs_posix.h>
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
/* finsh thread */
#ifndef RT_USING_HEAP
...
...
@@ -104,7 +104,7 @@ const char *finsh_get_prompt(void)
}
strcpy
(
finsh_prompt
,
_MSH_PROMPT
);
#if defined(
RT
_USING_POSIX) && defined(DFS_USING_WORKDIR)
#if defined(
DFS
_USING_POSIX) && defined(DFS_USING_WORKDIR)
/* get current working directory */
getcwd
(
&
finsh_prompt
[
rt_strlen
(
finsh_prompt
)],
RT_CONSOLEBUF_SIZE
-
rt_strlen
(
finsh_prompt
));
#endif
...
...
components/libc/compilers/armlibc/syscalls.c
浏览文件 @
973f2590
...
...
@@ -33,7 +33,7 @@
__asm
(
".global __use_no_semihosting
\n\t
"
);
#else
#pragma import(__use_no_semihosting_swi)
#endif
#endif
/* __CLANG_ARM */
/* Standard IO device handles. */
#define STDIN 0
...
...
@@ -55,10 +55,10 @@ const char __stderr_name[] = "STDERR";
*/
FILEHANDLE
_sys_open
(
const
char
*
name
,
int
openmode
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
int
fd
;
int
mode
=
O_RDONLY
;
#endif
#endif
/* DFS_USING_POSIX */
/* Register standard Input Output devices. */
if
(
strcmp
(
name
,
__stdin_name
)
==
0
)
...
...
@@ -68,7 +68,7 @@ FILEHANDLE _sys_open(const char *name, int openmode)
if
(
strcmp
(
name
,
__stderr_name
)
==
0
)
return
(
STDERR
);
#ifndef
RT
_USING_POSIX
#ifndef
DFS
_USING_POSIX
return
0
;
/* error */
#else
/* Correct openmode from fopen to open */
...
...
@@ -102,19 +102,19 @@ FILEHANDLE _sys_open(const char *name, int openmode)
return
0
;
/* error */
else
return
fd
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
int
_sys_close
(
FILEHANDLE
fh
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
if
(
fh
<=
STDERR
)
return
0
;
/* error */
return
close
(
fh
);
#else
return
0
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
/*
...
...
@@ -144,7 +144,7 @@ int _sys_close(FILEHANDLE fh)
*/
int
_sys_read
(
FILEHANDLE
fh
,
unsigned
char
*
buf
,
unsigned
len
,
int
mode
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
int
size
;
if
(
fh
==
STDIN
)
...
...
@@ -175,7 +175,7 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
}
#else
return
0
;
/* error */
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
/*
...
...
@@ -189,9 +189,9 @@ 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_POSIX
#ifdef
DFS
_USING_POSIX
int
size
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
if
(
fh
==
STDOUT
||
fh
==
STDERR
)
{
...
...
@@ -213,7 +213,7 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
}
else
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
size
=
write
(
fh
,
buf
,
len
);
if
(
size
>=
0
)
return
0
;
/* success */
...
...
@@ -221,7 +221,7 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
return
0
;
/* error */
#else
return
0
;
/* error */
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
}
...
...
@@ -231,7 +231,7 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
*/
int
_sys_seek
(
FILEHANDLE
fh
,
long
pos
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
if
(
fh
<
STDERR
)
return
0
;
/* error */
...
...
@@ -239,7 +239,7 @@ int _sys_seek(FILEHANDLE fh, long pos)
return
lseek
(
fh
,
pos
,
0
);
#else
return
0
;
/* error */
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
/**
...
...
@@ -284,7 +284,7 @@ RT_WEAK void _sys_exit(int return_code)
*/
long
_sys_flen
(
FILEHANDLE
fh
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
struct
stat
stat
;
if
(
fh
<
STDERR
)
...
...
@@ -294,7 +294,7 @@ long _sys_flen(FILEHANDLE fh)
return
stat
.
st_size
;
#else
return
0
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
int
_sys_istty
(
FILEHANDLE
fh
)
...
...
@@ -307,11 +307,11 @@ int _sys_istty(FILEHANDLE fh)
int
remove
(
const
char
*
filename
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
return
unlink
(
filename
);
#else
return
0
;
/* error */
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
#ifdef __MICROLIB
...
...
components/libc/compilers/dlib/SConscript
浏览文件 @
973f2590
...
...
@@ -7,7 +7,7 @@ group = []
CPPDEFINES
=
[
'RT_USING_DLIBC'
]
if
rtconfig
.
PLATFORM
==
'iar'
:
if
GetDepend
(
'
RT
_USING_POSIX'
):
if
GetDepend
(
'
DFS
_USING_POSIX'
):
from
distutils.version
import
LooseVersion
from
iar
import
IARVersion
...
...
components/libc/compilers/dlib/syscall_close.c
浏览文件 @
973f2590
...
...
@@ -24,9 +24,9 @@ int __close(int handle)
handle
==
_LLIO_STDERR
||
handle
==
_LLIO_STDIN
)
return
_LLIO_ERROR
;
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
return
close
(
handle
);
#else
return
_LLIO_ERROR
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
components/libc/compilers/dlib/syscall_lseek.c
浏览文件 @
973f2590
...
...
@@ -33,9 +33,9 @@ long __lseek(int handle, long offset, int whence)
handle
==
_LLIO_STDERR
||
handle
==
_LLIO_STDIN
)
return
_LLIO_ERROR
;
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
return
lseek
(
handle
,
offset
,
whence
);
#else
return
_LLIO_ERROR
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
components/libc/compilers/dlib/syscall_open.c
浏览文件 @
973f2590
...
...
@@ -21,7 +21,7 @@
int
__open
(
const
char
*
filename
,
int
mode
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
int
handle
;
int
open_mode
=
O_RDONLY
;
...
...
@@ -73,5 +73,5 @@ int __open(const char *filename, int mode)
return
handle
;
#else
return
_LLIO_ERROR
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
components/libc/compilers/dlib/syscall_read.c
浏览文件 @
973f2590
...
...
@@ -34,7 +34,7 @@
size_t
__read
(
int
handle
,
unsigned
char
*
buf
,
size_t
len
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
int
size
;
if
(
handle
==
_LLIO_STDIN
)
...
...
@@ -59,5 +59,5 @@ size_t __read(int handle, unsigned char *buf, size_t len)
return
size
;
/* return the length of the data read */
#else
return
_LLIO_ERROR
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
components/libc/compilers/dlib/syscall_remove.c
浏览文件 @
973f2590
...
...
@@ -20,9 +20,9 @@
int
remove
(
const
char
*
filename
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
return
unlink
(
filename
);
#else
return
_LLIO_ERROR
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
components/libc/compilers/dlib/syscall_write.c
浏览文件 @
973f2590
...
...
@@ -37,9 +37,9 @@
size_t
__write
(
int
handle
,
const
unsigned
char
*
buf
,
size_t
len
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
int
size
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
if
((
handle
==
_LLIO_STDOUT
)
||
(
handle
==
_LLIO_STDERR
))
{
...
...
@@ -63,11 +63,11 @@ size_t __write(int handle, const unsigned char *buf, size_t len)
}
else
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
size
=
write
(
handle
,
buf
,
len
);
return
size
;
/* return the length of the data written */
#else
return
_LLIO_ERROR
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
}
components/libc/compilers/gcc/newlib/syscalls.c
浏览文件 @
973f2590
...
...
@@ -109,12 +109,12 @@ int _getpid_r(struct _reent *ptr)
int
_close_r
(
struct
_reent
*
ptr
,
int
fd
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
return
close
(
fd
);
#else
ptr
->
_errno
=
ENOTSUP
;
return
-
1
;
#endif
#endif
/* DFS_USING_POSIX */
}
int
_execve_r
(
struct
_reent
*
ptr
,
const
char
*
name
,
char
*
const
*
argv
,
char
*
const
*
env
)
...
...
@@ -183,7 +183,7 @@ int flock(int fd, int operation)
_off_t
_lseek_r
(
struct
_reent
*
ptr
,
int
fd
,
_off_t
pos
,
int
whence
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
_off_t
rc
;
rc
=
lseek
(
fd
,
pos
,
whence
);
...
...
@@ -191,12 +191,12 @@ _off_t _lseek_r(struct _reent *ptr, int fd, _off_t pos, int whence)
#else
ptr
->
_errno
=
ENOTSUP
;
return
-
1
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
int
_mkdir_r
(
struct
_reent
*
ptr
,
const
char
*
name
,
int
mode
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
int
rc
;
rc
=
mkdir
(
name
,
mode
);
...
...
@@ -204,24 +204,24 @@ int _mkdir_r(struct _reent *ptr, const char *name, int mode)
#else
ptr
->
_errno
=
ENOTSUP
;
return
-
1
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
int
_open_r
(
struct
_reent
*
ptr
,
const
char
*
file
,
int
flags
,
int
mode
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
int
rc
;
rc
=
open
(
file
,
flags
,
mode
);
return
rc
;
#else
ptr
->
_errno
=
ENOTSUP
;
return
-
1
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
_ssize_t
_read_r
(
struct
_reent
*
ptr
,
int
fd
,
void
*
buf
,
size_t
nbytes
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
_ssize_t
rc
;
if
(
fd
==
STDIN_FILENO
)
{
...
...
@@ -247,12 +247,12 @@ _ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes)
#else
ptr
->
_errno
=
ENOTSUP
;
return
-
1
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
int
_rename_r
(
struct
_reent
*
ptr
,
const
char
*
old
,
const
char
*
new
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
int
rc
;
rc
=
rename
(
old
,
new
);
...
...
@@ -260,12 +260,12 @@ int _rename_r(struct _reent *ptr, const char *old, const char *new)
#else
ptr
->
_errno
=
ENOTSUP
;
return
-
1
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
int
_stat_r
(
struct
_reent
*
ptr
,
const
char
*
file
,
struct
stat
*
pstat
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
int
rc
;
rc
=
stat
(
file
,
pstat
);
...
...
@@ -273,24 +273,24 @@ int _stat_r(struct _reent *ptr, const char *file, struct stat *pstat)
#else
ptr
->
_errno
=
ENOTSUP
;
return
-
1
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
int
_unlink_r
(
struct
_reent
*
ptr
,
const
char
*
file
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
return
unlink
(
file
);
#else
ptr
->
_errno
=
ENOTSUP
;
return
-
1
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
_ssize_t
_write_r
(
struct
_reent
*
ptr
,
int
fd
,
const
void
*
buf
,
size_t
nbytes
)
{
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
_ssize_t
rc
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
if
(
fd
==
STDOUT_FILENO
||
fd
==
STDERR_FILENO
)
{
...
...
@@ -311,13 +311,13 @@ _ssize_t _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes)
return
-
1
;
}
#ifdef
RT
_USING_POSIX
#ifdef
DFS
_USING_POSIX
rc
=
write
(
fd
,
buf
,
nbytes
);
return
rc
;
#else
ptr
->
_errno
=
ENOTSUP
;
return
-
1
;
#endif
/*
RT
_USING_POSIX */
#endif
/*
DFS
_USING_POSIX */
}
/* for exit() and abort() */
...
...
components/libc/posix/src/unistd.c
浏览文件 @
973f2590
...
...
@@ -8,935 +8,10 @@
* 2020-09-01 Meco Man first Version
* 2021-02-12 Meco Man move all functions located in <pthread_sleep.c> to this file
*/
#include <rtthread.h>
#include <dfs_file.h>
#include <dfs_private.h>
#include <sys/errno.h>
#include <unistd.h>
/**
* this function is a POSIX compliant version, which will open a file and
* return a file descriptor according specified flags.
*
* @param file the path name of file.
* @param flags the file open flags.
*
* @return the non-negative integer on successful open, others for failed.
*/
int
open
(
const
char
*
file
,
int
flags
,
...)
{
int
fd
,
result
;
struct
dfs_fd
*
d
;
/* allocate a fd */
fd
=
fd_new
();
if
(
fd
<
0
)
{
rt_set_errno
(
-
ENOMEM
);
return
-
1
;
}
d
=
fd_get
(
fd
);
result
=
dfs_file_open
(
d
,
file
,
flags
);
if
(
result
<
0
)
{
/* release the ref-count of fd */
fd_put
(
d
);
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
fd
;
}
RTM_EXPORT
(
open
);
/**
* this function is a POSIX compliant version, which will close the open
* file descriptor.
*
* @param fd the file descriptor.
*
* @return 0 on successful, -1 on failed.
*/
int
close
(
int
fd
)
{
int
result
;
struct
dfs_fd
*
d
;
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
result
=
dfs_file_close
(
d
);
fd_put
(
d
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
fd_put
(
d
);
return
0
;
}
RTM_EXPORT
(
close
);
/**
* this function is a POSIX compliant version, which will read specified data
* buffer length for an open file descriptor.
*
* @param fd the file descriptor.
* @param buf the buffer to save the read data.
* @param len the maximal length of data buffer
*
* @return the actual read data buffer length. If the returned value is 0, it
* may be reach the end of file, please check errno.
*/
#ifdef _READ_WRITE_RETURN_TYPE
_READ_WRITE_RETURN_TYPE
read
(
int
fd
,
void
*
buf
,
size_t
len
)
/* some gcc tool chains will use different data structure */
#else
ssize_t
read
(
int
fd
,
void
*
buf
,
size_t
len
)
#endif
{
int
result
;
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
result
=
dfs_file_read
(
d
,
buf
,
len
);
if
(
result
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
result
;
}
RTM_EXPORT
(
read
);
/**
* this function is a POSIX compliant version, which will write specified data
* buffer length for an open file descriptor.
*
* @param fd the file descriptor
* @param buf the data buffer to be written.
* @param len the data buffer length.
*
* @return the actual written data buffer length.
*/
#ifdef _READ_WRITE_RETURN_TYPE
_READ_WRITE_RETURN_TYPE
write
(
int
fd
,
const
void
*
buf
,
size_t
len
)
/* some gcc tool chains will use different data structure */
#else
ssize_t
write
(
int
fd
,
const
void
*
buf
,
size_t
len
)
#endif
{
int
result
;
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
result
=
dfs_file_write
(
d
,
buf
,
len
);
if
(
result
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
result
;
}
RTM_EXPORT
(
write
);
/**
* this function is a POSIX compliant version, which will seek the offset for
* an open file descriptor.
*
* @param fd the file descriptor.
* @param offset the offset to be seeked.
* @param whence the directory of seek.
*
* @return the current read/write position in the file, or -1 on failed.
*/
off_t
lseek
(
int
fd
,
off_t
offset
,
int
whence
)
{
int
result
;
struct
dfs_fd
*
d
;
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
switch
(
whence
)
{
case
SEEK_SET
:
break
;
case
SEEK_CUR
:
offset
+=
d
->
pos
;
break
;
case
SEEK_END
:
offset
+=
d
->
size
;
break
;
default:
fd_put
(
d
);
rt_set_errno
(
-
EINVAL
);
return
-
1
;
}
if
(
offset
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
-
EINVAL
);
return
-
1
;
}
result
=
dfs_file_lseek
(
d
,
offset
);
if
(
result
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
offset
;
}
RTM_EXPORT
(
lseek
);
#ifndef _WIN32
/* we can not implement these functions */
/**
* this function is a POSIX compliant version, which will rename old file name
* to new file name.
*
* @param old the old file name.
* @param new the new file name.
*
* @return 0 on successful, -1 on failed.
*
* note: the old and new file name must be belong to a same file system.
*/
int
rename
(
const
char
*
old_file
,
const
char
*
new_file
)
{
int
result
;
result
=
dfs_file_rename
(
old_file
,
new_file
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
0
;
}
RTM_EXPORT
(
rename
);
#endif
/**
* this function is a POSIX compliant version, which will unlink (remove) a
* specified path file from file system.
*
* @param pathname the specified path name to be unlinked.
*
* @return 0 on successful, -1 on failed.
*/
int
unlink
(
const
char
*
pathname
)
{
int
result
;
result
=
dfs_file_unlink
(
pathname
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
0
;
}
RTM_EXPORT
(
unlink
);
/**
* this function is a POSIX compliant version, which will get file information.
*
* @param file the file name
* @param buf the data buffer to save stat description.
*
* @return 0 on successful, -1 on failed.
*/
int
stat
(
const
char
*
file
,
struct
stat
*
buf
)
{
int
result
;
result
=
dfs_file_stat
(
file
,
buf
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
result
;
}
RTM_EXPORT
(
stat
);
/**
* this function is a POSIX compliant version, which will get file status.
*
* @param fildes the file description
* @param buf the data buffer to save stat description.
*
* @return 0 on successful, -1 on failed.
*/
int
fstat
(
int
fildes
,
struct
stat
*
buf
)
{
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fildes
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
/* it's the root directory */
buf
->
st_dev
=
0
;
buf
->
st_mode
=
S_IFREG
|
S_IRUSR
|
S_IRGRP
|
S_IROTH
|
S_IWUSR
|
S_IWGRP
|
S_IWOTH
;
if
(
d
->
type
==
FT_DIRECTORY
)
{
buf
->
st_mode
&=
~
S_IFREG
;
buf
->
st_mode
|=
S_IFDIR
|
S_IXUSR
|
S_IXGRP
|
S_IXOTH
;
}
buf
->
st_size
=
d
->
size
;
buf
->
st_mtime
=
0
;
fd_put
(
d
);
return
RT_EOK
;
}
RTM_EXPORT
(
fstat
);
/**
* this function is a POSIX compliant version, which shall request that all data
* for the open file descriptor named by fildes is to be transferred to the storage
* device associated with the file described by fildes.
*
* @param fildes the file description
*
* @return 0 on successful completion. Otherwise, -1 shall be returned and errno
* set to indicate the error.
*/
int
fsync
(
int
fildes
)
{
int
ret
;
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fildes
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
ret
=
dfs_file_flush
(
d
);
fd_put
(
d
);
return
ret
;
}
RTM_EXPORT
(
fsync
);
/**
* this function is a POSIX compliant version, which shall perform a variety of
* control functions on devices.
*
* @param fildes the file description
* @param cmd the specified command
* @param data represents the additional information that is needed by this
* specific device to perform the requested function.
*
* @return 0 on successful completion. Otherwise, -1 shall be returned and errno
* set to indicate the error.
*/
int
fcntl
(
int
fildes
,
int
cmd
,
...)
{
int
ret
=
-
1
;
struct
dfs_fd
*
d
;
/* get the fd */
d
=
fd_get
(
fildes
);
if
(
d
)
{
void
*
arg
;
va_list
ap
;
va_start
(
ap
,
cmd
);
arg
=
va_arg
(
ap
,
void
*
);
va_end
(
ap
);
ret
=
dfs_file_ioctl
(
d
,
cmd
,
arg
);
fd_put
(
d
);
}
else
ret
=
-
EBADF
;
if
(
ret
<
0
)
{
rt_set_errno
(
ret
);
ret
=
-
1
;
}
return
ret
;
}
RTM_EXPORT
(
fcntl
);
/**
* this function is a POSIX compliant version, which shall perform a variety of
* control functions on devices.
*
* @param fildes the file description
* @param cmd the specified command
* @param data represents the additional information that is needed by this
* specific device to perform the requested function.
*
* @return 0 on successful completion. Otherwise, -1 shall be returned and errno
* set to indicate the error.
*/
int
ioctl
(
int
fildes
,
int
cmd
,
...)
{
void
*
arg
;
va_list
ap
;
va_start
(
ap
,
cmd
);
arg
=
va_arg
(
ap
,
void
*
);
va_end
(
ap
);
/* we use fcntl for this API. */
return
fcntl
(
fildes
,
cmd
,
arg
);
}
RTM_EXPORT
(
ioctl
);
/**
*
* this function is a POSIX compliant version, which cause the regular file
* referenced by fd to be truncated to a size of precisely length bytes.
* @param fd the file descriptor.
* @param length the length to be truncated.
*
* @return Upon successful completion, ftruncate() shall return 0;
* otherwise, -1 shall be returned and errno set to indicate the error.
*/
int
ftruncate
(
int
fd
,
off_t
length
)
{
int
result
;
struct
dfs_fd
*
d
;
d
=
fd_get
(
fd
);
if
(
d
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
if
(
length
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
-
EINVAL
);
return
-
1
;
}
result
=
dfs_file_ftruncate
(
d
,
length
);
if
(
result
<
0
)
{
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
/* release the ref-count of fd */
fd_put
(
d
);
return
0
;
}
RTM_EXPORT
(
ftruncate
);
/**
* this function is a POSIX compliant version, which will return the
* information about a mounted file system.
*
* @param path the path which mounted file system.
* @param buf the buffer to save the returned information.
*
* @return 0 on successful, others on failed.
*/
int
statfs
(
const
char
*
path
,
struct
statfs
*
buf
)
{
int
result
;
result
=
dfs_statfs
(
path
,
buf
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
result
;
}
RTM_EXPORT
(
statfs
);
/**
* this function is a POSIX compliant version, which will make a directory
*
* @param path the directory path to be made.
* @param mode
*
* @return 0 on successful, others on failed.
*/
int
mkdir
(
const
char
*
path
,
mode_t
mode
)
{
int
fd
;
struct
dfs_fd
*
d
;
int
result
;
fd
=
fd_new
();
if
(
fd
==
-
1
)
{
rt_set_errno
(
-
ENOMEM
);
return
-
1
;
}
d
=
fd_get
(
fd
);
result
=
dfs_file_open
(
d
,
path
,
O_DIRECTORY
|
O_CREAT
);
if
(
result
<
0
)
{
fd_put
(
d
);
fd_put
(
d
);
rt_set_errno
(
result
);
return
-
1
;
}
dfs_file_close
(
d
);
fd_put
(
d
);
fd_put
(
d
);
return
0
;
}
RTM_EXPORT
(
mkdir
);
/**
* this function is a POSIX compliant version, which will remove a directory.
*
* @param pathname the path name to be removed.
*
* @return 0 on successful, others on failed.
*/
int
rmdir
(
const
char
*
pathname
)
{
int
result
;
result
=
dfs_file_unlink
(
pathname
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
return
0
;
}
RTM_EXPORT
(
rmdir
);
/**
* this function is a POSIX compliant version, which will open a directory.
*
* @param name the path name to be open.
*
* @return the DIR pointer of directory, NULL on open directory failed.
*/
DIR
*
opendir
(
const
char
*
name
)
{
struct
dfs_fd
*
d
;
int
fd
,
result
;
DIR
*
t
;
t
=
NULL
;
/* allocate a fd */
fd
=
fd_new
();
if
(
fd
==
-
1
)
{
rt_set_errno
(
-
ENOMEM
);
return
NULL
;
}
d
=
fd_get
(
fd
);
result
=
dfs_file_open
(
d
,
name
,
O_RDONLY
|
O_DIRECTORY
);
if
(
result
>=
0
)
{
/* open successfully */
t
=
(
DIR
*
)
rt_malloc
(
sizeof
(
DIR
));
if
(
t
==
NULL
)
{
dfs_file_close
(
d
);
fd_put
(
d
);
}
else
{
memset
(
t
,
0
,
sizeof
(
DIR
));
t
->
fd
=
fd
;
}
fd_put
(
d
);
return
t
;
}
/* open failed */
fd_put
(
d
);
fd_put
(
d
);
rt_set_errno
(
result
);
return
NULL
;
}
RTM_EXPORT
(
opendir
);
/**
* this function is a POSIX compliant version, which will return a pointer
* to a dirent structure representing the next directory entry in the
* directory stream.
*
* @param d the directory stream pointer.
*
* @return the next directory entry, NULL on the end of directory or failed.
*/
struct
dirent
*
readdir
(
DIR
*
d
)
{
int
result
;
struct
dfs_fd
*
fd
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
NULL
;
}
if
(
d
->
num
)
{
struct
dirent
*
dirent_ptr
;
dirent_ptr
=
(
struct
dirent
*
)
&
d
->
buf
[
d
->
cur
];
d
->
cur
+=
dirent_ptr
->
d_reclen
;
}
if
(
!
d
->
num
||
d
->
cur
>=
d
->
num
)
{
/* get a new entry */
result
=
dfs_file_getdents
(
fd
,
(
struct
dirent
*
)
d
->
buf
,
sizeof
(
d
->
buf
)
-
1
);
if
(
result
<=
0
)
{
fd_put
(
fd
);
rt_set_errno
(
result
);
return
NULL
;
}
d
->
num
=
result
;
d
->
cur
=
0
;
/* current entry index */
}
fd_put
(
fd
);
return
(
struct
dirent
*
)(
d
->
buf
+
d
->
cur
);
}
RTM_EXPORT
(
readdir
);
/**
* this function is a POSIX compliant version, which will return current
* location in directory stream.
*
* @param d the directory stream pointer.
*
* @return the current location in directory stream.
*/
long
telldir
(
DIR
*
d
)
{
struct
dfs_fd
*
fd
;
long
result
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
0
;
}
result
=
fd
->
pos
-
d
->
num
+
d
->
cur
;
fd_put
(
fd
);
return
result
;
}
RTM_EXPORT
(
telldir
);
/**
* this function is a POSIX compliant version, which will set position of
* next directory structure in the directory stream.
*
* @param d the directory stream.
* @param offset the offset in directory stream.
*/
void
seekdir
(
DIR
*
d
,
off_t
offset
)
{
struct
dfs_fd
*
fd
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
;
}
/* seek to the offset position of directory */
if
(
dfs_file_lseek
(
fd
,
offset
)
>=
0
)
d
->
num
=
d
->
cur
=
0
;
fd_put
(
fd
);
}
RTM_EXPORT
(
seekdir
);
/**
* this function is a POSIX compliant version, which will reset directory
* stream.
*
* @param d the directory stream.
*/
void
rewinddir
(
DIR
*
d
)
{
struct
dfs_fd
*
fd
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
;
}
/* seek to the beginning of directory */
if
(
dfs_file_lseek
(
fd
,
0
)
>=
0
)
d
->
num
=
d
->
cur
=
0
;
fd_put
(
fd
);
}
RTM_EXPORT
(
rewinddir
);
/**
* this function is a POSIX compliant version, which will close a directory
* stream.
*
* @param d the directory stream.
*
* @return 0 on successful, -1 on failed.
*/
int
closedir
(
DIR
*
d
)
{
int
result
;
struct
dfs_fd
*
fd
;
fd
=
fd_get
(
d
->
fd
);
if
(
fd
==
NULL
)
{
rt_set_errno
(
-
EBADF
);
return
-
1
;
}
result
=
dfs_file_close
(
fd
);
fd_put
(
fd
);
fd_put
(
fd
);
rt_free
(
d
);
if
(
result
<
0
)
{
rt_set_errno
(
result
);
return
-
1
;
}
else
return
0
;
}
RTM_EXPORT
(
closedir
);
#ifdef DFS_USING_WORKDIR
/**
* this function is a POSIX compliant version, which will change working
* directory.
*
* @param path the path name to be changed to.
*
* @return 0 on successful, -1 on failed.
*/
int
chdir
(
const
char
*
path
)
{
char
*
fullpath
;
DIR
*
d
;
if
(
path
==
NULL
)
{
dfs_lock
();
rt_kprintf
(
"%s
\n
"
,
working_directory
);
dfs_unlock
();
return
0
;
}
if
(
strlen
(
path
)
>
DFS_PATH_MAX
)
{
rt_set_errno
(
-
ENOTDIR
);
return
-
1
;
}
fullpath
=
dfs_normalize_path
(
NULL
,
path
);
if
(
fullpath
==
NULL
)
{
rt_set_errno
(
-
ENOTDIR
);
return
-
1
;
/* build path failed */
}
dfs_lock
();
d
=
opendir
(
fullpath
);
if
(
d
==
NULL
)
{
rt_free
(
fullpath
);
/* this is a not exist directory */
dfs_unlock
();
return
-
1
;
}
/* close directory stream */
closedir
(
d
);
/* copy full path to working directory */
strncpy
(
working_directory
,
fullpath
,
DFS_PATH_MAX
);
/* release normalize directory path name */
rt_free
(
fullpath
);
dfs_unlock
();
return
0
;
}
RTM_EXPORT
(
chdir
);
#ifdef RT_USING_FINSH
FINSH_FUNCTION_EXPORT_ALIAS
(
chdir
,
cd
,
change
current
working
directory
);
#endif
#endif
/**
* this function is a POSIX compliant version, which shall check the file named
* by the pathname pointed to by the path argument for accessibility according
* to the bit pattern contained in amode.
*
* @param path the specified file/dir path.
* @param amode the value is either the bitwise-inclusive OR of the access
* permissions to be checked (R_OK, W_OK, X_OK) or the existence test (F_OK).
*/
int
access
(
const
char
*
path
,
int
amode
)
{
struct
stat
sb
;
if
(
stat
(
path
,
&
sb
)
<
0
)
return
-
1
;
/* already sets errno */
/* ignore R_OK,W_OK,X_OK condition */
return
0
;
}
/**
* this function is a POSIX compliant version, which will return current
* working directory.
*
* @param buf the returned current directory.
* @param size the buffer size.
*
* @return the returned current directory.
*/
char
*
getcwd
(
char
*
buf
,
size_t
size
)
{
#ifdef DFS_USING_WORKDIR
dfs_lock
();
strncpy
(
buf
,
working_directory
,
size
);
dfs_unlock
();
#else
rt_kprintf
(
NO_WORKING_DIR
);
#endif
return
buf
;
}
RTM_EXPORT
(
getcwd
);
#ifdef RT_USING_POSIX_TERMIOS
#include "termios.h"
int
isatty
(
int
fd
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录