| #ifndef BLKID_PARTITIONS_DOS_H |
| #define BLKID_PARTITIONS_DOS_H |
| |
| struct dos_partition { |
| unsigned char boot_ind; /* 0x80 - active */ |
| unsigned char bh, bs, bc; /* begin CHS */ |
| unsigned char sys_type; |
| unsigned char eh, es, ec; /* end CHS */ |
| unsigned char start_sect[4]; |
| unsigned char nr_sects[4]; |
| } __attribute__((packed)); |
| |
| #define BLKID_MSDOS_PT_OFFSET 0x1be |
| |
| /* assemble badly aligned little endian integer */ |
| static inline unsigned int assemble4le(const unsigned char *p) |
| { |
| return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); |
| } |
| |
| static inline unsigned int dos_partition_start(struct dos_partition *p) |
| { |
| return assemble4le(&(p->start_sect[0])); |
| } |
| |
| static inline unsigned int dos_partition_size(struct dos_partition *p) |
| { |
| return assemble4le(&(p->nr_sects[0])); |
| } |
| |
| static inline int is_valid_mbr_signature(const unsigned char *mbr) |
| { |
| return mbr[510] == 0x55 && mbr[511] == 0xaa ? 1 : 0; |
| } |
| |
| static inline unsigned int dos_parttable_id(const unsigned char *mbr) |
| { |
| return assemble4le(&mbr[440]); |
| } |
| |
| #endif /* BLKID_PARTITIONS_DOS_H */ |