23#ifndef __DOSFS_MSDOS_H__
24#define __DOSFS_MSDOS_H__
44#define MSDOS_NAME_NOT_FOUND_ERR 0x7D01
68 rtems_recursive_mutex vol_mutex;
79 rtems_recursive_mutex_lock(&fs_info->vol_mutex);
84 rtems_recursive_mutex_unlock(&fs_info->vol_mutex);
97#define MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE 32
99#define MSDOS_DIR_NAME(x) (char *)((x) + 0)
100#define MSDOS_DIR_ENTRY_TYPE(x) (uint8_t *)((x) + 0)
101#define MSDOS_DIR_ATTR(x) (uint8_t *)((x) + 11)
102#define MSDOS_DIR_NT_RES(x) (uint8_t *)((x) + 12)
103#define MSDOS_DIR_LFN_CHECKSUM(x) (uint8_t *)((x) + 13)
104#define MSDOS_DIR_CRT_TIME_TENTH(x) (uint8_t *)((x) + 13)
105#define MSDOS_DIR_CRT_TIME(x) (uint16_t *)((x) + 14)
106#define MSDOS_DIR_CRT_DATE(x) (uint16_t *)((x) + 16)
107#define MSDOS_DIR_LAST_ACCESS_DATE(x) (uint16_t *)((x) + 18)
108#define MSDOS_DIR_FIRST_CLUSTER_HI(x) (uint16_t *)((x) + 20)
109#define MSDOS_DIR_WRITE_TIME(x) (uint16_t *)((x) + 22)
110#define MSDOS_DIR_WRITE_DATE(x) (uint16_t *)((x) + 24)
111#define MSDOS_DIR_FIRST_CLUSTER_LOW(x) (uint16_t *)((x) + 26)
112#define MSDOS_DIR_FILE_SIZE(x) (uint32_t *)((x) + 28)
114#define MSDOS_EXTRACT_CLUSTER_NUM(p) \
115 (uint32_t)( (CF_LE_W(*MSDOS_DIR_FIRST_CLUSTER_LOW(p))) | \
116 ((uint32_t)(CF_LE_W((*MSDOS_DIR_FIRST_CLUSTER_HI(p))))<<16) )
122#define MSDOS_FILE_SIZE_OFFSET 28
123#define MSDOS_FILE_NAME_OFFSET 0
124#define MSDOS_FIRST_CLUSTER_HI_OFFSET 20
125#define MSDOS_FIRST_CLUSTER_LOW_OFFSET 26
126#define MSDOS_FILE_WDATE_OFFSET 24
127#define MSDOS_FILE_WTIME_OFFSET 22
128#define MSDOS_FILE_ADATE_OFFSET 18
129#define MSDOS_FILE_CDATE_OFFSET 16
130#define MSDOS_FILE_CTIME_OFFSET 14
136#define MSDOS_ATTR_READ_ONLY 0x01
137#define MSDOS_ATTR_HIDDEN 0x02
138#define MSDOS_ATTR_SYSTEM 0x04
139#define MSDOS_ATTR_VOLUME_ID 0x08
140#define MSDOS_ATTR_DIRECTORY 0x10
141#define MSDOS_ATTR_ARCHIVE 0x20
142#define MSDOS_ATTR_LFN (MSDOS_ATTR_READ_ONLY | \
143 MSDOS_ATTR_HIDDEN | \
144 MSDOS_ATTR_SYSTEM | \
145 MSDOS_ATTR_VOLUME_ID)
146#define MSDOS_ATTR_LFN_MASK (MSDOS_ATTR_READ_ONLY | \
147 MSDOS_ATTR_HIDDEN | \
148 MSDOS_ATTR_SYSTEM | \
149 MSDOS_ATTR_VOLUME_ID | \
150 MSDOS_ATTR_DIRECTORY | \
153#define MSDOS_LAST_LONG_ENTRY 0x40
154#define MSDOS_LAST_LONG_ENTRY_MASK 0x3F
156#define MSDOS_DT_2SECONDS_MASK 0x1F
157#define MSDOS_DT_2SECONDS_SHIFT 0
158#define MSDOS_DT_MINUTES_MASK 0x7E0
159#define MSDOS_DT_MINUTES_SHIFT 5
160#define MSDOS_DT_HOURS_MASK 0xF800
161#define MSDOS_DT_HOURS_SHIFT 11
163#define MSDOS_DD_DAY_MASK 0x1F
164#define MSDOS_DD_DAY_SHIFT 0
165#define MSDOS_DD_MONTH_MASK 0x1E0
166#define MSDOS_DD_MONTH_SHIFT 5
167#define MSDOS_DD_YEAR_MASK 0xFE00
168#define MSDOS_DD_YEAR_SHIFT 9
175#define MSDOS_THIS_DIR_ENTRY_EMPTY 0xE5
176#define MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY 0x00
181#define MSDOS_LFN_LEN_PER_ENTRY (13)
186#define MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR 4
187#define MSDOS_NAME_MIN_UTF8_BYTES_PER_CHAR 1
189#define MSDOS_SHORT_BASE_LEN 8
190#define MSDOS_SHORT_EXT_LEN 3
191#define MSDOS_SHORT_NAME_LEN (MSDOS_SHORT_BASE_LEN+\
193#define MSDOS_NAME_MAX_LNF_LEN (255)
194#define MSDOS_NAME_MAX MSDOS_SHORT_NAME_LEN
195#define MSDOS_NAME_MAX_UTF8_SFN_BYTES (MSDOS_NAME_MAX *\
196 MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR)
197#define MSDOS_NAME_MAX_WITH_DOT (MSDOS_NAME_MAX + 1)
198#define MSDOS_SFN_MAX_WITH_DOT_UTF8_BYTES (MSDOS_NAME_MAX_WITH_DOT *\
199 MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR)
200#define MSDOS_NAME_MAX_LFN_WITH_DOT (260)
202#define MSDOS_NAME_LFN_BYTES_PER_CHAR (2)
203#define MSDOS_NAME_MAX_LFN_BYTES (MSDOS_NAME_MAX_LFN_WITH_DOT *\
204 MSDOS_NAME_LFN_BYTES_PER_CHAR)
205#define MSDOS_NAME_MAX_UTF8_LFN_BYTES (MSDOS_NAME_MAX_LFN_WITH_DOT *\
206 MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR)
207#define MSDOS_ENTRY_LFN_UTF8_BYTES (MSDOS_LFN_LEN_PER_ENTRY *\
208 MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR)
210extern const char *
const MSDOS_DOT_NAME;
211extern const char *
const MSDOS_DOTDOT_NAME;
213typedef enum msdos_name_types_e
215 MSDOS_NAME_INVALID = 0,
220typedef enum msdos_token_types_e
227} msdos_token_types_t;
230#define MSDOS_RES_NT_VALUE 0x00
231#define MSDOS_INIT_DIR_SIZE 0x00
234#define MSDOS_DOT_DIR_ENTRY_OFFSET 0x00
237#define MSDOS_DOTDOT_DIR_ENTRY_OFFSET 0x20
240#define DOT_NODE_P(p) ((char *)(p))
241#define DOTDOT_NODE_P(p) ((char *)((p) + MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE))
244#define MSDOS_MAX_DIR_LENGTH 0x200000
245#define MSDOS_MAX_FILE_SIZE 0xFFFFFFFF
251#define MSDOS_DPS512_NUM 16
301 const char *new_name,
326ssize_t msdos_file_read(
332ssize_t msdos_file_write(
351ssize_t msdos_dir_read(
371 fat_file_type_t type,
385int msdos_get_name_node(
390 msdos_name_type_t name_type,
398msdos_format_dirent_with_dot(
char *dst,
const char *src);
401 const char *lfn,
int lfn_len,
402 char* sfn,
int sfn_len);
405msdos_filename_utf8_to_short_name_for_compare (
407 const uint8_t *utf8_name,
408 const size_t utf8_name_size,
410 const size_t short_name_size);
413msdos_filename_utf8_to_short_name_for_save (
415 const uint8_t *utf8_name,
416 const size_t utf8_name_size,
418 const size_t short_name_size);
421msdos_filename_utf8_to_long_name_for_compare (
423 const uint8_t *utf8_name,
424 const size_t utf8_name_size,
426 const size_t long_name_size);
429msdos_filename_utf8_to_long_name_for_save (
431 const uint8_t *utf8_name,
432 const size_t utf8_name_size,
434 const size_t long_name_size);
437msdos_get_utf16_string_from_long_entry (
439 uint16_t *entry_string_buf,
440 const size_t buf_size,
444void msdos_date_unix2dos(
445 unsigned int tsp, uint16_t *ddp,
448unsigned int msdos_date_dos2unix(
unsigned int dd,
unsigned int dt);
450int msdos_set_first_char4file_name(
453 unsigned char first_char
456int msdos_dir_is_empty(
462int msdos_find_name_in_fat_file(
466 const uint8_t *name_utf8,
468 msdos_name_type_t name_type,
473int msdos_find_node_by_cluster_num_in_fat_file(
481int msdos_get_dotdot_dir_info_cluster_num_and_offset(
490uint8_t msdos_lfn_checksum(
const void *
entry);
Application Interface to FAT Filesystem.
Constants/Data Structures/Prototypes on a Volume with FAT Filesystem.
Constants/Data Structures/Prototypes for Operations on "fat-file".
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:58
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:54
void msdos_free_node_info(const rtems_filesystem_location_info_t *pathloc)
Call the Fat-File close routine.
Definition: msdos_free.c:39
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:40
void msdos_shut_down(rtems_filesystem_mount_table_entry_t *temp_mt_entry)
Shut down the MSDOS filesystem.
Definition: msdos_fsunmount.c:49
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:27
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, fat_file_fd_t *link_fd)
Implements wake up version of the "signal" operation.
Definition: msdos_create.c:64
LibIO Internal Interface.
This header file defines the RTEMS Classic API.
File system node operations table.
Definition: libio.h:1008
File system operations table.
Definition: libio.h:475
Definition: mmu-config.c:53
Descriptor of a fat-file.
Definition: fat_file.h:76
FAT filesystem convert control.
Definition: dosfs.h:201
Path evaluation context.
Definition: libio.h:105
File system location.
Definition: fs.h:72
Mount table entry.
Definition: libio.h:1661
An open file data structure.
Definition: libio.h:1325
This header file provides the API of Self-Contained Objects.