1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2005-02-22 Bernard The first version. 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #ifndef __DFS_H__ 12*10465441SEvalZero #define __DFS_H__ 13*10465441SEvalZero 14*10465441SEvalZero #include <stdio.h> 15*10465441SEvalZero #include <stdint.h> 16*10465441SEvalZero #include <stdlib.h> 17*10465441SEvalZero #include <string.h> 18*10465441SEvalZero 19*10465441SEvalZero #include <time.h> 20*10465441SEvalZero #include <rtthread.h> 21*10465441SEvalZero #include <rtdevice.h> 22*10465441SEvalZero 23*10465441SEvalZero #ifndef DFS_FILESYSTEMS_MAX 24*10465441SEvalZero #define DFS_FILESYSTEMS_MAX 2 25*10465441SEvalZero #endif 26*10465441SEvalZero 27*10465441SEvalZero #ifndef DFS_FD_MAX 28*10465441SEvalZero #define DFS_FD_MAX 4 29*10465441SEvalZero #endif 30*10465441SEvalZero 31*10465441SEvalZero /* 32*10465441SEvalZero * skip stdin/stdout/stderr normally 33*10465441SEvalZero */ 34*10465441SEvalZero #ifndef DFS_FD_OFFSET 35*10465441SEvalZero #define DFS_FD_OFFSET 3 36*10465441SEvalZero #endif 37*10465441SEvalZero 38*10465441SEvalZero #ifndef DFS_PATH_MAX 39*10465441SEvalZero #define DFS_PATH_MAX 256 40*10465441SEvalZero #endif 41*10465441SEvalZero 42*10465441SEvalZero #ifndef SECTOR_SIZE 43*10465441SEvalZero #define SECTOR_SIZE 512 44*10465441SEvalZero #endif 45*10465441SEvalZero 46*10465441SEvalZero #ifndef DFS_FILESYSTEM_TYPES_MAX 47*10465441SEvalZero #define DFS_FILESYSTEM_TYPES_MAX 2 48*10465441SEvalZero #endif 49*10465441SEvalZero 50*10465441SEvalZero #define DFS_FS_FLAG_DEFAULT 0x00 /* default flag */ 51*10465441SEvalZero #define DFS_FS_FLAG_FULLPATH 0x01 /* set full path to underlaying file system */ 52*10465441SEvalZero 53*10465441SEvalZero /* File types */ 54*10465441SEvalZero #define FT_REGULAR 0 /* regular file */ 55*10465441SEvalZero #define FT_SOCKET 1 /* socket file */ 56*10465441SEvalZero #define FT_DIRECTORY 2 /* directory */ 57*10465441SEvalZero #define FT_USER 3 /* user defined */ 58*10465441SEvalZero 59*10465441SEvalZero /* File flags */ 60*10465441SEvalZero #define DFS_F_OPEN 0x01000000 61*10465441SEvalZero #define DFS_F_DIRECTORY 0x02000000 62*10465441SEvalZero #define DFS_F_EOF 0x04000000 63*10465441SEvalZero #define DFS_F_ERR 0x08000000 64*10465441SEvalZero 65*10465441SEvalZero #ifdef __cplusplus 66*10465441SEvalZero extern "C" { 67*10465441SEvalZero #endif 68*10465441SEvalZero 69*10465441SEvalZero struct statfs 70*10465441SEvalZero { 71*10465441SEvalZero size_t f_bsize; /* block size */ 72*10465441SEvalZero size_t f_blocks; /* total data blocks in file system */ 73*10465441SEvalZero size_t f_bfree; /* free blocks in file system */ 74*10465441SEvalZero }; 75*10465441SEvalZero 76*10465441SEvalZero struct dirent 77*10465441SEvalZero { 78*10465441SEvalZero uint8_t d_type; /* The type of the file */ 79*10465441SEvalZero uint8_t d_namlen; /* The length of the not including the terminating null file name */ 80*10465441SEvalZero uint16_t d_reclen; /* length of this record */ 81*10465441SEvalZero char d_name[DFS_PATH_MAX]; /* The null-terminated file name */ 82*10465441SEvalZero }; 83*10465441SEvalZero 84*10465441SEvalZero struct dfs_fdtable 85*10465441SEvalZero { 86*10465441SEvalZero uint32_t maxfd; 87*10465441SEvalZero struct dfs_fd **fds; 88*10465441SEvalZero }; 89*10465441SEvalZero 90*10465441SEvalZero /* Initialization of dfs */ 91*10465441SEvalZero int dfs_init(void); 92*10465441SEvalZero 93*10465441SEvalZero char *dfs_normalize_path(const char *directory, const char *filename); 94*10465441SEvalZero const char *dfs_subdir(const char *directory, const char *filename); 95*10465441SEvalZero 96*10465441SEvalZero void dfs_lock(void); 97*10465441SEvalZero void dfs_unlock(void); 98*10465441SEvalZero 99*10465441SEvalZero /* FD APIs */ 100*10465441SEvalZero int fd_new(void); 101*10465441SEvalZero struct dfs_fd *fd_get(int fd); 102*10465441SEvalZero void fd_put(struct dfs_fd *fd); 103*10465441SEvalZero int fd_is_open(const char *pathname); 104*10465441SEvalZero 105*10465441SEvalZero struct dfs_fdtable* dfs_fdtable_get(void); 106*10465441SEvalZero 107*10465441SEvalZero #ifdef __cplusplus 108*10465441SEvalZero } 109*10465441SEvalZero #endif 110*10465441SEvalZero 111*10465441SEvalZero #endif 112