diff options
Diffstat (limited to '')
-rw-r--r-- | libblkid/dos.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libblkid/dos.h b/libblkid/dos.h new file mode 100644 index 000000000..d7588a856 --- /dev/null +++ b/libblkid/dos.h @@ -0,0 +1,41 @@ +#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 */ |