00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00033 #ifndef FAT_FAT_DENTRY_H_
00034 #define FAT_FAT_DENTRY_H_
00035
00036 #include <stdint.h>
00037 #include <bool.h>
00038
00039 #define FAT_NAME_LEN 8
00040 #define FAT_EXT_LEN 3
00041
00042 #define FAT_NAME_DOT ". "
00043 #define FAT_NAME_DOT_DOT ".. "
00044 #define FAT_EXT_PAD " "
00045
00046 #define FAT_ATTR_RDONLY (1 << 0)
00047 #define FAT_ATTR_VOLLABEL (1 << 3)
00048 #define FAT_ATTR_SUBDIR (1 << 4)
00049
00050 #define FAT_LCASE_LOWER_NAME 0x08
00051 #define FAT_LCASE_LOWER_EXT 0x10
00052
00053 #define FAT_PAD ' '
00054
00055 #define FAT_DENTRY_UNUSED 0x00
00056 #define FAT_DENTRY_E5_ESC 0x05
00057 #define FAT_DENTRY_DOT 0x2e
00058 #define FAT_DENTRY_ERASED 0xe5
00059
00060 typedef enum {
00061 FAT_DENTRY_SKIP,
00062 FAT_DENTRY_LAST,
00063 FAT_DENTRY_FREE,
00064 FAT_DENTRY_VALID
00065 } fat_dentry_clsf_t;
00066
00067 typedef struct {
00068 uint8_t name[8];
00069 uint8_t ext[3];
00070 uint8_t attr;
00071 uint8_t lcase;
00072 uint8_t ctime_fine;
00073 uint16_t ctime;
00074 uint16_t cdate;
00075 uint16_t adate;
00076 union {
00077 uint16_t eaidx;
00078 uint16_t firstc_hi;
00079 } __attribute__ ((packed));
00080 uint16_t mtime;
00081 uint16_t mdate;
00082 union {
00083 uint16_t firstc;
00084 uint16_t firstc_lo;
00085 } __attribute__ ((packed));
00086 uint32_t size;
00087 } __attribute__ ((packed)) fat_dentry_t;
00088
00089 extern int fat_dentry_namecmp(char *, const char *);
00090 extern bool fat_dentry_name_verify(const char *);
00091 extern void fat_dentry_name_get(const fat_dentry_t *, char *);
00092 extern void fat_dentry_name_set(fat_dentry_t *, const char *);
00093 extern fat_dentry_clsf_t fat_classify_dentry(const fat_dentry_t *);
00094
00095 #endif
00096