66#ifdef MODULE_NANOCOAP_FS
67#include "net/sock/config.h"
75#define restrict __restrict__
85#define MAX6(a, b, c, d, e, f) MAX(MAX(MAX(MAX((a), (b)), MAX((c), (d))), (e)), (f))
92#ifdef MODULE_FATFS_VFS
96# define _FATFS_FILE_CACHE (0)
98# define _FATFS_FILE_CACHE FF_MAX_SS
102# if (__SIZEOF_POINTER__ == 8)
103# define _FATFS_FILE_SEEK_PTR (8)
105# define _FATFS_FILE_SEEK_PTR (4)
108# define _FATFS_FILE_SEEK_PTR (0)
112# define _FATFS_FILE_EXFAT (48)
113# define _FATFS_DIR_EXFAT (32)
115# define _FATFS_FILE_EXFAT (0)
116# define _FATFS_DIR_EXFAT (0)
120# if (__SIZEOF_POINTER__ == 8)
121# define _FATFS_DIR_LFN (8)
123# define _FATFS_DIR_LFN (4)
126# define _FATFS_DIR_LFN (0)
129# if (__SIZEOF_POINTER__ == 8)
130# define FATFS_VFS_DIR_BUFFER_SIZE (64 + _FATFS_DIR_LFN + _FATFS_DIR_EXFAT)
131# define FATFS_VFS_FILE_BUFFER_SIZE (64 + VFS_NAME_MAX + _FATFS_FILE_CACHE + \
132 _FATFS_FILE_SEEK_PTR + _FATFS_FILE_EXFAT)
134# define FATFS_VFS_DIR_BUFFER_SIZE (44 + _FATFS_DIR_LFN + _FATFS_DIR_EXFAT)
135# define FATFS_VFS_FILE_BUFFER_SIZE (44 + VFS_NAME_MAX + _FATFS_FILE_CACHE + \
136 _FATFS_FILE_SEEK_PTR + _FATFS_FILE_EXFAT)
139# define FATFS_VFS_DIR_BUFFER_SIZE (1)
140# define FATFS_VFS_FILE_BUFFER_SIZE (1)
148#ifdef MODULE_LITTLEFS
149# if (__SIZEOF_POINTER__ == 8)
150# define LITTLEFS_VFS_DIR_BUFFER_SIZE (48)
151# define LITTLEFS_VFS_FILE_BUFFER_SIZE (72)
153# define LITTLEFS_VFS_DIR_BUFFER_SIZE (44)
154# define LITTLEFS_VFS_FILE_BUFFER_SIZE (56)
157# define LITTLEFS_VFS_DIR_BUFFER_SIZE (1)
158# define LITTLEFS_VFS_FILE_BUFFER_SIZE (1)
166#ifdef MODULE_LITTLEFS2
167# if (__SIZEOF_POINTER__ == 8)
168# define LITTLEFS2_VFS_DIR_BUFFER_SIZE (56)
169# define LITTLEFS2_VFS_FILE_BUFFER_SIZE (104)
171# define LITTLEFS2_VFS_DIR_BUFFER_SIZE (52)
172# define LITTLEFS2_VFS_FILE_BUFFER_SIZE (84)
175# define LITTLEFS2_VFS_DIR_BUFFER_SIZE (1)
176# define LITTLEFS2_VFS_FILE_BUFFER_SIZE (1)
185# define SPIFFS_VFS_DIR_BUFFER_SIZE (12)
186# define SPIFFS_VFS_FILE_BUFFER_SIZE (1)
188# define SPIFFS_VFS_DIR_BUFFER_SIZE (1)
189# define SPIFFS_VFS_FILE_BUFFER_SIZE (1)
197#if defined(MODULE_LWEXT4) || DOXYGEN
198# define LWEXT4_VFS_DIR_BUFFER_SIZE (308)
199# define LWEXT4_VFS_FILE_BUFFER_SIZE (32)
201# define LWEXT4_VFS_DIR_BUFFER_SIZE (1)
202# define LWEXT4_VFS_FILE_BUFFER_SIZE (1)
210#if defined(MODULE_NANOCOAP_FS) || DOXYGEN
211# define NANOCOAP_FS_VFS_DIR_BUFFER_SIZE \
212 (4 + CONFIG_SOCK_URLPATH_MAXLEN)
213# define NANOCOAP_FS_VFS_FILE_BUFFER_SIZE \
214 (4 + CONFIG_SOCK_URLPATH_MAXLEN)
216# define NANOCOAP_FS_VFS_DIR_BUFFER_SIZE (1)
217# define NANOCOAP_FS_VFS_FILE_BUFFER_SIZE (1)
221#ifndef VFS_MAX_OPEN_FILES
225#define VFS_MAX_OPEN_FILES (16)
228#ifndef VFS_DIR_BUFFER_SIZE
256#define VFS_DIR_BUFFER_SIZE MAX6(FATFS_VFS_DIR_BUFFER_SIZE, \
257 LITTLEFS_VFS_DIR_BUFFER_SIZE, \
258 LITTLEFS2_VFS_DIR_BUFFER_SIZE, \
259 SPIFFS_VFS_DIR_BUFFER_SIZE, \
260 LWEXT4_VFS_DIR_BUFFER_SIZE, \
261 NANOCOAP_FS_VFS_DIR_BUFFER_SIZE \
265#ifndef VFS_FILE_BUFFER_SIZE
285#define VFS_FILE_BUFFER_SIZE MAX6(FATFS_VFS_FILE_BUFFER_SIZE, \
286 LITTLEFS_VFS_FILE_BUFFER_SIZE, \
287 LITTLEFS2_VFS_FILE_BUFFER_SIZE, \
288 SPIFFS_VFS_FILE_BUFFER_SIZE, \
289 LWEXT4_VFS_FILE_BUFFER_SIZE, \
290 NANOCOAP_FS_VFS_FILE_BUFFER_SIZE \
302#define VFS_NAME_MAX (31)
308#define VFS_ANY_FD (-1)
315#define VFS_MTD(mtd) { .dev = &mtd.base }
330#define VFS_AUTO_MOUNT(type, mtd, path, idx) \
331 static type ## _desc_t fs_desc_ ## idx = mtd; \
333 XFA(vfs_mount_t, vfs_mountpoints_xfa, 0) \
334 _mount_mtd_ ## idx = { \
335 .fs = &type ## _file_system, \
336 .mount_point = path, \
337 .private_data = &fs_desc_ ## idx, \
370#define VFS_FS_FLAG_WANT_ABS_PATH (1 << 0)
839int vfs_open(
const char *name,
int flags, mode_t mode);
883ssize_t
vfs_write(
int fd,
const void *src,
size_t count);
1093int vfs_stat(
const char *restrict path,
struct stat *restrict buf);
1224 const char *restrict path,
1225 struct stat *restrict buf);
int16_t kernel_pid_t
Unique process identifier.
#define VFS_DIR_BUFFER_SIZE
Size of buffer space in vfs_DIR.
int vfs_mount(vfs_mount_t *mountp)
Mount a file system.
int vfs_normalize_path(char *buf, const char *path, size_t buflen)
Normalize a path.
int vfs_open(const char *name, int flags, mode_t mode)
Open a file.
int vfs_statvfs(const char *restrict path, struct statvfs *restrict buf)
Get file system status.
ssize_t vfs_write(int fd, const void *src, size_t count)
Write bytes to an open file.
int vfs_mkdir(const char *name, mode_t mode)
Create a directory on the file system.
int vfs_umount(vfs_mount_t *mountp, bool force)
Unmount a mounted file system.
int vfs_close(int fd)
Close an open file.
#define VFS_FILE_BUFFER_SIZE
Size of buffer space in vfs_file_t.
int vfs_sysop_stat_from_fstat(vfs_mount_t *mountp, const char *restrict path, struct stat *restrict buf)
Implementation of stat using fstat
const vfs_mount_t * vfs_iterate_mounts(const vfs_mount_t *cur)
Iterate through all mounted file systems.
#define VFS_NAME_MAX
Maximum length of the name in a vfs_dirent_t (not including terminating null)
int vfs_readdir(vfs_DIR *dirp, vfs_dirent_t *entry)
Read a single entry from the open directory dirp and advance the read position by one.
off_t vfs_lseek(int fd, off_t off, int whence)
Seek to position in file.
int vfs_format(vfs_mount_t *mountp)
Format a file system.
int vfs_bind(int fd, int flags, const vfs_file_ops_t *f_op, void *private_data)
Allocate a new file descriptor and give it file operations.
int vfs_format_by_path(const char *path)
Format a file system.
int vfs_rename(const char *from_path, const char *to_path)
Rename a file.
ssize_t vfs_write_iol(int fd, const iolist_t *iolist)
Write bytes from an iolist to an open file.
int vfs_stat(const char *restrict path, struct stat *restrict buf)
Get file status.
void vfs_bind_stdio(void)
Allocate and bind file descriptors for STDIN, STDERR, and STDOUT.
ssize_t vfs_readline(int fd, char *dest, size_t count)
Read a line from an open text file.
const vfs_file_t * vfs_file_get(int fd)
Get information about the file for internal purposes.
int vfs_unlink(const char *name)
Unlink (delete) a file from a mounted file system.
int vfs_fsync(int fd)
Synchronize a file on storage Any pending writes are written out to storage.
int vfs_opendir(vfs_DIR *dirp, const char *dirname)
Open a directory for reading with readdir.
const vfs_file_ops_t mtd_vfs_ops
MTD driver for VFS.
int vfs_dstatvfs(vfs_DIR *dirp, struct statvfs *buf)
Get file system status of the file system containing an open directory.
int vfs_rmdir(const char *name)
Remove a directory from the file system.
int vfs_fcntl(int fd, int cmd, int arg)
Query/set options on an open file.
int vfs_fstat(int fd, struct stat *buf)
Get status of an open file.
ssize_t vfs_read(int fd, void *dest, size_t count)
Read bytes from an open file.
bool vfs_iterate_mount_dirs(vfs_DIR *dir)
Iterate through all mounted file systems by their root directories.
int vfs_closedir(vfs_DIR *dirp)
Close an open directory.
int vfs_fstatvfs(int fd, struct statvfs *buf)
Get file system status of the file system containing an open file.
int vfs_mount_by_path(const char *path)
Mount a file system with a pre-configured mount path.
int vfs_unmount_by_path(const char *path, bool force)
Unmount a file system with a pre-configured mount path.
iolist scatter / gather IO
Scheduler API definition.
POSIX compatible sys/statvfs.h definitions.
iolist structure definition
Internal representation of a file system directory entry.
const vfs_dir_ops_t * d_op
Directory operations table.
int value
alternatively, you can use private_data as an int
vfs_mount_t * mp
Pointer to mount table entry.
void * ptr
pointer to private data
Operations on open directories.
int(* readdir)(vfs_DIR *dirp, vfs_dirent_t *entry)
Read a single entry from the open directory dirp and advance the read position by one.
int(* opendir)(vfs_DIR *dirp, const char *dirname)
Open a directory for reading with readdir.
int(* closedir)(vfs_DIR *dirp)
Close an open directory.
User facing directory entry.
ino_t d_ino
file serial number, unique for the file system ("inode" in Linux)
Operations on open files.
int(* fcntl)(vfs_file_t *filp, int cmd, int arg)
Query/set options on an open file.
int(* close)(vfs_file_t *filp)
Close an open file.
int(* fstat)(vfs_file_t *filp, struct stat *buf)
Get status of an open file.
int(* fsync)(vfs_file_t *filp)
Synchronize a file on storage Any pending writes are written out to storage.
off_t(* lseek)(vfs_file_t *filp, off_t off, int whence)
Seek to position in file.
int(* open)(vfs_file_t *filp, const char *name, int flags, mode_t mode)
Attempt to open a file in the file system at rel_path.
ssize_t(* read)(vfs_file_t *filp, void *dest, size_t nbytes)
Read bytes from an open file.
ssize_t(* write)(vfs_file_t *filp, const void *src, size_t nbytes)
Write bytes to an open file.
Operations on mounted file systems.
int(* mount)(vfs_mount_t *mountp)
Perform any extra processing needed after mounting a file system.
int(* unlink)(vfs_mount_t *mountp, const char *name)
Unlink (delete) a file from the file system.
int(* rename)(vfs_mount_t *mountp, const char *from_path, const char *to_path)
Rename a file.
int(* stat)(vfs_mount_t *mountp, const char *restrict path, struct stat *restrict buf)
Get file status.
int(* mkdir)(vfs_mount_t *mountp, const char *name, mode_t mode)
Create a directory on the file system.
int(* format)(vfs_mount_t *mountp)
Format the file system on the given mount point.
int(* rmdir)(vfs_mount_t *mountp, const char *name)
Remove a directory from the file system.
int(* umount)(vfs_mount_t *mountp)
Perform the necessary clean up for unmounting a file system.
const vfs_file_system_ops_t * fs_op
File system operations table.
const vfs_dir_ops_t * d_op
Directory operations table.
const vfs_file_ops_t * f_op
File operations table.
const uint32_t flags
File system flags.
Information about an open file.
void * ptr
pointer to private data
vfs_mount_t * mp
Pointer to mount table entry.
kernel_pid_t pid
PID of the process that opened the file.
int value
alternatively, you can use private_data as an int
const vfs_file_ops_t * f_op
File operations table.
off_t pos
Current position in the file.
const vfs_file_system_t * fs
The file system driver for the mount point.
clist_node_t list_entry
List entry for the _vfs_mount_list list.
size_t mount_point_len
Length of mount_point string (set by vfs_mount)
uint16_t open_files
Number of currently open files and directories.
void * private_data
File system driver private data, implementation defined.
const char * mount_point
Mount point, e.g.