Merge pull request #5283 from mysterywolf/dfs

[dfs] move dfs back
This commit is contained in:
Bernard Xiong 2021-11-24 17:37:03 +08:00 committed by GitHub
commit 64023c38f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 1090 additions and 1134 deletions

View File

@ -1,10 +1,14 @@
# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) #
# Automatically generated file; DO NOT EDIT.
# RT-Thread Project Configuration
#
CONFIG_BOARD_MINI2440=y CONFIG_BOARD_MINI2440=y
# #
# RT-Thread Kernel # RT-Thread Kernel
# #
CONFIG_RT_NAME_MAX=8 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_ARCH_DATA_TYPE is not set
# CONFIG_RT_USING_SMP is not set # CONFIG_RT_USING_SMP is not set
CONFIG_RT_ALIGN_SIZE=4 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_STDLIB is not set
# CONFIG_RT_KSERVICE_USING_TINY_SIZE 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=y
# CONFIG_RT_DEBUG_COLOR is not set # CONFIG_RT_DEBUG_COLOR is not set
# CONFIG_RT_DEBUG_INIT_CONFIG 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_MAILBOX=y
CONFIG_RT_USING_MESSAGEQUEUE=y CONFIG_RT_USING_MESSAGEQUEUE=y
# CONFIG_RT_USING_SIGNALS is not set # CONFIG_RT_USING_SIGNALS is not set
# end of Inter-Thread communication
# #
# Memory Management # Memory Management
@ -65,7 +68,6 @@ CONFIG_RT_USING_SMALL_MEM=y
# CONFIG_RT_USING_USERHEAP is not set # CONFIG_RT_USING_USERHEAP is not set
# CONFIG_RT_USING_MEMTRACE is not set # CONFIG_RT_USING_MEMTRACE is not set
CONFIG_RT_USING_HEAP=y CONFIG_RT_USING_HEAP=y
# end of Memory Management
# #
# Kernel Device Object # Kernel Device Object
@ -77,13 +79,11 @@ CONFIG_RT_USING_CONSOLE=y
CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLEBUF_SIZE=128
CONFIG_RT_CONSOLE_DEVICE_NAME="uart" CONFIG_RT_CONSOLE_DEVICE_NAME="uart"
# CONFIG_RT_PRINTF_LONGLONG is not set # CONFIG_RT_PRINTF_LONGLONG is not set
# end of Kernel Device Object
CONFIG_RT_VER_NUM=0x40004 CONFIG_RT_VER_NUM=0x40004
# end of RT-Thread Kernel
CONFIG_ARCH_ARM=y CONFIG_ARCH_ARM=y
# CONFIG_RT_USING_CPU_FFS is not set
CONFIG_ARCH_ARM_ARM9=y CONFIG_ARCH_ARM_ARM9=y
# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
# #
# RT-Thread Components # RT-Thread Components
@ -98,7 +98,6 @@ CONFIG_RT_MAIN_THREAD_PRIORITY=10
# #
CONFIG_RT_USING_CPLUSPLUS=y CONFIG_RT_USING_CPLUSPLUS=y
# CONFIG_RT_USING_CPLUSPLUS11 is not set # CONFIG_RT_USING_CPLUSPLUS11 is not set
# end of C++ features
# #
# Command shell # Command shell
@ -118,12 +117,12 @@ CONFIG_FINSH_USING_DESCRIPTION=y
# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
# CONFIG_FINSH_USING_AUTH is not set # CONFIG_FINSH_USING_AUTH is not set
CONFIG_FINSH_ARG_MAX=10 CONFIG_FINSH_ARG_MAX=10
# end of Command shell
# #
# Device virtual file system # Device virtual file system
# #
CONFIG_RT_USING_DFS=y CONFIG_RT_USING_DFS=y
CONFIG_DFS_USING_POSIX=y
CONFIG_DFS_USING_WORKDIR=y CONFIG_DFS_USING_WORKDIR=y
CONFIG_DFS_FILESYSTEMS_MAX=5 CONFIG_DFS_FILESYSTEMS_MAX=5
CONFIG_DFS_FILESYSTEM_TYPES_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_USE_ERASE is not set
CONFIG_RT_DFS_ELM_REENTRANT=y CONFIG_RT_DFS_ELM_REENTRANT=y
CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 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_DEVFS=y
# CONFIG_RT_USING_DFS_ROMFS is not set # CONFIG_RT_USING_DFS_ROMFS is not set
CONFIG_RT_USING_DFS_RAMFS=y CONFIG_RT_USING_DFS_RAMFS=y
# CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_DFS_NFS is not set
# end of Device virtual file system
# #
# Device Drivers # Device Drivers
@ -206,27 +202,30 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16
# #
# Using USB # Using USB
# #
# CONFIG_RT_USING_USB is not set
# CONFIG_RT_USING_USB_HOST is not set # CONFIG_RT_USING_USB_HOST is not set
# CONFIG_RT_USING_USB_DEVICE 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 # POSIX layer and C standard library
# #
CONFIG_RT_USING_LIBC=y 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_TIME=y
# CONFIG_RT_LIBC_USING_FILEIO is not set
CONFIG_RT_USING_MODULE=y CONFIG_RT_USING_MODULE=y
CONFIG_RT_USING_CUSTOM_DLMODULE=y CONFIG_RT_USING_CUSTOM_DLMODULE=y
CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 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 # Network
@ -242,10 +241,7 @@ CONFIG_SAL_INTERNET_CHECK=y
# protocol stack implement # protocol stack implement
# #
CONFIG_SAL_USING_LWIP=y CONFIG_SAL_USING_LWIP=y
# end of protocol stack implement
CONFIG_SAL_USING_POSIX=y CONFIG_SAL_USING_POSIX=y
# end of Socket abstraction layer
# #
# Network interface device # Network interface device
@ -258,7 +254,7 @@ CONFIG_NETDEV_USING_AUTO_DEFAULT=y
# CONFIG_NETDEV_USING_IPV6 is not set # CONFIG_NETDEV_USING_IPV6 is not set
CONFIG_NETDEV_IPV4=1 CONFIG_NETDEV_IPV4=1
CONFIG_NETDEV_IPV6=0 CONFIG_NETDEV_IPV6=0
# end of Network interface device # CONFIG_NETDEV_IPV6_SCOPES is not set
# #
# light weight TCP/IP stack # 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_IPADDR="192.168.0.30"
CONFIG_RT_LWIP_GWADDR="192.168.0.1" CONFIG_RT_LWIP_GWADDR="192.168.0.1"
CONFIG_RT_LWIP_MSKADDR="255.255.255.0" CONFIG_RT_LWIP_MSKADDR="255.255.255.0"
# end of Static IPv4 Address
CONFIG_RT_LWIP_UDP=y CONFIG_RT_LWIP_UDP=y
CONFIG_RT_LWIP_TCP=y CONFIG_RT_LWIP_TCP=y
CONFIG_RT_LWIP_RAW=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_HW_CHECKSUM is not set
CONFIG_RT_LWIP_USING_PING=y CONFIG_RT_LWIP_USING_PING=y
# CONFIG_RT_LWIP_DEBUG is not set # CONFIG_RT_LWIP_DEBUG is not set
# end of light weight TCP/IP stack
# #
# AT commands # AT commands
# #
# CONFIG_RT_USING_AT is not set # CONFIG_RT_USING_AT is not set
# end of AT commands
# CONFIG_LWIP_USING_DHCPD is not set # CONFIG_LWIP_USING_DHCPD is not set
# end of Network
# #
# VBUS(Virtual Software BUS) # VBUS(Virtual Software BUS)
# #
# CONFIG_RT_USING_VBUS is not set # CONFIG_RT_USING_VBUS is not set
# end of VBUS(Virtual Software BUS)
# #
# Utilities # Utilities
@ -347,16 +336,12 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_RT_USING_UTEST is not set # CONFIG_RT_USING_UTEST is not set
# CONFIG_RT_USING_VAR_EXPORT is not set # CONFIG_RT_USING_VAR_EXPORT is not set
# CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_RT_LINK is not set
# end of Utilities
# CONFIG_RT_USING_LWP is not set # CONFIG_RT_USING_LWP is not set
# end of RT-Thread Components
# #
# RT-Thread Utestcases # RT-Thread Utestcases
# #
# CONFIG_RT_USING_UTESTCASES is not set # CONFIG_RT_USING_UTESTCASES is not set
# end of RT-Thread Utestcases
# #
# RT-Thread online packages # RT-Thread online packages
@ -391,17 +376,12 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# Marvell WiFi # Marvell WiFi
# #
# CONFIG_PKG_USING_WLANMARVELL is not set # CONFIG_PKG_USING_WLANMARVELL is not set
# end of Marvell WiFi
# #
# Wiced WiFi # Wiced WiFi
# #
# CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_WLAN_WICED is not set
# end of Wiced WiFi
# CONFIG_PKG_USING_RW007 is not set # CONFIG_PKG_USING_RW007 is not set
# end of Wi-Fi
# CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_COAP is not set
# CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NOPOLL is not set
# CONFIG_PKG_USING_NETUTILS 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_JIOT-C-SDK is not set
# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set # CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
# CONFIG_PKG_USING_JOYLINK is not set # CONFIG_PKG_USING_JOYLINK is not set
# end of IoT Cloud
# CONFIG_PKG_USING_NIMBLE is not set # CONFIG_PKG_USING_NIMBLE is not set
# CONFIG_PKG_USING_OTA_DOWNLOADER is not set # CONFIG_PKG_USING_OTA_DOWNLOADER is not set
# CONFIG_PKG_USING_IPMSG 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_GW_DRIVER_LIB is not set
# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set # CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set
# CONFIG_PKG_USING_HM 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 # security packages
@ -468,7 +446,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_TINYCRYPT is not set # CONFIG_PKG_USING_TINYCRYPT is not set
# CONFIG_PKG_USING_TFM is not set # CONFIG_PKG_USING_TFM is not set
# CONFIG_PKG_USING_YD_CRYPTO is not set # CONFIG_PKG_USING_YD_CRYPTO is not set
# end of security packages
# #
# language packages # language packages
@ -477,22 +454,19 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_JERRYSCRIPT is not set # CONFIG_PKG_USING_JERRYSCRIPT is not set
# CONFIG_PKG_USING_MICROPYTHON is not set # CONFIG_PKG_USING_MICROPYTHON is not set
# CONFIG_PKG_USING_PIKASCRIPT is not set # CONFIG_PKG_USING_PIKASCRIPT is not set
# end of language packages
# #
# multimedia 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_LITTLEVGL2RTT is not set
# CONFIG_PKG_USING_LVGL 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_WAVPLAYER is not set
# CONFIG_PKG_USING_TJPGD is not set # CONFIG_PKG_USING_TJPGD is not set
# CONFIG_PKG_USING_PDFGEN 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_OFFICIAL is not set
# CONFIG_PKG_USING_U8G2 is not set # CONFIG_PKG_USING_U8G2 is not set
# end of u8g2: a monochrome graphic library
# end of multimedia packages
# #
# tools packages # tools packages
@ -553,7 +525,7 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_MEM_SANDBOX is not set # CONFIG_PKG_USING_MEM_SANDBOX is not set
# CONFIG_PKG_USING_SOLAR_TERMS is not set # CONFIG_PKG_USING_SOLAR_TERMS is not set
# CONFIG_PKG_USING_GAN_ZHI is not set # CONFIG_PKG_USING_GAN_ZHI is not set
# end of tools packages # CONFIG_PKG_USING_FDT is not set
# #
# system packages # 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_FULL is not set
# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set # CONFIG_PKG_USING_QFPLIB_M0_TINY is not set
# CONFIG_PKG_USING_QFPLIB_M3 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 # 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_CLK is not set
# CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_COMMON is not set
# CONFIG_PKG_USING_UC_MODBUS 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_GUIENGINE is not set
# CONFIG_PKG_USING_PERSIMMON is not set # CONFIG_PKG_USING_PERSIMMON is not set
# CONFIG_PKG_USING_CAIRO 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_FLASHDB is not set
# CONFIG_PKG_USING_SQLITE is not set # CONFIG_PKG_USING_SQLITE is not set
# CONFIG_PKG_USING_RTI 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_DFS_YAFFS is not set
# CONFIG_PKG_USING_LITTLEFS is not set # CONFIG_PKG_USING_LITTLEFS is not set
# CONFIG_PKG_USING_DFS_JFFS2 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_WCWIDTH is not set
# CONFIG_PKG_USING_MCUBOOT is not set # CONFIG_PKG_USING_MCUBOOT is not set
# CONFIG_PKG_USING_TINYUSB is not set # CONFIG_PKG_USING_TINYUSB is not set
# end of system packages
# #
# peripheral libraries and drivers # 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_MISAKA_RGB_BLING is not set
# CONFIG_PKG_USING_BL_MCU_SDK is not set # CONFIG_PKG_USING_BL_MCU_SDK is not set
# CONFIG_PKG_USING_SOFT_SERIAL 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 # AI packages
@ -703,7 +677,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_ULAPACK is not set
# CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_QUEST is not set
# CONFIG_PKG_USING_NAXOS is not set # CONFIG_PKG_USING_NAXOS is not set
# end of AI packages
# #
# miscellaneous packages # miscellaneous packages
@ -716,7 +689,6 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y
# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set # CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set
# CONFIG_PKG_USING_NETWORK_SAMPLES is not set # CONFIG_PKG_USING_NETWORK_SAMPLES is not set
# CONFIG_PKG_USING_PERIPHERAL_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 # 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_SNAKE is not set
# CONFIG_PKG_USING_TETRIS is not set # CONFIG_PKG_USING_TETRIS is not set
# CONFIG_PKG_USING_DONUT 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_LIBCSV is not set
# CONFIG_PKG_USING_OPTPARSE is not set # CONFIG_PKG_USING_OPTPARSE is not set
# CONFIG_PKG_USING_FASTLZ 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_MCURSES is not set
# CONFIG_PKG_USING_COWSAY is not set # CONFIG_PKG_USING_COWSAY is not set
# CONFIG_PKG_USING_TERMBOX is not set # CONFIG_PKG_USING_TERMBOX is not set
# end of miscellaneous packages
# end of RT-Thread online packages

View File

@ -1,7 +1,9 @@
#ifndef RT_CONFIG_H__ #ifndef RT_CONFIG_H__
#define 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 #define BOARD_MINI2440
/* RT-Thread Kernel */ /* RT-Thread Kernel */
@ -22,7 +24,6 @@
/* kservice optimization */ /* kservice optimization */
/* end of kservice optimization */
#define RT_DEBUG #define RT_DEBUG
/* Inter-Thread communication */ /* Inter-Thread communication */
@ -32,7 +33,6 @@
#define RT_USING_EVENT #define RT_USING_EVENT
#define RT_USING_MAILBOX #define RT_USING_MAILBOX
#define RT_USING_MESSAGEQUEUE #define RT_USING_MESSAGEQUEUE
/* end of Inter-Thread communication */
/* Memory Management */ /* Memory Management */
@ -40,7 +40,6 @@
#define RT_USING_MEMHEAP #define RT_USING_MEMHEAP
#define RT_USING_SMALL_MEM #define RT_USING_SMALL_MEM
#define RT_USING_HEAP #define RT_USING_HEAP
/* end of Memory Management */
/* Kernel Device Object */ /* Kernel Device Object */
@ -48,9 +47,7 @@
#define RT_USING_CONSOLE #define RT_USING_CONSOLE
#define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLEBUF_SIZE 128
#define RT_CONSOLE_DEVICE_NAME "uart" #define RT_CONSOLE_DEVICE_NAME "uart"
/* end of Kernel Device Object */
#define RT_VER_NUM 0x40004 #define RT_VER_NUM 0x40004
/* end of RT-Thread Kernel */
#define ARCH_ARM #define ARCH_ARM
#define ARCH_ARM_ARM9 #define ARCH_ARM_ARM9
@ -64,7 +61,6 @@
/* C++ features */ /* C++ features */
#define RT_USING_CPLUSPLUS #define RT_USING_CPLUSPLUS
/* end of C++ features */
/* Command shell */ /* Command shell */
@ -81,11 +77,11 @@
#define MSH_USING_BUILT_IN_COMMANDS #define MSH_USING_BUILT_IN_COMMANDS
#define FINSH_USING_DESCRIPTION #define FINSH_USING_DESCRIPTION
#define FINSH_ARG_MAX 10 #define FINSH_ARG_MAX 10
/* end of Command shell */
/* Device virtual file system */ /* Device virtual file system */
#define RT_USING_DFS #define RT_USING_DFS
#define DFS_USING_POSIX
#define DFS_USING_WORKDIR #define DFS_USING_WORKDIR
#define DFS_FILESYSTEMS_MAX 5 #define DFS_FILESYSTEMS_MAX 5
#define DFS_FILESYSTEM_TYPES_MAX 5 #define DFS_FILESYSTEM_TYPES_MAX 5
@ -105,10 +101,8 @@
#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 #define RT_DFS_ELM_MAX_SECTOR_SIZE 512
#define RT_DFS_ELM_REENTRANT #define RT_DFS_ELM_REENTRANT
#define RT_DFS_ELM_MUTEX_TIMEOUT 3000 #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_DEVFS
#define RT_USING_DFS_RAMFS #define RT_USING_DFS_RAMFS
/* end of Device virtual file system */
/* Device Drivers */ /* Device Drivers */
@ -131,23 +125,22 @@
/* Using USB */ /* Using USB */
/* end of Using USB */
/* end of Device Drivers */
/* POSIX layer and C standard library */ /* POSIX layer and C standard library */
#define RT_USING_LIBC #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_LIBC_USING_TIME
#define RT_USING_MODULE #define RT_USING_MODULE
#define RT_USING_CUSTOM_DLMODULE #define RT_USING_CUSTOM_DLMODULE
#define RT_LIBC_DEFAULT_TIMEZONE 8 #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 */ /* Network */
@ -159,9 +152,7 @@
/* protocol stack implement */ /* protocol stack implement */
#define SAL_USING_LWIP #define SAL_USING_LWIP
/* end of protocol stack implement */
#define SAL_USING_POSIX #define SAL_USING_POSIX
/* end of Socket abstraction layer */
/* Network interface device */ /* Network interface device */
@ -172,7 +163,6 @@
#define NETDEV_USING_AUTO_DEFAULT #define NETDEV_USING_AUTO_DEFAULT
#define NETDEV_IPV4 1 #define NETDEV_IPV4 1
#define NETDEV_IPV6 0 #define NETDEV_IPV6 0
/* end of Network interface device */
/* light weight TCP/IP stack */ /* light weight TCP/IP stack */
@ -191,7 +181,6 @@
#define RT_LWIP_IPADDR "192.168.0.30" #define RT_LWIP_IPADDR "192.168.0.30"
#define RT_LWIP_GWADDR "192.168.0.1" #define RT_LWIP_GWADDR "192.168.0.1"
#define RT_LWIP_MSKADDR "255.255.255.0" #define RT_LWIP_MSKADDR "255.255.255.0"
/* end of Static IPv4 Address */
#define RT_LWIP_UDP #define RT_LWIP_UDP
#define RT_LWIP_TCP #define RT_LWIP_TCP
#define RT_LWIP_RAW #define RT_LWIP_RAW
@ -220,28 +209,21 @@
#define LWIP_NETIF_LOOPBACK 1 #define LWIP_NETIF_LOOPBACK 1
#define RT_LWIP_STATS #define RT_LWIP_STATS
#define RT_LWIP_USING_PING #define RT_LWIP_USING_PING
/* end of light weight TCP/IP stack */
/* AT commands */ /* AT commands */
/* end of AT commands */
/* end of Network */
/* VBUS(Virtual Software BUS) */ /* VBUS(Virtual Software BUS) */
/* end of VBUS(Virtual Software BUS) */
/* Utilities */ /* Utilities */
#define RT_USING_RYM #define RT_USING_RYM
#define YMODEM_USING_CRC_TABLE #define YMODEM_USING_CRC_TABLE
#define YMODEM_USING_FILE_TRANSFER #define YMODEM_USING_FILE_TRANSFER
/* end of Utilities */
/* end of RT-Thread Components */
/* RT-Thread Utestcases */ /* RT-Thread Utestcases */
/* end of RT-Thread Utestcases */
/* RT-Thread online packages */ /* RT-Thread online packages */
@ -252,71 +234,53 @@
/* Marvell WiFi */ /* Marvell WiFi */
/* end of Marvell WiFi */
/* Wiced WiFi */ /* Wiced WiFi */
/* end of Wiced WiFi */
/* end of Wi-Fi */
/* IoT Cloud */ /* IoT Cloud */
/* end of IoT Cloud */
/* end of IoT - internet of things */
/* security packages */ /* security packages */
/* end of security packages */
/* language packages */ /* language packages */
/* end of language packages */
/* multimedia 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 */ /* u8g2: a monochrome graphic library */
/* end of u8g2: a monochrome graphic library */
/* end of multimedia packages */
/* tools packages */ /* tools packages */
/* end of tools packages */
/* system packages */ /* system packages */
/* acceleration: Assembly language or algorithmic acceleration 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 */ /* 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 */ /* peripheral libraries and drivers */
/* end of peripheral libraries and drivers */
/* AI packages */ /* AI packages */
/* end of AI packages */
/* miscellaneous packages */ /* miscellaneous packages */
/* samples: kernel and components samples */ /* samples: kernel and components samples */
/* end of samples: kernel and components samples */
/* entertainment: terminal games and other interesting software packages */ /* 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 #endif

View File

@ -33,6 +33,7 @@ CONFIG_RT_TIMER_THREAD_STACK_SIZE=1024
# CONFIG_RT_KSERVICE_USING_STDLIB is not set # CONFIG_RT_KSERVICE_USING_STDLIB is not set
# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set # CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set
# CONFIG_RT_USING_ASM_MEMCPY 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=y
CONFIG_RT_DEBUG_COLOR=y CONFIG_RT_DEBUG_COLOR=y
# CONFIG_RT_DEBUG_INIT_CONFIG is not set # CONFIG_RT_DEBUG_INIT_CONFIG is not set
@ -126,6 +127,7 @@ CONFIG_FINSH_ARG_MAX=10
# Device virtual file system # Device virtual file system
# #
CONFIG_RT_USING_DFS=y CONFIG_RT_USING_DFS=y
CONFIG_DFS_USING_POSIX=y
CONFIG_DFS_USING_WORKDIR=y CONFIG_DFS_USING_WORKDIR=y
CONFIG_DFS_FILESYSTEMS_MAX=4 CONFIG_DFS_FILESYSTEMS_MAX=4
CONFIG_DFS_FILESYSTEM_TYPES_MAX=8 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_MEM_SANDBOX is not set
# CONFIG_PKG_USING_SOLAR_TERMS is not set # CONFIG_PKG_USING_SOLAR_TERMS is not set
# CONFIG_PKG_USING_GAN_ZHI is not set # CONFIG_PKG_USING_GAN_ZHI is not set
# CONFIG_PKG_USING_FDT is not set
# #
# system packages # system packages

View File

@ -90,6 +90,7 @@
/* Device virtual file system */ /* Device virtual file system */
#define RT_USING_DFS #define RT_USING_DFS
#define DFS_USING_POSIX
#define DFS_USING_WORKDIR #define DFS_USING_WORKDIR
#define DFS_FILESYSTEMS_MAX 4 #define DFS_FILESYSTEMS_MAX 4
#define DFS_FILESYSTEM_TYPES_MAX 8 #define DFS_FILESYSTEM_TYPES_MAX 8

View File

@ -8,6 +8,10 @@ config RT_USING_DFS
The device file system is a light weight virtual file system. The device file system is a light weight virtual file system.
if RT_USING_DFS if RT_USING_DFS
config DFS_USING_POSIX
bool "Using posix-like functions, open/read/write/close"
default y
config DFS_USING_WORKDIR config DFS_USING_WORKDIR
bool "Using working directory" bool "Using working directory"
default y default y

View File

@ -9,6 +9,9 @@ src/dfs_fs.c
cwd = GetCurrentDir() cwd = GetCurrentDir()
CPPPATH = [cwd + "/include"] CPPPATH = [cwd + "/include"]
if GetDepend('DFS_USING_POSIX'):
src += ['src/dfs_posix.c']
group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS'], CPPPATH = CPPPATH) group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS'], CPPPATH = CPPPATH)
if GetDepend('RT_USING_DFS'): if GetDepend('RT_USING_DFS'):

View File

@ -81,16 +81,18 @@ int dfs_init(void);
char *dfs_normalize_path(const char *directory, const char *filename); char *dfs_normalize_path(const char *directory, const char *filename);
const char *dfs_subdir(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_lock(void);
void dfs_unlock(void); void dfs_unlock(void);
#ifdef DFS_USING_POSIX
/* FD APIs */ /* FD APIs */
int fd_new(void); int fd_new(void);
struct dfs_fd *fd_get(int fd); struct dfs_fd *fd_get(int fd);
void fd_put(struct dfs_fd *fd); void fd_put(struct dfs_fd *fd);
int fd_is_open(const char *pathname); #endif /* DFS_USING_POSIX */
struct dfs_fdtable *dfs_fdtable_get(void);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -34,7 +34,6 @@ char working_directory[DFS_PATH_MAX] = {"/"};
#endif #endif
static struct dfs_fdtable _fdtab; static struct dfs_fdtable _fdtab;
static int fd_alloc(struct dfs_fdtable *fdt, int startfd);
/** /**
* @addtogroup DFS * @addtogroup DFS
@ -118,6 +117,7 @@ void dfs_unlock(void)
rt_mutex_release(&fslock); rt_mutex_release(&fslock);
} }
#ifdef DFS_USING_POSIX
static int fd_alloc(struct dfs_fdtable *fdt, int startfd) static int fd_alloc(struct dfs_fdtable *fdt, int startfd)
{ {
int idx; int idx;
@ -276,6 +276,8 @@ void fd_put(struct dfs_fd *fd)
dfs_unlock(); dfs_unlock();
} }
#endif /* DFS_USING_POSIX */
/** /**
* @ingroup Fd * @ingroup Fd
* *

View File

@ -621,7 +621,7 @@ void cat(const char *filename)
} }
FINSH_FUNCTION_EXPORT(cat, print file); FINSH_FUNCTION_EXPORT(cat, print file);
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
#define BUF_SZ 4096 #define BUF_SZ 4096
static void copyfile(const char *src, const char *dst) 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) FINSH_FUNCTION_EXPORT(copy, copy file or dir)
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
#endif /* RT_USING_FINSH */ #endif /* RT_USING_FINSH */
/* @} */ /* @} */

View File

@ -0,0 +1,937 @@
/*
* 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);

View File

@ -9,7 +9,7 @@ msh.c
if GetDepend('MSH_USING_BUILT_IN_COMMANDS'): if GetDepend('MSH_USING_BUILT_IN_COMMANDS'):
src += ['cmd.c'] src += ['cmd.c']
if GetDepend('RT_USING_POSIX'): if GetDepend('DFS_USING_POSIX'):
src += ['msh_file.c'] src += ['msh_file.c']
CPPPATH = [cwd] CPPPATH = [cwd]

View File

@ -15,19 +15,17 @@
#ifdef RT_USING_FINSH #ifdef RT_USING_FINSH
#ifndef FINSH_ARG_MAX #ifndef FINSH_ARG_MAX
#define FINSH_ARG_MAX 8 #define FINSH_ARG_MAX 8
#endif #endif /* FINSH_ARG_MAX */
#include "msh.h" #include "msh.h"
#include "shell.h" #include "shell.h"
#ifdef DFS_USING_POSIX
#ifdef RT_USING_POSIX #include <dfs_posix.h>
#include <dfs_posix.h> #endif /* DFS_USING_POSIX */
#endif
#ifdef RT_USING_MODULE #ifdef RT_USING_MODULE
#include <dlmodule.h> #include <dlmodule.h>
#endif #endif /* RT_USING_MODULE */
typedef int (*cmd_function_t)(int argc, char **argv); 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; 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. /* Return 0 on module executed. Other value indicate error.
*/ */
int msh_exec_module(const char *cmd_line, int size) 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); rt_free(pg_name);
return ret; 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) 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; 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) static int _msh_exec_lwp(char *cmd, rt_size_t length)
{ {
int argc; int argc;
@ -326,7 +324,7 @@ static int _msh_exec_lwp(char *cmd, rt_size_t length)
return 0; 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) 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; return cmd_ret;
} }
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
#ifdef DFS_USING_WORKDIR #ifdef DFS_USING_WORKDIR
if (msh_exec_script(cmd, length) == 0) if (msh_exec_script(cmd, length) == 0)
{ {
@ -371,7 +369,7 @@ int msh_exec(char *cmd, rt_size_t length)
return 0; return 0;
} }
#endif /* RT_USING_LWP */ #endif /* RT_USING_LWP */
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
/* truncate the cmd at the first space. */ /* truncate the cmd at the first space. */
{ {
@ -400,7 +398,7 @@ static int str_common(const char *str1, const char *str2)
return (str - str1); return (str - str1);
} }
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
void msh_auto_complete_path(char *path) void msh_auto_complete_path(char *path)
{ {
DIR *dir = RT_NULL; DIR *dir = RT_NULL;
@ -521,7 +519,7 @@ void msh_auto_complete_path(char *path)
closedir(dir); closedir(dir);
rt_free(full_path); rt_free(full_path);
} }
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
void msh_auto_complete(char *prefix) void msh_auto_complete(char *prefix)
{ {
@ -538,7 +536,7 @@ void msh_auto_complete(char *prefix)
return; return;
} }
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
/* check whether a spare in the command */ /* check whether a spare in the command */
{ {
char *ptr; char *ptr;
@ -564,7 +562,7 @@ void msh_auto_complete(char *prefix)
} }
#endif /* RT_USING_MODULE */ #endif /* RT_USING_MODULE */
} }
#endif /* RT_USING_DFS */ #endif /* DFS_USING_POSIX */
/* checks in internal command */ /* checks in internal command */
{ {

View File

@ -11,7 +11,7 @@
#include <rtthread.h> #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 <finsh.h>
#include "msh.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); 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) */

View File

@ -27,9 +27,9 @@
#include "shell.h" #include "shell.h"
#include "msh.h" #include "msh.h"
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
#include <dfs_posix.h> #include <dfs_posix.h>
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
/* finsh thread */ /* finsh thread */
#ifndef RT_USING_HEAP #ifndef RT_USING_HEAP
@ -104,7 +104,7 @@ const char *finsh_get_prompt(void)
} }
strcpy(finsh_prompt, _MSH_PROMPT); 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 */ /* get current working directory */
getcwd(&finsh_prompt[rt_strlen(finsh_prompt)], RT_CONSOLEBUF_SIZE - rt_strlen(finsh_prompt)); getcwd(&finsh_prompt[rt_strlen(finsh_prompt)], RT_CONSOLEBUF_SIZE - rt_strlen(finsh_prompt));
#endif #endif

View File

@ -33,7 +33,7 @@
__asm(".global __use_no_semihosting\n\t"); __asm(".global __use_no_semihosting\n\t");
#else #else
#pragma import(__use_no_semihosting_swi) #pragma import(__use_no_semihosting_swi)
#endif #endif /* __CLANG_ARM */
/* Standard IO device handles. */ /* Standard IO device handles. */
#define STDIN 0 #define STDIN 0
@ -55,10 +55,10 @@ const char __stderr_name[] = "STDERR";
*/ */
FILEHANDLE _sys_open(const char *name, int openmode) FILEHANDLE _sys_open(const char *name, int openmode)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int fd; int fd;
int mode = O_RDONLY; int mode = O_RDONLY;
#endif #endif /* DFS_USING_POSIX */
/* Register standard Input Output devices. */ /* Register standard Input Output devices. */
if (strcmp(name, __stdin_name) == 0) if (strcmp(name, __stdin_name) == 0)
@ -68,7 +68,7 @@ FILEHANDLE _sys_open(const char *name, int openmode)
if (strcmp(name, __stderr_name) == 0) if (strcmp(name, __stderr_name) == 0)
return (STDERR); return (STDERR);
#ifndef RT_USING_POSIX #ifndef DFS_USING_POSIX
return 0; /* error */ return 0; /* error */
#else #else
/* Correct openmode from fopen to open */ /* Correct openmode from fopen to open */
@ -102,19 +102,19 @@ FILEHANDLE _sys_open(const char *name, int openmode)
return 0; /* error */ return 0; /* error */
else else
return fd; return fd;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
int _sys_close(FILEHANDLE fh) int _sys_close(FILEHANDLE fh)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
if (fh <= STDERR) if (fh <= STDERR)
return 0; /* error */ return 0; /* error */
return close(fh); return close(fh);
#else #else
return 0; 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) int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int size; int size;
if (fh == STDIN) if (fh == STDIN)
@ -175,7 +175,7 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
} }
#else #else
return 0; /* error */ 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) int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int size; int size;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
if (fh == STDOUT || fh == STDERR) if (fh == STDOUT || fh == STDERR)
{ {
@ -213,7 +213,7 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
} }
else else
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
size = write(fh, buf, len); size = write(fh, buf, len);
if (size >= 0) if (size >= 0)
return 0; /* success */ return 0; /* success */
@ -221,7 +221,7 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
return 0; /* error */ return 0; /* error */
#else #else
return 0; /* error */ 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) int _sys_seek(FILEHANDLE fh, long pos)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
if (fh < STDERR) if (fh < STDERR)
return 0; /* error */ return 0; /* error */
@ -239,7 +239,7 @@ int _sys_seek(FILEHANDLE fh, long pos)
return lseek(fh, pos, 0); return lseek(fh, pos, 0);
#else #else
return 0; /* error */ 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) long _sys_flen(FILEHANDLE fh)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
struct stat stat; struct stat stat;
if (fh < STDERR) if (fh < STDERR)
@ -294,7 +294,7 @@ long _sys_flen(FILEHANDLE fh)
return stat.st_size; return stat.st_size;
#else #else
return 0; return 0;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
int _sys_istty(FILEHANDLE fh) int _sys_istty(FILEHANDLE fh)
@ -307,11 +307,11 @@ int _sys_istty(FILEHANDLE fh)
int remove(const char *filename) int remove(const char *filename)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
return unlink(filename); return unlink(filename);
#else #else
return 0; /* error */ return 0; /* error */
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
#ifdef __MICROLIB #ifdef __MICROLIB

View File

@ -7,7 +7,7 @@ group = []
CPPDEFINES = ['RT_USING_DLIBC'] CPPDEFINES = ['RT_USING_DLIBC']
if rtconfig.PLATFORM == 'iar': if rtconfig.PLATFORM == 'iar':
if GetDepend('RT_USING_POSIX'): if GetDepend('DFS_USING_POSIX'):
from distutils.version import LooseVersion from distutils.version import LooseVersion
from iar import IARVersion from iar import IARVersion

View File

@ -24,9 +24,9 @@ int __close(int handle)
handle == _LLIO_STDERR || handle == _LLIO_STDERR ||
handle == _LLIO_STDIN) handle == _LLIO_STDIN)
return _LLIO_ERROR; return _LLIO_ERROR;
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
return close(handle); return close(handle);
#else #else
return _LLIO_ERROR; return _LLIO_ERROR;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }

View File

@ -33,9 +33,9 @@ long __lseek(int handle, long offset, int whence)
handle == _LLIO_STDERR || handle == _LLIO_STDERR ||
handle == _LLIO_STDIN) handle == _LLIO_STDIN)
return _LLIO_ERROR; return _LLIO_ERROR;
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
return lseek(handle, offset, whence); return lseek(handle, offset, whence);
#else #else
return _LLIO_ERROR; return _LLIO_ERROR;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }

View File

@ -21,7 +21,7 @@
int __open(const char *filename, int mode) int __open(const char *filename, int mode)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int handle; int handle;
int open_mode = O_RDONLY; int open_mode = O_RDONLY;
@ -73,5 +73,5 @@ int __open(const char *filename, int mode)
return handle; return handle;
#else #else
return _LLIO_ERROR; return _LLIO_ERROR;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }

View File

@ -34,7 +34,7 @@
size_t __read(int handle, unsigned char *buf, size_t len) size_t __read(int handle, unsigned char *buf, size_t len)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int size; int size;
if (handle == _LLIO_STDIN) 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 */ return size; /* return the length of the data read */
#else #else
return _LLIO_ERROR; return _LLIO_ERROR;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }

View File

@ -20,9 +20,9 @@
int remove(const char *filename) int remove(const char *filename)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
return unlink(filename); return unlink(filename);
#else #else
return _LLIO_ERROR; return _LLIO_ERROR;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }

View File

@ -37,9 +37,9 @@
size_t __write(int handle, const unsigned char *buf, size_t len) size_t __write(int handle, const unsigned char *buf, size_t len)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int size; int size;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
if ((handle == _LLIO_STDOUT) || (handle == _LLIO_STDERR)) if ((handle == _LLIO_STDOUT) || (handle == _LLIO_STDERR))
{ {
@ -63,11 +63,11 @@ size_t __write(int handle, const unsigned char *buf, size_t len)
} }
else else
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
size = write(handle, buf, len); size = write(handle, buf, len);
return size; /* return the length of the data written */ return size; /* return the length of the data written */
#else #else
return _LLIO_ERROR; return _LLIO_ERROR;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
} }

View File

@ -109,12 +109,12 @@ int _getpid_r(struct _reent *ptr)
int _close_r(struct _reent *ptr, int fd) int _close_r(struct _reent *ptr, int fd)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
return close(fd); return close(fd);
#else #else
ptr->_errno = ENOTSUP; ptr->_errno = ENOTSUP;
return -1; return -1;
#endif #endif /* DFS_USING_POSIX */
} }
int _execve_r(struct _reent *ptr, const char * name, char *const *argv, char *const *env) 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) _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; _off_t rc;
rc = lseek(fd, pos, whence); rc = lseek(fd, pos, whence);
@ -191,12 +191,12 @@ _off_t _lseek_r(struct _reent *ptr, int fd, _off_t pos, int whence)
#else #else
ptr->_errno = ENOTSUP; ptr->_errno = ENOTSUP;
return -1; return -1;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
int _mkdir_r(struct _reent *ptr, const char *name, int mode) int _mkdir_r(struct _reent *ptr, const char *name, int mode)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int rc; int rc;
rc = mkdir(name, mode); rc = mkdir(name, mode);
@ -204,24 +204,24 @@ int _mkdir_r(struct _reent *ptr, const char *name, int mode)
#else #else
ptr->_errno = ENOTSUP; ptr->_errno = ENOTSUP;
return -1; return -1;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
int _open_r(struct _reent *ptr, const char *file, int flags, int mode) int _open_r(struct _reent *ptr, const char *file, int flags, int mode)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int rc; int rc;
rc = open(file, flags, mode); rc = open(file, flags, mode);
return rc; return rc;
#else #else
ptr->_errno = ENOTSUP; ptr->_errno = ENOTSUP;
return -1; return -1;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
_ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes) _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; _ssize_t rc;
if (fd == STDIN_FILENO) if (fd == STDIN_FILENO)
{ {
@ -247,12 +247,12 @@ _ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes)
#else #else
ptr->_errno = ENOTSUP; ptr->_errno = ENOTSUP;
return -1; return -1;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
int _rename_r(struct _reent *ptr, const char *old, const char *new) int _rename_r(struct _reent *ptr, const char *old, const char *new)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int rc; int rc;
rc = rename(old, new); rc = rename(old, new);
@ -260,12 +260,12 @@ int _rename_r(struct _reent *ptr, const char *old, const char *new)
#else #else
ptr->_errno = ENOTSUP; ptr->_errno = ENOTSUP;
return -1; return -1;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
int _stat_r(struct _reent *ptr, const char *file, struct stat *pstat) int _stat_r(struct _reent *ptr, const char *file, struct stat *pstat)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
int rc; int rc;
rc = stat(file, pstat); rc = stat(file, pstat);
@ -273,24 +273,24 @@ int _stat_r(struct _reent *ptr, const char *file, struct stat *pstat)
#else #else
ptr->_errno = ENOTSUP; ptr->_errno = ENOTSUP;
return -1; return -1;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
int _unlink_r(struct _reent *ptr, const char *file) int _unlink_r(struct _reent *ptr, const char *file)
{ {
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
return unlink(file); return unlink(file);
#else #else
ptr->_errno = ENOTSUP; ptr->_errno = ENOTSUP;
return -1; 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) _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; _ssize_t rc;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
if (fd == STDOUT_FILENO || fd == STDERR_FILENO) 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; return -1;
} }
#ifdef RT_USING_POSIX #ifdef DFS_USING_POSIX
rc = write(fd, buf, nbytes); rc = write(fd, buf, nbytes);
return rc; return rc;
#else #else
ptr->_errno = ENOTSUP; ptr->_errno = ENOTSUP;
return -1; return -1;
#endif /* RT_USING_POSIX */ #endif /* DFS_USING_POSIX */
} }
/* for exit() and abort() */ /* for exit() and abort() */

View File

@ -8,935 +8,10 @@
* 2020-09-01 Meco Man first Version * 2020-09-01 Meco Man first Version
* 2021-02-12 Meco Man move all functions located in <pthread_sleep.c> to this file * 2021-02-12 Meco Man move all functions located in <pthread_sleep.c> to this file
*/ */
#include <rtthread.h> #include <rtthread.h>
#include <dfs_file.h>
#include <dfs_private.h>
#include <sys/errno.h>
#include <unistd.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 #ifdef RT_USING_POSIX_TERMIOS
#include "termios.h" #include "termios.h"
int isatty(int fd) int isatty(int fd)