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