Ignore:
File:
1 edited

Legend:

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

    ra248234 r7234617  
    11/*
    22 * Copyright (c) 2008 Jakub Jermar
     3 * Copyright (c) 2011 Oleg Romanenko
    34 * All rights reserved.
    45 *
     
    3738#include <bool.h>
    3839
     40#define IS_D_CHAR(ch) (isalnum(ch) || ch == '_')
     41#define FAT_STOP_CHARS L"*?/\\\n\t|'"
     42
    3943#define FAT_NAME_LEN            8
    4044#define FAT_EXT_LEN             3
     
    4448#define FAT_EXT_PAD             "   "
    4549
    46 #define FAT_ATTR_RDONLY         (1 << 0)
    47 #define FAT_ATTR_VOLLABEL       (1 << 3)
    48 #define FAT_ATTR_SUBDIR         (1 << 4)
    49 
     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   
    5059#define FAT_LCASE_LOWER_NAME    0x08
    5160#define FAT_LCASE_LOWER_EXT     0x10
    5261
    53 #define FAT_PAD                 ' '
     62#define FAT_PAD                 ' '
     63#define FAT_LFN_PAD     0xffff
     64#define FAT_SFN_CHAR '_'
    5465
    5566#define FAT_DENTRY_UNUSED       0x00
     
    5768#define FAT_DENTRY_DOT          0x2e
    5869#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)
    5991
    6092typedef enum {
     
    6294        FAT_DENTRY_LAST,
    6395        FAT_DENTRY_FREE,
    64         FAT_DENTRY_VALID
     96        FAT_DENTRY_VALID,
     97        FAT_DENTRY_LFN
    6598} fat_dentry_clsf_t;
    6699
    67100typedef 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;
    76101        union {
    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;
     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        };
    87134} __attribute__ ((packed)) fat_dentry_t;
    88135
     136
    89137extern int fat_dentry_namecmp(char *, const char *);
    90 extern bool fat_dentry_name_verify(const char *);
    91138extern void fat_dentry_name_get(const fat_dentry_t *, char *);
    92139extern void fat_dentry_name_set(fat_dentry_t *, const char *);
    93140extern fat_dentry_clsf_t fat_classify_dentry(const fat_dentry_t *);
     141extern uint8_t fat_dentry_chksum(uint8_t *);
     142
     143extern size_t fat_lfn_str_nlength(const uint16_t *, size_t);
     144extern size_t fat_lfn_size(const fat_dentry_t *);
     145extern size_t fat_lfn_get_entry(const fat_dentry_t *, uint16_t *, size_t *);
     146extern size_t fat_lfn_set_entry(const uint16_t *, size_t *, size_t, fat_dentry_t *);
     147
     148extern void str_to_ascii(char *dst, const char *src, size_t count, uint8_t pad);
     149extern size_t utf16_length(const uint16_t *wstr);
     150
     151extern bool fat_valid_name(const char *name);
     152extern bool fat_valid_short_name(const char *name);
     153
    94154
    95155#endif
Note: See TracChangeset for help on using the changeset viewer.