1 /* 2 * Copyright (c) 2016 Intel Corporation. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_FS_FS_INTERFACE_H_ 8 #define ZEPHYR_INCLUDE_FS_FS_INTERFACE_H_ 9 10 #include <stdint.h> 11 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 16 #if defined(CONFIG_FILE_SYSTEM_MAX_FILE_NAME) && (CONFIG_FILE_SYSTEM_MAX_FILE_NAME - 0) > 0 17 18 /* No in-tree file system supports name longer than 255 characters */ 19 #if (CONFIG_FILE_SYSTEM_LITTLEFS || CONFIG_FAT_FILESYSTEM_ELM || \ 20 CONFIG_FILE_SYSTEM_EXT2) && (CONFIG_FILE_SYSTEM_MAX_FILE_NAME > 255) 21 #error "Max allowed CONFIG_FILE_SYSTEM_MAX_FILE_NAME is 255 characters, when any in-tree FS enabled" 22 #endif 23 24 /* Enabled FAT driver, without LFN, restricts name length to 12 characters */ 25 #if defined(CONFIG_FAT_FILESYSTEM_ELM) && !(CONFIG_FS_FATFS_LFN) && \ 26 (CONFIG_FILE_SYSTEM_MAX_FILE_NAME > 12) 27 #error "CONFIG_FILE_SYSTEM_MAX_FILE_NAME can not be > 12 if FAT is enabled without LFN" 28 #endif 29 30 #define MAX_FILE_NAME CONFIG_FILE_SYSTEM_MAX_FILE_NAME 31 32 #else 33 /* Select from enabled file systems */ 34 35 #if defined(CONFIG_FAT_FILESYSTEM_ELM) 36 37 #if defined(CONFIG_FS_FATFS_LFN) 38 #define MAX_FILE_NAME CONFIG_FS_FATFS_MAX_LFN 39 #else /* CONFIG_FS_FATFS_LFN */ 40 #define MAX_FILE_NAME 12 /* Uses 8.3 SFN */ 41 #endif /* CONFIG_FS_FATFS_LFN */ 42 43 #endif 44 45 #if !defined(MAX_FILE_NAME) && defined(CONFIG_FILE_SYSTEM_EXT2) 46 #define MAX_FILE_NAME 255 47 #endif 48 49 #if !defined(MAX_FILE_NAME) && defined(CONFIG_FILE_SYSTEM_LITTLEFS) 50 #define MAX_FILE_NAME 255 51 #endif 52 53 #if !defined(MAX_FILE_NAME) && defined(CONFIG_FILE_SYSTEM_VIRTIOFS) 54 #define MAX_FILE_NAME 255 55 #endif 56 57 #if !defined(MAX_FILE_NAME) /* filesystem selection */ 58 /* Use standard 8.3 when no filesystem is explicitly selected */ 59 #define MAX_FILE_NAME 12 60 #endif /* filesystem selection */ 61 62 #endif /* CONFIG_FILE_SYSTEM_MAX_FILE_NAME */ 63 64 65 /* Type for fs_open flags */ 66 typedef uint8_t fs_mode_t; 67 68 struct fs_mount_t; 69 70 /** 71 * @addtogroup file_system_api 72 * @{ 73 */ 74 75 /** 76 * @brief File object representing an open file 77 * 78 * The object needs to be initialized with fs_file_t_init(). 79 */ 80 struct fs_file_t { 81 /** Pointer to file object structure */ 82 void *filep; 83 /** Pointer to mount point structure */ 84 const struct fs_mount_t *mp; 85 /** Open/create flags */ 86 fs_mode_t flags; 87 }; 88 89 /** 90 * @brief Directory object representing an open directory 91 * 92 * The object needs to be initialized with fs_dir_t_init(). 93 */ 94 struct fs_dir_t { 95 /** Pointer to directory object structure */ 96 void *dirp; 97 /** Pointer to mount point structure */ 98 const struct fs_mount_t *mp; 99 }; 100 101 /** 102 * @} 103 */ 104 105 #ifdef __cplusplus 106 } 107 #endif 108 109 #endif /* ZEPHYR_INCLUDE_FS_FS_INTERFACE_H_ */ 110