Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/fat/fat_dentry.h

    r7234617 ra248234  
    11/*
    22 * Copyright (c) 2008 Jakub Jermar
    3  * Copyright (c) 2011 Oleg Romanenko
    43 * All rights reserved.
    54 *
     
    3837#include <bool.h>
    3938
    40 #define IS_D_CHAR(ch) (isalnum(ch) || ch == '_')
    41 #define FAT_STOP_CHARS L"*?/\\\n\t|'"
    42 
    4339#define FAT_NAME_LEN            8
    4440#define FAT_EXT_LEN             3
     
    4844#define FAT_EXT_PAD             "   "
    4945
    50 #define FAT_ATTR_RDONLY   0x01
    51 #define FAT_ATTR_HIDDEN   0x02
    52 #define FAT_ATTR_SYSTEM   0x04
    53 #define FAT_ATTR_VOLLABEL 0x08
    54 #define FAT_ATTR_SUBDIR   0x10
    55 #define FAT_ATTR_ARCHIVE  0x20
    56 #define FAT_ATTR_LFN \
    57     (FAT_ATTR_RDONLY | FAT_ATTR_HIDDEN | FAT_ATTR_SYSTEM | FAT_ATTR_VOLLABEL)
    58    
     46#define FAT_ATTR_RDONLY         (1 << 0)
     47#define FAT_ATTR_VOLLABEL       (1 << 3)
     48#define FAT_ATTR_SUBDIR         (1 << 4)
     49
    5950#define FAT_LCASE_LOWER_NAME    0x08
    6051#define FAT_LCASE_LOWER_EXT     0x10
    6152
    62 #define FAT_PAD                 ' '
    63 #define FAT_LFN_PAD     0xffff
    64 #define FAT_SFN_CHAR '_'
     53#define FAT_PAD                 ' '
    6554
    6655#define FAT_DENTRY_UNUSED       0x00
     
    6857#define FAT_DENTRY_DOT          0x2e
    6958#define FAT_DENTRY_ERASED       0xe5
    70 #define FAT_LFN_LAST            0x40
    71 #define FAT_LFN_ERASED          0x80
    72 
    73 #define FAT_LFN_ORDER(d) (d->lfn.order)
    74 #define FAT_IS_LFN(d) \
    75     ((FAT_LFN_ORDER(d) & FAT_LFN_LAST) == FAT_LFN_LAST)
    76 #define FAT_LFN_COUNT(d) \
    77     (FAT_LFN_ORDER(d) ^ FAT_LFN_LAST)
    78 #define FAT_LFN_PART1(d) (d->lfn.part1)
    79 #define FAT_LFN_PART2(d) (d->lfn.part2)
    80 #define FAT_LFN_PART3(d) (d->lfn.part3)
    81 #define FAT_LFN_ATTR(d) (d->lfn.attr)
    82 #define FAT_LFN_CHKSUM(d) (d->lfn.check_sum)
    83 
    84 #define FAT_LFN_NAME_SIZE   260
    85 #define FAT_LFN_MAX_COUNT   20
    86 #define FAT_LFN_PART1_SIZE  5
    87 #define FAT_LFN_PART2_SIZE  6
    88 #define FAT_LFN_PART3_SIZE  2
    89 #define FAT_LFN_ENTRY_SIZE \
    90     (FAT_LFN_PART1_SIZE + FAT_LFN_PART2_SIZE + FAT_LFN_PART3_SIZE)
    9159
    9260typedef enum {
     
    9462        FAT_DENTRY_LAST,
    9563        FAT_DENTRY_FREE,
    96         FAT_DENTRY_VALID,
    97         FAT_DENTRY_LFN
     64        FAT_DENTRY_VALID
    9865} fat_dentry_clsf_t;
    9966
    10067typedef struct {
     68        uint8_t         name[8];
     69        uint8_t         ext[3];
     70        uint8_t         attr;
     71        uint8_t         lcase;
     72        uint8_t         ctime_fine;
     73        uint16_t        ctime;
     74        uint16_t        cdate;
     75        uint16_t        adate;
    10176        union {
    102                 struct {
    103                         uint8_t         name[8];
    104                         uint8_t         ext[3];
    105                         uint8_t         attr;
    106                         uint8_t         lcase;
    107                         uint8_t         ctime_fine;
    108                         uint16_t        ctime;
    109                         uint16_t        cdate;
    110                         uint16_t        adate;
    111                         union {
    112                                 uint16_t        eaidx;          /* FAT12/FAT16 */
    113                                 uint16_t        firstc_hi;      /* FAT32 */
    114                         } __attribute__ ((packed));
    115                         uint16_t        mtime;
    116                         uint16_t        mdate;
    117                         union {
    118                                 uint16_t        firstc;         /* FAT12/FAT16 */
    119                                 uint16_t        firstc_lo;      /* FAT32 */
    120                         } __attribute__ ((packed));
    121                         uint32_t        size;
    122                 } __attribute__ ((packed));
    123                 struct {
    124                         uint8_t         order;
    125                         uint16_t        part1[FAT_LFN_PART1_SIZE];
    126                         uint8_t         attr;
    127                         uint8_t         type;
    128                         uint8_t         check_sum;
    129                         uint16_t        part2[FAT_LFN_PART2_SIZE];
    130                         uint16_t        firstc_lo; /* MUST be 0 */
    131                         uint16_t        part3[FAT_LFN_PART3_SIZE];
    132                 } __attribute__ ((packed)) lfn;
    133         };
     77                uint16_t        eaidx;          /* FAT12/FAT16 */
     78                uint16_t        firstc_hi;      /* FAT32 */
     79        } __attribute__ ((packed));
     80        uint16_t        mtime;
     81        uint16_t        mdate;
     82        union {
     83                uint16_t        firstc;         /* FAT12/FAT16 */
     84                uint16_t        firstc_lo;      /* FAT32 */
     85        } __attribute__ ((packed));
     86        uint32_t        size;
    13487} __attribute__ ((packed)) fat_dentry_t;
    13588
    136 
    13789extern int fat_dentry_namecmp(char *, const char *);
     90extern bool fat_dentry_name_verify(const char *);
    13891extern void fat_dentry_name_get(const fat_dentry_t *, char *);
    13992extern void fat_dentry_name_set(fat_dentry_t *, const char *);
    14093extern fat_dentry_clsf_t fat_classify_dentry(const fat_dentry_t *);
    141 extern uint8_t fat_dentry_chksum(uint8_t *);
    142 
    143 extern size_t fat_lfn_str_nlength(const uint16_t *, size_t);
    144 extern size_t fat_lfn_size(const fat_dentry_t *);
    145 extern size_t fat_lfn_get_entry(const fat_dentry_t *, uint16_t *, size_t *);
    146 extern size_t fat_lfn_set_entry(const uint16_t *, size_t *, size_t, fat_dentry_t *);
    147 
    148 extern void str_to_ascii(char *dst, const char *src, size_t count, uint8_t pad);
    149 extern size_t utf16_length(const uint16_t *wstr);
    150 
    151 extern bool fat_valid_name(const char *name);
    152 extern bool fat_valid_short_name(const char *name);
    153 
    15494
    15595#endif
Note: See TracChangeset for help on using the changeset viewer.