diff options
author | Damien George <damien.p.george@gmail.com> | 2018-06-08 04:27:27 +0300 |
---|---|---|
committer | Christopher Haster <chaster@utexas.edu> | 2018-07-18 02:32:18 +0300 |
commit | 961fab70c37e28f57e1f731cbe19717e7eb6c651 (patch) | |
tree | 52d9204c8dbebc886b51fb0e89ac916b778c36d1 /lfs.h | |
parent | f94d233deb494bbe1cb5488d69539607d354b2ac (diff) |
Added file config structure and lfs_file_opencfg
The optional config structure options up the possibility of adding
file-level configuration in a backwards compatible manner.
Also adds possibility to open multiple files with LFS_NO_MALLOC
enabled thanks to dpgeorge
Also bumped minor version to v1.5
Diffstat (limited to 'lfs.h')
-rw-r--r-- | lfs.h | 34 |
1 files changed, 28 insertions, 6 deletions
@@ -21,7 +21,7 @@ extern "C" // Software library version // Major (top-nibble), incremented on backwards incompatible changes // Minor (bottom-nibble), incremented on feature additions -#define LFS_VERSION 0x00010004 +#define LFS_VERSION 0x00010005 #define LFS_VERSION_MAJOR (0xffff & (LFS_VERSION >> 16)) #define LFS_VERSION_MINOR (0xffff & (LFS_VERSION >> 0)) @@ -167,6 +167,12 @@ struct lfs_config { void *file_buffer; }; +// Optional configuration provided during lfs_file_opencfg +struct lfs_file_config { + // Optional, statically allocated buffer for files. Must be program sized. + // If NULL, malloc will be used by default. + void *buffer; +}; // File info structure struct lfs_info { @@ -214,6 +220,7 @@ typedef struct lfs_file { lfs_block_t head; lfs_size_t size; + const struct lfs_file_config *cfg; uint32_t flags; lfs_off_t pos; lfs_block_t block; @@ -281,7 +288,8 @@ typedef struct lfs { // Format a block device with the littlefs // // Requires a littlefs object and config struct. This clobbers the littlefs -// object, and does not leave the filesystem mounted. +// object, and does not leave the filesystem mounted. The config struct must +// be zeroed for defaults and backwards compatibility. // // Returns a negative error code on failure. int lfs_format(lfs_t *lfs, const struct lfs_config *config); @@ -290,7 +298,8 @@ int lfs_format(lfs_t *lfs, const struct lfs_config *config); // // Requires a littlefs object and config struct. Multiple filesystems // may be mounted simultaneously with multiple littlefs objects. Both -// lfs and config must be allocated while mounted. +// lfs and config must be allocated while mounted. The config struct must +// be zeroed for defaults and backwards compatibility. // // Returns a negative error code on failure. int lfs_mount(lfs_t *lfs, const struct lfs_config *config); @@ -328,14 +337,27 @@ int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info); // Open a file // -// The mode that the file is opened in is determined -// by the flags, which are values from the enum lfs_open_flags -// that are bitwise-ored together. +// The mode that the file is opened in is determined by the flags, which +// are values from the enum lfs_open_flags that are bitwise-ored together. // // Returns a negative error code on failure. int lfs_file_open(lfs_t *lfs, lfs_file_t *file, const char *path, int flags); +// Open a file with extra configuration +// +// The mode that the file is opened in is determined by the flags, which +// are values from the enum lfs_open_flags that are bitwise-ored together. +// +// The config struct provides additional config options per file as described +// above. The config struct must be allocated while the file is open, and the +// config struct must be zeroed for defaults and backwards compatibility. +// +// Returns a negative error code on failure. +int lfs_file_opencfg(lfs_t *lfs, lfs_file_t *file, + const char *path, int flags, + const struct lfs_file_config *config); + // Close a file // // Any pending writes are written out to storage as though |