LCOV - code coverage report
Current view: top level - zephyr/fs - fs.h Hit Total Coverage
Test: new.info Lines: 63 64 98.4 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2016 Intel Corporation.
       3             :  * Copyright (c) 2020-2024 Nordic Semiconductor ASA
       4             :  *
       5             :  * SPDX-License-Identifier: Apache-2.0
       6             :  */
       7             : 
       8             : #ifndef ZEPHYR_INCLUDE_FS_FS_H_
       9             : #define ZEPHYR_INCLUDE_FS_FS_H_
      10             : 
      11             : #include <sys/types.h>
      12             : 
      13             : #include <zephyr/sys/dlist.h>
      14             : #include <zephyr/fs/fs_interface.h>
      15             : 
      16             : #ifdef __cplusplus
      17             : extern "C" {
      18             : #endif
      19             : 
      20             : /**
      21             :  * @brief File System APIs
      22             :  * @defgroup file_system_api File System APIs
      23             :  * @since 1.5
      24             :  * @version 1.0.0
      25             :  * @ingroup os_services
      26             :  * @{
      27             :  */
      28             : struct fs_file_system_t;
      29             : 
      30             : /**
      31             :  * @brief Enumeration for directory entry types
      32             :  */
      33           1 : enum fs_dir_entry_type {
      34             :         /** Identifier for file entry */
      35             :         FS_DIR_ENTRY_FILE = 0,
      36             :         /** Identifier for directory entry */
      37             :         FS_DIR_ENTRY_DIR
      38             : };
      39             : 
      40             : /** @brief Enumeration to uniquely identify file system types.
      41             :  *
      42             :  * Zephyr supports in-tree file systems and external ones.  Each
      43             :  * requires a unique identifier used to register the file system
      44             :  * implementation and to associate a mount point with the file system
      45             :  * type.  This anonymous enum defines global identifiers for the
      46             :  * in-tree file systems.
      47             :  *
      48             :  * External file systems should be registered using unique identifiers
      49             :  * starting at @c FS_TYPE_EXTERNAL_BASE.  It is the responsibility of
      50             :  * applications that use external file systems to ensure that these
      51             :  * identifiers are unique if multiple file system implementations are
      52             :  * used by the application.
      53             :  */
      54           1 : enum {
      55             :         /** Identifier for in-tree FatFS file system. */
      56             :         FS_FATFS = 0,
      57             : 
      58             :         /** Identifier for in-tree LittleFS file system. */
      59             :         FS_LITTLEFS,
      60             : 
      61             :         /** Identifier for in-tree Ext2 file system. */
      62             :         FS_EXT2,
      63             : 
      64             :         /** Base identifier for external file systems. */
      65             :         FS_TYPE_EXTERNAL_BASE,
      66             : };
      67             : 
      68             : /** Flag prevents formatting device if requested file system not found */
      69           1 : #define FS_MOUNT_FLAG_NO_FORMAT BIT(0)
      70             : /** Flag makes mounted file system read-only */
      71           1 : #define FS_MOUNT_FLAG_READ_ONLY BIT(1)
      72             : /** Flag used in pre-defined mount structures that are to be mounted
      73             :  * on startup.
      74             :  *
      75             :  * This flag has no impact in user-defined mount structures.
      76             :  */
      77           1 : #define FS_MOUNT_FLAG_AUTOMOUNT BIT(2)
      78             : /** Flag requests file system driver to use Disk Access API. When the flag is
      79             :  * set to the fs_mount_t.flags prior to fs_mount call, a file system
      80             :  * needs to use the Disk Access API, otherwise mount callback for the driver
      81             :  * should return -ENOSUP; when the flag is not set the file system driver
      82             :  * should use Flash API by default, unless it only supports Disc Access API.
      83             :  * When file system will use Disk Access API and the flag is not set, the mount
      84             :  * callback for the file system should set the flag on success.
      85             :  */
      86           1 : #define FS_MOUNT_FLAG_USE_DISK_ACCESS BIT(3)
      87             : 
      88             : /**
      89             :  * @brief File system mount info structure
      90             :  */
      91           1 : struct fs_mount_t {
      92             :         /** Entry for the fs_mount_list list */
      93           1 :         sys_dnode_t node;
      94             :         /** File system type */
      95           1 :         int type;
      96             :         /** Mount point directory name (ex: "/fatfs") */
      97           1 :         const char *mnt_point;
      98             :         /** Pointer to file system specific data */
      99           1 :         void *fs_data;
     100             :         /** Pointer to backend storage device */
     101           1 :         void *storage_dev;
     102             :         /* The following fields are filled by file system core */
     103             :         /** Length of Mount point string */
     104           1 :         size_t mountp_len;
     105             :         /** Pointer to File system interface of the mount point */
     106           1 :         const struct fs_file_system_t *fs;
     107             :         /** Mount flags */
     108           1 :         uint8_t flags;
     109             : };
     110             : 
     111             : /**
     112             :  * @brief Structure to receive file or directory information
     113             :  *
     114             :  * Used in functions that read the directory entries to get
     115             :  * file or directory information.
     116             :  */
     117           1 : struct fs_dirent {
     118             :         /**
     119             :          * File/directory type (FS_DIR_ENTRY_FILE or FS_DIR_ENTRY_DIR)
     120             :          */
     121           1 :         enum fs_dir_entry_type type;
     122             :         /** Name of file or directory */
     123           1 :         char name[MAX_FILE_NAME + 1];
     124             :         /** Size of file (0 if directory). */
     125           1 :         size_t size;
     126             : };
     127             : 
     128             : /**
     129             :  * @brief Structure to receive volume statistics
     130             :  *
     131             :  * Used to retrieve information about total and available space
     132             :  * in the volume.
     133             :  */
     134           1 : struct fs_statvfs {
     135             :         /** Optimal transfer block size */
     136           1 :         unsigned long f_bsize;
     137             :         /** Allocation unit size */
     138           1 :         unsigned long f_frsize;
     139             :         /** Size of FS in f_frsize units */
     140           1 :         unsigned long f_blocks;
     141             :         /** Number of free blocks */
     142           1 :         unsigned long f_bfree;
     143             : };
     144             : 
     145             : 
     146             : /**
     147             :  * @name fs_open open and creation mode flags
     148             :  * @{
     149             :  */
     150             : /** Open for read flag */
     151           1 : #define FS_O_READ       0x01
     152             : /** Open for write flag */
     153           1 : #define FS_O_WRITE      0x02
     154             : /** Open for read-write flag combination */
     155           1 : #define FS_O_RDWR       (FS_O_READ | FS_O_WRITE)
     156             : /** Bitmask for read and write flags */
     157           1 : #define FS_O_MODE_MASK  0x03
     158             : 
     159             : /** Create file if it does not exist */
     160           1 : #define FS_O_CREATE     0x10
     161             : /** Open/create file for append */
     162           1 : #define FS_O_APPEND     0x20
     163             : /** Truncate the file while opening */
     164           1 : #define FS_O_TRUNC      0x40
     165             : /** Bitmask for open/create flags */
     166           1 : #define FS_O_FLAGS_MASK 0x70
     167             : 
     168             : 
     169             : /** Bitmask for open flags */
     170           1 : #define FS_O_MASK       (FS_O_MODE_MASK | FS_O_FLAGS_MASK)
     171             : /**
     172             :  * @}
     173             :  */
     174             : 
     175             : /**
     176             :  * @name fs_seek whence parameter values
     177             :  * @{
     178             :  */
     179             : #ifndef FS_SEEK_SET
     180             : /** Seek from the beginning of file */
     181           1 : #define FS_SEEK_SET     0
     182             : #endif
     183             : #ifndef FS_SEEK_CUR
     184             : /** Seek from a current position */
     185           1 : #define FS_SEEK_CUR     1
     186             : #endif
     187             : #ifndef FS_SEEK_END
     188             : /** Seek from the end of file */
     189           1 : #define FS_SEEK_END     2
     190             : #endif
     191             : /**
     192             :  * @}
     193             :  */
     194             : 
     195             : /**
     196             :  * @brief Get the common mount flags for an fstab entry.
     197             : 
     198             :  * @param node_id the node identifier for a child entry in a
     199             :  * zephyr,fstab node.
     200             :  * @return a value suitable for initializing an fs_mount_t flags
     201             :  * member.
     202             :  */
     203           1 : #define FSTAB_ENTRY_DT_MOUNT_FLAGS(node_id)                             \
     204             :         ((DT_PROP(node_id, automount) ? FS_MOUNT_FLAG_AUTOMOUNT : 0)    \
     205             :          | (DT_PROP(node_id, read_only) ? FS_MOUNT_FLAG_READ_ONLY : 0)  \
     206             :          | (DT_PROP(node_id, no_format) ? FS_MOUNT_FLAG_NO_FORMAT : 0)  \
     207             :          | (DT_PROP(node_id, disk_access) ? FS_MOUNT_FLAG_USE_DISK_ACCESS : 0))
     208             : 
     209             : /**
     210             :  * @brief The name under which a zephyr,fstab entry mount structure is
     211             :  * defined.
     212             :  *
     213             :  * @param node_id the node identifier for a child entry in a zephyr,fstab node.
     214             :  */
     215           1 : #define FS_FSTAB_ENTRY(node_id) _CONCAT(z_fsmp_, node_id)
     216             : 
     217             : /**
     218             :  * @brief Generate a declaration for the externally defined fstab
     219             :  * entry.
     220             :  *
     221             :  * This will evaluate to the name of a struct fs_mount_t object.
     222             :  *
     223             :  * @param node_id the node identifier for a child entry in a zephyr,fstab node.
     224             :  */
     225           1 : #define FS_FSTAB_DECLARE_ENTRY(node_id)         \
     226             :         extern struct fs_mount_t FS_FSTAB_ENTRY(node_id)
     227             : 
     228             : /**
     229             :  * @brief Initialize fs_file_t object
     230             :  *
     231             :  * Initializes the fs_file_t object; the function needs to be invoked
     232             :  * on object before first use with fs_open.
     233             :  *
     234             :  * @param zfp Pointer to file object
     235             :  *
     236             :  */
     237           1 : static inline void fs_file_t_init(struct fs_file_t *zfp)
     238             : {
     239             :         zfp->filep = NULL;
     240             :         zfp->mp = NULL;
     241             :         zfp->flags = 0;
     242             : }
     243             : 
     244             : /**
     245             :  * @brief Initialize fs_dir_t object
     246             :  *
     247             :  * Initializes the fs_dir_t object; the function needs to be invoked
     248             :  * on object before first use with fs_opendir.
     249             :  *
     250             :  * @param zdp Pointer to file object
     251             :  *
     252             :  */
     253           1 : static inline void fs_dir_t_init(struct fs_dir_t *zdp)
     254             : {
     255             :         zdp->dirp = NULL;
     256             :         zdp->mp = NULL;
     257             : }
     258             : 
     259             : /**
     260             :  * @brief Open or create file
     261             :  *
     262             :  * Opens or possibly creates a file and associates a stream with it.
     263             :  * Successfully opened file, when no longer in use, should be closed
     264             :  * with fs_close().
     265             :  *
     266             :  * @details
     267             :  * @p flags can be 0 or a binary combination of one or more of the following
     268             :  * identifiers:
     269             :  *   - @c FS_O_READ open for read
     270             :  *   - @c FS_O_WRITE open for write
     271             :  *   - @c FS_O_RDWR open for read/write (<tt>FS_O_READ | FS_O_WRITE</tt>)
     272             :  *   - @c FS_O_CREATE create file if it does not exist
     273             :  *   - @c FS_O_APPEND move to end of file before each write
     274             :  *   - @c FS_O_TRUNC truncate the file
     275             :  *
     276             :  * @warning If @p flags are set to 0 the function will open file, if it exists
     277             :  *          and is accessible, but you will have no read/write access to it.
     278             :  *
     279             :  * @param zfp Pointer to a file object
     280             :  * @param file_name The name of a file to open
     281             :  * @param flags The mode flags
     282             :  *
     283             :  * @retval 0 on success;
     284             :  * @retval -EBUSY when zfp is already used;
     285             :  * @retval -EINVAL when a bad file name is given;
     286             :  * @retval -EROFS when opening read-only file for write, or attempting to
     287             :  *         create a file on a system that has been mounted with the
     288             :  *         FS_MOUNT_FLAG_READ_ONLY flag;
     289             :  * @retval -ENOENT when the file does not exist at the path;
     290             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     291             :  * @retval -EACCES when trying to truncate a file without opening it for write.
     292             :  * @retval <0 an other negative errno code, depending on a file system back-end.
     293             :  */
     294           1 : int fs_open(struct fs_file_t *zfp, const char *file_name, fs_mode_t flags);
     295             : 
     296             : /**
     297             :  * @brief Close file
     298             :  *
     299             :  * Flushes the associated stream and closes the file.
     300             :  *
     301             :  * @param zfp Pointer to the file object
     302             :  *
     303             :  * @retval 0 on success;
     304             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     305             :  * @retval <0 a negative errno code on error.
     306             :  */
     307           1 : int fs_close(struct fs_file_t *zfp);
     308             : 
     309             : /**
     310             :  * @brief Unlink file
     311             :  *
     312             :  * Deletes the specified file or directory
     313             :  *
     314             :  * @param path Path to the file or directory to delete
     315             :  *
     316             :  * @retval 0 on success;
     317             :  * @retval -EINVAL when a bad file name is given;
     318             :  * @retval -EROFS if file is read-only, or when file system has been mounted
     319             :  *         with the FS_MOUNT_FLAG_READ_ONLY flag;
     320             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     321             :  * @retval <0 an other negative errno code on error.
     322             :  */
     323           1 : int fs_unlink(const char *path);
     324             : 
     325             : /**
     326             :  * @brief Rename file or directory
     327             :  *
     328             :  * Performs a rename and / or move of the specified source path to the
     329             :  * specified destination.  The source path can refer to either a file or a
     330             :  * directory.  All intermediate directories in the destination path must
     331             :  * already exist.  If the source path refers to a file, the destination path
     332             :  * must contain a full filename path, rather than just the new parent
     333             :  * directory.  If an object already exists at the specified destination path,
     334             :  * this function causes it to be unlinked prior to the rename (i.e., the
     335             :  * destination gets clobbered).
     336             :  * @note Current implementation does not allow moving files between mount
     337             :  * points.
     338             :  *
     339             :  * @param from The source path
     340             :  * @param to The destination path
     341             :  *
     342             :  * @retval 0 on success;
     343             :  * @retval -EINVAL when a bad file name is given, or when rename would cause move
     344             :  *         between mount points;
     345             :  * @retval -EROFS if file is read-only, or when file system has been mounted
     346             :  *         with the FS_MOUNT_FLAG_READ_ONLY flag;
     347             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     348             :  * @retval <0 an other negative errno code on error.
     349             :  */
     350           1 : int fs_rename(const char *from, const char *to);
     351             : 
     352             : /**
     353             :  * @brief Read file
     354             :  *
     355             :  * Reads up to @p size bytes of data to @p ptr pointed buffer, returns number
     356             :  * of bytes read.  A returned value may be lower than @p size if there were
     357             :  * fewer bytes available than requested.
     358             :  *
     359             :  * @param zfp Pointer to the file object
     360             :  * @param ptr Pointer to the data buffer
     361             :  * @param size Number of bytes to be read
     362             :  *
     363             :  * @retval >=0 a number of bytes read, on success;
     364             :  * @retval -EBADF when invoked on zfp that represents unopened/closed file;
     365             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     366             :  * @retval <0 a negative errno code on error.
     367             :  */
     368           1 : ssize_t fs_read(struct fs_file_t *zfp, void *ptr, size_t size);
     369             : 
     370             : /**
     371             :  * @brief Write file
     372             :  *
     373             :  * Attempts to write @p size number of bytes to the specified file.
     374             :  * If a negative value is returned from the function, the file pointer has not
     375             :  * been advanced.
     376             :  * If the function returns a non-negative number that is lower than @p size,
     377             :  * the global @c errno variable should be checked for an error code,
     378             :  * as the device may have no free space for data.
     379             :  *
     380             :  * @param zfp Pointer to the file object
     381             :  * @param ptr Pointer to the data buffer
     382             :  * @param size Number of bytes to be written
     383             :  *
     384             :  * @retval >=0 a number of bytes written, on success;
     385             :  * @retval -EBADF when invoked on zfp that represents unopened/closed file;
     386             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     387             :  * @retval <0 an other negative errno code on error.
     388             :  */
     389           1 : ssize_t fs_write(struct fs_file_t *zfp, const void *ptr, size_t size);
     390             : 
     391             : /**
     392             :  * @brief Seek file
     393             :  *
     394             :  * Moves the file position to a new location in the file. The @p offset is added
     395             :  * to file position based on the @p whence parameter.
     396             :  *
     397             :  * @param zfp Pointer to the file object
     398             :  * @param offset Relative location to move the file pointer to
     399             :  * @param whence Relative location from where offset is to be calculated.
     400             :  * - @c FS_SEEK_SET for the beginning of the file;
     401             :  * - @c FS_SEEK_CUR for the current position;
     402             :  * - @c FS_SEEK_END for the end of the file.
     403             :  *
     404             :  * @retval 0 on success;
     405             :  * @retval -EBADF when invoked on zfp that represents unopened/closed file;
     406             :  * @retval -ENOTSUP if not supported by underlying file system driver;
     407             :  * @retval <0 an other negative errno code on error.
     408             :  */
     409           1 : int fs_seek(struct fs_file_t *zfp, off_t offset, int whence);
     410             : 
     411             : /**
     412             :  * @brief Get current file position.
     413             :  *
     414             :  * Retrieves and returns the current position in the file stream.
     415             :  *
     416             :  * @param zfp Pointer to the file object
     417             :  *
     418             :  * @retval >= 0 a current position in file;
     419             :  * @retval -EBADF when invoked on zfp that represents unopened/closed file;
     420             :  * @retval -ENOTSUP if not supported by underlying file system driver;
     421             :  * @retval <0 an other negative errno code on error.
     422             :  *
     423             :  * The current revision does not validate the file object.
     424             :  */
     425           1 : off_t fs_tell(struct fs_file_t *zfp);
     426             : 
     427             : /**
     428             :  * @brief Truncate or extend an open file to a given size
     429             :  *
     430             :  * Truncates the file to the new length if it is shorter than the current
     431             :  * size of the file. Expands the file if the new length is greater than the
     432             :  * current size of the file. The expanded region would be filled with zeroes.
     433             :  *
     434             :  * @note In the case of expansion, if the volume got full during the
     435             :  * expansion process, the function will expand to the maximum possible length
     436             :  * and return success.  Caller should check if the expanded size matches the
     437             :  * requested length.
     438             :  *
     439             :  * @param zfp Pointer to the file object
     440             :  * @param length New size of the file in bytes
     441             :  *
     442             :  * @retval 0 on success;
     443             :  * @retval -EBADF when invoked on zfp that represents unopened/closed file;
     444             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     445             :  * @retval <0 an other negative errno code on error.
     446             :  */
     447           1 : int fs_truncate(struct fs_file_t *zfp, off_t length);
     448             : 
     449             : /**
     450             :  * @brief Flush cached write data buffers of an open file
     451             :  *
     452             :  * The function flushes the cache of an open file; it can be invoked to ensure
     453             :  * data gets written to the storage media immediately, e.g. to avoid data loss
     454             :  * in case if power is removed unexpectedly.
     455             :  * @note Closing a file will cause caches to be flushed correctly so the
     456             :  * function need not be called when the file is being closed.
     457             :  *
     458             :  * @param zfp Pointer to the file object
     459             :  *
     460             :  * @retval 0 on success;
     461             :  * @retval -EBADF when invoked on zfp that represents unopened/closed file;
     462             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     463             :  * @retval <0 a negative errno code on error.
     464             :  */
     465           1 : int fs_sync(struct fs_file_t *zfp);
     466             : 
     467             : /**
     468             :  * @brief Directory create
     469             :  *
     470             :  * Creates a new directory using specified path.
     471             :  *
     472             :  * @param path Path to the directory to create
     473             :  *
     474             :  * @retval 0 on success;
     475             :  * @retval -EEXIST if entry of given name exists;
     476             :  * @retval -EROFS if @p path is within read-only directory, or when
     477             :  *         file system has been mounted with the FS_MOUNT_FLAG_READ_ONLY flag;
     478             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     479             :  * @retval <0 an other negative errno code on error
     480             :  */
     481           1 : int fs_mkdir(const char *path);
     482             : 
     483             : /**
     484             :  * @brief Directory open
     485             :  *
     486             :  * Opens an existing directory specified by the path.
     487             :  *
     488             :  * @param zdp Pointer to the directory object
     489             :  * @param path Path to the directory to open
     490             :  *
     491             :  * @retval 0 on success;
     492             :  * @retval -EINVAL when a bad directory path is given;
     493             :  * @retval -EBUSY when zdp is already used;
     494             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     495             :  * @retval <0 a negative errno code on error.
     496             :  */
     497           1 : int fs_opendir(struct fs_dir_t *zdp, const char *path);
     498             : 
     499             : /**
     500             :  * @brief Directory read entry
     501             :  *
     502             :  * Reads directory entries of an open directory. In end-of-dir condition,
     503             :  * the function will return 0 and set the <tt>entry->name[0]</tt> to 0.
     504             :  *
     505             :  * @note: Most existing underlying file systems do not generate POSIX
     506             :  * special directory entries "." or "..".  For consistency the
     507             :  * abstraction layer will remove these from lower layer results so
     508             :  * higher layers see consistent results.
     509             :  *
     510             :  * @param zdp Pointer to the directory object
     511             :  * @param entry Pointer to zfs_dirent structure to read the entry into
     512             :  *
     513             :  * @retval 0 on success or end-of-dir;
     514             :  * @retval -ENOENT when no such directory found;
     515             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     516             :  * @retval <0 a negative errno code on error.
     517             :  */
     518           1 : int fs_readdir(struct fs_dir_t *zdp, struct fs_dirent *entry);
     519             : 
     520             : /**
     521             :  * @brief Directory close
     522             :  *
     523             :  * Closes an open directory.
     524             :  *
     525             :  * @param zdp Pointer to the directory object
     526             :  *
     527             :  * @retval 0 on success;
     528             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     529             :  * @retval <0 a negative errno code on error.
     530             :  */
     531           1 : int fs_closedir(struct fs_dir_t *zdp);
     532             : 
     533             : /**
     534             :  * @brief Mount filesystem
     535             :  *
     536             :  * Perform steps needed for mounting a file system like
     537             :  * calling the file system specific mount function and adding
     538             :  * the mount point to mounted file system list.
     539             :  *
     540             :  * @note Current implementation of ELM FAT driver allows only following mount
     541             :  * points: "/RAM:","/NAND:","/CF:","/SD:","/SD2:","/USB:","/USB2:","/USB3:"
     542             :  * or mount points that consist of single digit, e.g: "/0:", "/1:" and so forth.
     543             :  *
     544             :  * @param mp Pointer to the fs_mount_t structure.  Referenced object
     545             :  *           is not changed if the mount operation failed.
     546             :  *           A reference is captured in the fs infrastructure if the
     547             :  *           mount operation succeeds, and the application must not
     548             :  *           mutate the structure contents until fs_unmount is
     549             :  *           successfully invoked on the same pointer.
     550             :  *
     551             :  * @retval 0 on success;
     552             :  * @retval -ENOENT when file system type has not been registered;
     553             :  * @retval -ENOTSUP when not supported by underlying file system driver;
     554             :  *         when @c FS_MOUNT_FLAG_USE_DISK_ACCESS is set but driver does not
     555             :  *         support it.
     556             :  * @retval -EROFS if system requires formatting but @c FS_MOUNT_FLAG_READ_ONLY
     557             :  *         has been set;
     558             :  * @retval <0 an other negative errno code on error.
     559             :  */
     560           1 : int fs_mount(struct fs_mount_t *mp);
     561             : 
     562             : /**
     563             :  * @brief Unmount filesystem
     564             :  *
     565             :  * Perform steps needed to unmount a file system like
     566             :  * calling the file system specific unmount function and removing
     567             :  * the mount point from mounted file system list.
     568             :  *
     569             :  * @param mp Pointer to the fs_mount_t structure
     570             :  *
     571             :  * @retval 0 on success;
     572             :  * @retval -EINVAL if no system has been mounted at given mount point;
     573             :  * @retval -ENOTSUP when not supported by underlying file system driver;
     574             :  * @retval <0 an other negative errno code on error.
     575             :  */
     576           1 : int fs_unmount(struct fs_mount_t *mp);
     577             : 
     578             : /**
     579             :  * @brief Get path of mount point at index
     580             :  *
     581             :  * This function iterates through the list of mount points and returns
     582             :  * the directory name of the mount point at the given @p index.
     583             :  * On success @p index is incremented and @p name is set to the mount directory
     584             :  * name.  If a mount point with the given @p index does not exist, @p name will
     585             :  * be set to @c NULL.
     586             :  *
     587             :  * @param index Pointer to mount point index
     588             :  * @param name Pointer to pointer to path name
     589             :  *
     590             :  * @retval 0 on success;
     591             :  * @retval -ENOENT if there is no mount point with given index.
     592             :  */
     593           1 : int fs_readmount(int *index, const char **name);
     594             : 
     595             : /**
     596             :  * @brief File or directory status
     597             :  *
     598             :  * Checks the status of a file or directory specified by the @p path.
     599             :  * @note The file on a storage device may not be updated until it is closed.
     600             :  *
     601             :  * @param path Path to the file or directory
     602             :  * @param entry Pointer to the zfs_dirent structure to fill if the file or
     603             :  * directory exists.
     604             :  *
     605             :  * @retval 0 on success;
     606             :  * @retval -EINVAL when a bad directory or file name is given;
     607             :  * @retval -ENOENT when no such directory or file is found;
     608             :  * @retval -ENOTSUP when not supported by underlying file system driver;
     609             :  * @retval <0 negative errno code on error.
     610             :  */
     611           1 : int fs_stat(const char *path, struct fs_dirent *entry);
     612             : 
     613             : /**
     614             :  * @brief Retrieves statistics of the file system volume
     615             :  *
     616             :  * Returns the total and available space in the file system volume.
     617             :  *
     618             :  * @param path Path to the mounted directory
     619             :  * @param stat Pointer to the zfs_statvfs structure to receive the fs
     620             :  * statistics.
     621             :  *
     622             :  * @retval 0 on success;
     623             :  * @retval -EINVAL when a bad path to a directory, or a file, is given;
     624             :  * @retval -ENOTSUP when not implemented by underlying file system driver;
     625             :  * @retval <0 an other negative errno code on error.
     626             :  */
     627           1 : int fs_statvfs(const char *path, struct fs_statvfs *stat);
     628             : 
     629             : /**
     630             :  * @brief Create fresh file system
     631             :  *
     632             :  * @param fs_type Type of file system to create.
     633             :  * @param dev_id Id of storage device.
     634             :  * @param cfg Backend dependent init object. If NULL then default configuration is used.
     635             :  * @param flags Additional flags for file system implementation.
     636             :  *
     637             :  * @retval 0 on success;
     638             :  * @retval <0 negative errno code on error.
     639             :  */
     640           1 : int fs_mkfs(int fs_type, uintptr_t dev_id, void *cfg, int flags);
     641             : 
     642             : /**
     643             :  * @brief Register a file system
     644             :  *
     645             :  * Register file system with virtual file system.
     646             :  * Number of allowed file system types to be registered is controlled with the
     647             :  * CONFIG_FILE_SYSTEM_MAX_TYPES Kconfig option.
     648             :  *
     649             :  * @param type Type of file system (ex: @c FS_FATFS)
     650             :  * @param fs Pointer to File system
     651             :  *
     652             :  * @retval 0 on success;
     653             :  * @retval -EALREADY when a file system of a given type has already been registered;
     654             :  * @retval -ENOSCP when there is no space left, in file system registry, to add
     655             :  *         this file system type.
     656             :  */
     657           1 : int fs_register(int type, const struct fs_file_system_t *fs);
     658             : 
     659             : /**
     660             :  * @brief Unregister a file system
     661             :  *
     662             :  * Unregister file system from virtual file system.
     663             :  *
     664             :  * @param type Type of file system (ex: @c FS_FATFS)
     665             :  * @param fs Pointer to File system
     666             :  *
     667             :  * @retval 0 on success;
     668             :  * @retval -EINVAL when file system of a given type has not been registered.
     669             :  */
     670           1 : int fs_unregister(int type, const struct fs_file_system_t *fs);
     671             : 
     672             : /**
     673             :  * @}
     674             :  */
     675             : 
     676             : 
     677             : #ifdef __cplusplus
     678             : }
     679             : #endif
     680             : 
     681             : #endif /* ZEPHYR_INCLUDE_FS_FS_H_ */

Generated by: LCOV version 1.14