21 #ifndef __DOSFS_MSDOS_H__ 22 #define __DOSFS_MSDOS_H__ 27 #include <rtems/thread.h> 42 #define MSDOS_NAME_NOT_FOUND_ERR 0x7D01 66 rtems_recursive_mutex vol_mutex;
77 rtems_recursive_mutex_lock(&fs_info->vol_mutex);
82 rtems_recursive_mutex_unlock(&fs_info->vol_mutex);
95 #define MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE 32 97 #define MSDOS_DIR_NAME(x) (char *)((x) + 0) 98 #define MSDOS_DIR_ENTRY_TYPE(x) (uint8_t *)((x) + 0) 99 #define MSDOS_DIR_ATTR(x) (uint8_t *)((x) + 11) 100 #define MSDOS_DIR_NT_RES(x) (uint8_t *)((x) + 12) 101 #define MSDOS_DIR_LFN_CHECKSUM(x) (uint8_t *)((x) + 13) 102 #define MSDOS_DIR_CRT_TIME_TENTH(x) (uint8_t *)((x) + 13) 103 #define MSDOS_DIR_CRT_TIME(x) (uint16_t *)((x) + 14) 104 #define MSDOS_DIR_CRT_DATE(x) (uint16_t *)((x) + 16) 105 #define MSDOS_DIR_LAST_ACCESS_DATE(x) (uint16_t *)((x) + 18) 106 #define MSDOS_DIR_FIRST_CLUSTER_HI(x) (uint16_t *)((x) + 20) 107 #define MSDOS_DIR_WRITE_TIME(x) (uint16_t *)((x) + 22) 108 #define MSDOS_DIR_WRITE_DATE(x) (uint16_t *)((x) + 24) 109 #define MSDOS_DIR_FIRST_CLUSTER_LOW(x) (uint16_t *)((x) + 26) 110 #define MSDOS_DIR_FILE_SIZE(x) (uint32_t *)((x) + 28) 112 #define MSDOS_EXTRACT_CLUSTER_NUM(p) \ 113 (uint32_t)( (CF_LE_W(*MSDOS_DIR_FIRST_CLUSTER_LOW(p))) | \ 114 ((uint32_t)(CF_LE_W((*MSDOS_DIR_FIRST_CLUSTER_HI(p))))<<16) ) 120 #define MSDOS_FILE_SIZE_OFFSET 28 121 #define MSDOS_FILE_NAME_OFFSET 0 122 #define MSDOS_FIRST_CLUSTER_HI_OFFSET 20 123 #define MSDOS_FIRST_CLUSTER_LOW_OFFSET 26 124 #define MSDOS_FILE_WDATE_OFFSET 24 125 #define MSDOS_FILE_WTIME_OFFSET 22 126 #define MSDOS_FILE_ADATE_OFFSET 18 127 #define MSDOS_FILE_CDATE_OFFSET 16 128 #define MSDOS_FILE_CTIME_OFFSET 14 134 #define MSDOS_ATTR_READ_ONLY 0x01 135 #define MSDOS_ATTR_HIDDEN 0x02 136 #define MSDOS_ATTR_SYSTEM 0x04 137 #define MSDOS_ATTR_VOLUME_ID 0x08 138 #define MSDOS_ATTR_DIRECTORY 0x10 139 #define MSDOS_ATTR_ARCHIVE 0x20 140 #define MSDOS_ATTR_LFN (MSDOS_ATTR_READ_ONLY | \ 141 MSDOS_ATTR_HIDDEN | \ 142 MSDOS_ATTR_SYSTEM | \ 143 MSDOS_ATTR_VOLUME_ID) 144 #define MSDOS_ATTR_LFN_MASK (MSDOS_ATTR_READ_ONLY | \ 145 MSDOS_ATTR_HIDDEN | \ 146 MSDOS_ATTR_SYSTEM | \ 147 MSDOS_ATTR_VOLUME_ID | \ 148 MSDOS_ATTR_DIRECTORY | \ 151 #define MSDOS_LAST_LONG_ENTRY 0x40 152 #define MSDOS_LAST_LONG_ENTRY_MASK 0x3F 154 #define MSDOS_DT_2SECONDS_MASK 0x1F 155 #define MSDOS_DT_2SECONDS_SHIFT 0 156 #define MSDOS_DT_MINUTES_MASK 0x7E0 157 #define MSDOS_DT_MINUTES_SHIFT 5 158 #define MSDOS_DT_HOURS_MASK 0xF800 159 #define MSDOS_DT_HOURS_SHIFT 11 161 #define MSDOS_DD_DAY_MASK 0x1F 162 #define MSDOS_DD_DAY_SHIFT 0 163 #define MSDOS_DD_MONTH_MASK 0x1E0 164 #define MSDOS_DD_MONTH_SHIFT 5 165 #define MSDOS_DD_YEAR_MASK 0xFE00 166 #define MSDOS_DD_YEAR_SHIFT 9 173 #define MSDOS_THIS_DIR_ENTRY_EMPTY 0xE5 174 #define MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY 0x00 179 #define MSDOS_LFN_LEN_PER_ENTRY (13) 184 #define MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR 4 185 #define MSDOS_NAME_MIN_UTF8_BYTES_PER_CHAR 1 187 #define MSDOS_SHORT_BASE_LEN 8 188 #define MSDOS_SHORT_EXT_LEN 3 189 #define MSDOS_SHORT_NAME_LEN (MSDOS_SHORT_BASE_LEN+\ 191 #define MSDOS_NAME_MAX_LNF_LEN (255) 192 #define MSDOS_NAME_MAX MSDOS_SHORT_NAME_LEN 193 #define MSDOS_NAME_MAX_UTF8_SFN_BYTES (MSDOS_NAME_MAX *\ 194 MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR) 195 #define MSDOS_NAME_MAX_WITH_DOT (MSDOS_NAME_MAX + 1) 196 #define MSDOS_SFN_MAX_WITH_DOT_UTF8_BYTES (MSDOS_NAME_MAX_WITH_DOT *\ 197 MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR) 198 #define MSDOS_NAME_MAX_LFN_WITH_DOT (260) 200 #define MSDOS_NAME_LFN_BYTES_PER_CHAR (2) 201 #define MSDOS_NAME_MAX_LFN_BYTES (MSDOS_NAME_MAX_LFN_WITH_DOT *\ 202 MSDOS_NAME_LFN_BYTES_PER_CHAR) 203 #define MSDOS_NAME_MAX_UTF8_LFN_BYTES (MSDOS_NAME_MAX_LFN_WITH_DOT *\ 204 MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR) 205 #define MSDOS_ENTRY_LFN_UTF8_BYTES (MSDOS_LFN_LEN_PER_ENTRY *\ 206 MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR) 208 extern const char *
const MSDOS_DOT_NAME;
209 extern const char *
const MSDOS_DOTDOT_NAME;
211 typedef enum msdos_name_types_e
213 MSDOS_NAME_INVALID = 0,
218 typedef enum msdos_token_types_e
225 } msdos_token_types_t;
228 #define MSDOS_RES_NT_VALUE 0x00 229 #define MSDOS_INIT_DIR_SIZE 0x00 232 #define MSDOS_DOT_DIR_ENTRY_OFFSET 0x00 235 #define MSDOS_DOTDOT_DIR_ENTRY_OFFSET 0x20 238 #define DOT_NODE_P(p) ((char *)(p)) 239 #define DOTDOT_NODE_P(p) ((char *)((p) + MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)) 242 #define MSDOS_MAX_DIR_LENGTH 0x200000 243 #define MSDOS_MAX_FILE_SIZE 0xFFFFFFFF 249 #define MSDOS_DPS512_NUM 16 299 const char *new_name,
324 ssize_t msdos_file_read(
330 ssize_t msdos_file_write(
342 msdos_file_ftruncate(
349 ssize_t msdos_dir_read(
369 fat_file_type_t type,
383 int msdos_get_name_node(
388 msdos_name_type_t name_type,
396 msdos_format_dirent_with_dot(
char *dst,
const char *src);
399 const char *lfn,
int lfn_len,
400 char* sfn,
int sfn_len);
403 msdos_filename_utf8_to_short_name_for_compare (
405 const uint8_t *utf8_name,
406 const size_t utf8_name_size,
408 const size_t short_name_size);
411 msdos_filename_utf8_to_short_name_for_save (
413 const uint8_t *utf8_name,
414 const size_t utf8_name_size,
416 const size_t short_name_size);
419 msdos_filename_utf8_to_long_name_for_compare (
421 const uint8_t *utf8_name,
422 const size_t utf8_name_size,
424 const size_t long_name_size);
427 msdos_filename_utf8_to_long_name_for_save (
429 const uint8_t *utf8_name,
430 const size_t utf8_name_size,
432 const size_t long_name_size);
435 msdos_get_utf16_string_from_long_entry (
437 uint16_t *entry_string_buf,
438 const size_t buf_size,
442 void msdos_date_unix2dos(
443 unsigned int tsp, uint16_t *ddp,
446 unsigned int msdos_date_dos2unix(
unsigned int dd,
unsigned int dt);
448 int msdos_set_first_char4file_name(
451 unsigned char first_char
454 int msdos_dir_is_empty(
460 int msdos_find_name_in_fat_file(
464 const uint8_t *name_utf8,
466 msdos_name_type_t name_type,
471 int msdos_find_node_by_cluster_num_in_fat_file(
479 int msdos_get_dotdot_dir_info_cluster_num_and_offset(
488 uint8_t msdos_lfn_checksum(
const void *
entry);
int msdos_mknod(const rtems_filesystem_location_info_t *loc, const char *name, size_t namelen, mode_t mode, dev_t dev)
Routine for node creation in a MSDOS filesystem.
Definition: msdos_mknod.c:38
Constants/Data Structures/Prototypes for Operations on "fat-file".
int msdos_rmnod(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *loc)
Remove node from MSDOS directory.
Definition: msdos_rmnod.c:25
void msdos_free_node_info(const rtems_filesystem_location_info_t *pathloc)
Call the Fat-File close routine.
Definition: msdos_free.c:37
FAT filesystem convert control.
Definition: dosfs.h:182
File system node operations table.
Definition: libio.h:1005
int msdos_initialize_support(rtems_filesystem_mount_table_entry_t *temp_mt_entry, const rtems_filesystem_operations_table *op_table, const rtems_filesystem_file_handlers_r *file_handlers, const rtems_filesystem_file_handlers_r *directory_handlers, rtems_dosfs_convert_control *converter)
MSDOS filesystem initialization routine.
Definition: msdos_initsupp.c:52
void msdos_shut_down(rtems_filesystem_mount_table_entry_t *temp_mt_entry)
Shut down the MSDOS filesystem.
Definition: msdos_fsunmount.c:47
Descriptor of a fat-file.
Definition: fat_file.h:73
int msdos_creat_node(const rtems_filesystem_location_info_t *parent_loc, fat_file_type_t type, const char *name, int name_len, mode_t mode, const fat_file_fd_t *link_fd)
Implements wake up version of the "signal" operation.
Definition: msdos_create.c:62
Mount table entry.
Definition: libio.h:1604
Application Interface to FAT Filesystem.
File system operations table.
Definition: libio.h:472
LibIO Internal Interface.
Path evaluation context.
Definition: libio.h:84
An open file data structure.
Definition: libio.h:1320
Definition: mmu-config.c:40
int msdos_rename(const rtems_filesystem_location_info_t *old_parent_loc, const rtems_filesystem_location_info_t *old_loc, const rtems_filesystem_location_info_t *new_parent_loc, const char *new_name, size_t new_namelen)
Rename a MSDOS filesystem node.
Definition: msdos_rename.c:39
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:66
Constants/Data Structures/Prototypes on a Volume with FAT Filesystem.
File system location.
Definition: fs.h:53