21#ifndef __DOSFS_MSDOS_H__
22#define __DOSFS_MSDOS_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)
208extern const char *
const MSDOS_DOT_NAME;
209extern const char *
const MSDOS_DOTDOT_NAME;
211typedef enum msdos_name_types_e
213 MSDOS_NAME_INVALID = 0,
218typedef 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,
324ssize_t msdos_file_read(
330ssize_t msdos_file_write(
349ssize_t msdos_dir_read(
369 fat_file_type_t type,
383int msdos_get_name_node(
388 msdos_name_type_t name_type,
396msdos_format_dirent_with_dot(
char *dst,
const char *src);
399 const char *lfn,
int lfn_len,
400 char* sfn,
int sfn_len);
403msdos_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);
411msdos_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);
419msdos_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);
427msdos_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);
435msdos_get_utf16_string_from_long_entry (
437 uint16_t *entry_string_buf,
438 const size_t buf_size,
442void msdos_date_unix2dos(
443 unsigned int tsp, uint16_t *ddp,
446unsigned int msdos_date_dos2unix(
unsigned int dd,
unsigned int dt);
448int msdos_set_first_char4file_name(
451 unsigned char first_char
454int msdos_dir_is_empty(
460int msdos_find_name_in_fat_file(
464 const uint8_t *name_utf8,
466 msdos_name_type_t name_type,
471int msdos_find_node_by_cluster_num_in_fat_file(
479int msdos_get_dotdot_dir_info_cluster_num_and_offset(
488uint8_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:39
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_free_node_info(const rtems_filesystem_location_info_t *pathloc)
Call the Fat-File close routine.
Definition: msdos_free.c:37
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
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
void msdos_shut_down(rtems_filesystem_mount_table_entry_t *temp_mt_entry)
Shut down the MSDOS filesystem.
Definition: msdos_fsunmount.c:47
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
LibIO Internal Interface.
This header file defines the RTEMS Classic API.
File system node operations table.
Definition: libio.h:1021
File system operations table.
Definition: libio.h:489
Definition: mmu-config.c:53
Descriptor of a fat-file.
Definition: fat_file.h:74
FAT filesystem convert control.
Definition: dosfs.h:201
Path evaluation context.
Definition: libio.h:103
File system location.
Definition: fs.h:72
Mount table entry.
Definition: libio.h:1622
An open file data structure.
Definition: libio.h:1338
This header file provides the API of Self-Contained Objects.