X-Git-Url: https://git.sven.stormbind.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Fexfat_ondisk.h;h=b3fc1fe4d13a3c1bbc2fea65154d16baf6a25ab7;hb=HEAD;hp=70546a321fd8cc066d0a37ac21e9429b794247d2;hpb=f7feb8f190bd23ec253bf9fe705738049d9cedd7;p=sven%2Fexfatprogs.git diff --git a/include/exfat_ondisk.h b/include/exfat_ondisk.h index 70546a3..2137226 100644 --- a/include/exfat_ondisk.h +++ b/include/exfat_ondisk.h @@ -39,12 +39,15 @@ #define DENTRY_SIZE_BITS 5 /* exFAT allows 8388608(256MB) directory entries */ #define MAX_EXFAT_DENTRIES 8388608 +#define MIN_FILE_DENTRIES 3 +#define MAX_NAME_DENTRIES 17 +#define MAX_EXT_DENTRIES 0xFF /* dentry types */ #define MSDOS_DELETED 0xE5 /* deleted mark */ #define MSDOS_UNUSED 0x00 /* end of directory */ -#define EXFAT_UNUSED 0x00 /* end of directory */ +#define EXFAT_LAST 0x00 /* end of directory */ #define EXFAT_DELETE ~(0x80) #define IS_EXFAT_DELETED(x) ((x) < 0x80) /* deleted file (0x01~0x7F) */ #define EXFAT_INVAL 0x80 /* invalid value */ @@ -58,6 +61,8 @@ #define EXFAT_STREAM 0xC0 /* stream entry */ #define EXFAT_NAME 0xC1 /* file name entry */ #define EXFAT_ACL 0xC2 /* stream entry */ +#define EXFAT_VENDOR_EXT 0xE0 +#define EXFAT_VENDOR_ALLOC 0xE1 /* checksum types */ #define CS_DIR_ENTRY 0 @@ -93,7 +98,7 @@ #define EXFAT_BAD_CLUSTER (0xFFFFFFF7U) #define EXFAT_FREE_CLUSTER (0) #define EXFAT_FIRST_CLUSTER (2) -#define EXFAT_REVERVED_CLUSTERS (2) +#define EXFAT_RESERVED_CLUSTERS (2) /* EXFAT BIOS parameter block (64 bytes) */ @@ -131,18 +136,8 @@ struct pbr { __le16 signature; }; -/* Extended Boot Sector */ -struct exbs { - __u8 zero[510]; - __le16 signature; -}; - -/* Extended Boot Record (8 sectors) */ -struct expbr { - struct exbs eb[8]; -}; - #define VOLUME_LABEL_MAX_LEN 11 +#define EXFAT_GUID_LEN 16 #define ENTRY_NAME_MAX 15 struct exfat_dentry { @@ -167,8 +162,10 @@ struct exfat_dentry { __le16 access_date; __u8 create_time_ms; __u8 modify_time_ms; - __u8 access_time_ms; - __u8 reserved2[9]; + __u8 create_tz; + __u8 modify_tz; + __u8 access_tz; + __u8 reserved2[7]; } __attribute__((packed)) file; /* file directory entry */ struct { __u8 flags; @@ -198,6 +195,26 @@ struct exfat_dentry { __le32 start_clu; __le64 size; } __attribute__((packed)) upcase; /* up-case table directory entry */ + struct { + __u8 num_ext; + __le16 checksum; + __u16 flags; + __u8 guid[EXFAT_GUID_LEN]; + __u8 reserved[10]; + } __attribute__((packed)) guid; /* volume GUID directory entry */ + struct { + __u8 flags; + __u8 guid[EXFAT_GUID_LEN]; + __u8 vendor_defined[14]; + } __attribute__((packed)) vendor_ext ; /* vendor extension entry */ + struct { + __u8 flags; + __u8 guid[EXFAT_GUID_LEN]; + __u8 vendor_defined[2]; + __le32 start_clu; + __le64 size; + } __attribute__((packed)) vendor_alloc; /* vendor allocation entry */ + } __attribute__((packed)) dentry; } __attribute__((packed));