Changes in uspace/srv/fs/fat/fat_dentry.h [7234617:a248234] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/fat/fat_dentry.h
r7234617 ra248234 1 1 /* 2 2 * Copyright (c) 2008 Jakub Jermar 3 * Copyright (c) 2011 Oleg Romanenko4 3 * All rights reserved. 5 4 * … … 38 37 #include <bool.h> 39 38 40 #define IS_D_CHAR(ch) (isalnum(ch) || ch == '_')41 #define FAT_STOP_CHARS L"*?/\\\n\t|'"42 43 39 #define FAT_NAME_LEN 8 44 40 #define FAT_EXT_LEN 3 … … 48 44 #define FAT_EXT_PAD " " 49 45 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 59 50 #define FAT_LCASE_LOWER_NAME 0x08 60 51 #define FAT_LCASE_LOWER_EXT 0x10 61 52 62 #define FAT_PAD ' ' 63 #define FAT_LFN_PAD 0xffff 64 #define FAT_SFN_CHAR '_' 53 #define FAT_PAD ' ' 65 54 66 55 #define FAT_DENTRY_UNUSED 0x00 … … 68 57 #define FAT_DENTRY_DOT 0x2e 69 58 #define FAT_DENTRY_ERASED 0xe5 70 #define FAT_LFN_LAST 0x4071 #define FAT_LFN_ERASED 0x8072 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 26085 #define FAT_LFN_MAX_COUNT 2086 #define FAT_LFN_PART1_SIZE 587 #define FAT_LFN_PART2_SIZE 688 #define FAT_LFN_PART3_SIZE 289 #define FAT_LFN_ENTRY_SIZE \90 (FAT_LFN_PART1_SIZE + FAT_LFN_PART2_SIZE + FAT_LFN_PART3_SIZE)91 59 92 60 typedef enum { … … 94 62 FAT_DENTRY_LAST, 95 63 FAT_DENTRY_FREE, 96 FAT_DENTRY_VALID, 97 FAT_DENTRY_LFN 64 FAT_DENTRY_VALID 98 65 } fat_dentry_clsf_t; 99 66 100 67 typedef 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; 101 76 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; 134 87 } __attribute__ ((packed)) fat_dentry_t; 135 88 136 137 89 extern int fat_dentry_namecmp(char *, const char *); 90 extern bool fat_dentry_name_verify(const char *); 138 91 extern void fat_dentry_name_get(const fat_dentry_t *, char *); 139 92 extern void fat_dentry_name_set(fat_dentry_t *, const char *); 140 93 extern 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 154 94 155 95 #endif
Note:
See TracChangeset
for help on using the changeset viewer.