for (i = 0; i < 4; i++) {
struct pte *pe = &ptes[i];
- pe->pt_entry = pt_offset(cxt->firstsector, i);
+ pe->pt_entry = mbr_get_partition(cxt->firstsector, i);
pe->ex_entry = NULL;
pe->offset = 0;
pe->sectorbuffer = cxt->firstsector;
if (!extended_offset)
extended_offset = dos_partition_get_start(p);
- q = p = pt_offset(pe->sectorbuffer, 0);
+ q = p = mbr_get_partition(pe->sectorbuffer, 0);
for (i = 0; i < 4; i++, p++) if (dos_partition_get_size(p)) {
if (IS_EXTENDED (p->sys_ind)) {
if (pe->ex_entry)
hh = ss = 0;
for (i=0; i<4; i++) {
- p = pt_offset(bufp, i);
+ p = mbr_get_partition(bufp, i);
if (p->sys_ind != 0) {
h = p->eh + 1;
s = (p->es & 077);
pen->ex_entry = p;
pe4->offset = extended_offset = start;
pe4->sectorbuffer = xcalloc(1, cxt->sector_size);
- pe4->pt_entry = pt_offset(pe4->sectorbuffer, 0);
+ pe4->pt_entry = mbr_get_partition(pe4->sectorbuffer, 0);
pe4->ex_entry = pe4->pt_entry + 1;
pe4->changed = 1;
cxt->label->nparts_max = 5;
struct pte *pe = &ptes[cxt->label->nparts_max];
pe->sectorbuffer = xcalloc(1, cxt->sector_size);
- pe->pt_entry = pt_offset(pe->sectorbuffer, 0);
+ pe->pt_entry = mbr_get_partition(pe->sectorbuffer, 0);
pe->ex_entry = pe->pt_entry + 1;
pe->offset = 0;
pe->changed = 1;
extern struct pte ptes[MAXIMUM_PARTS];
-#define pt_offset(b, n) ((struct dos_partition *)((b) + 0x1be + \
- (n) * sizeof(struct dos_partition)))
-
extern sector_t extended_offset;
extern struct dos_partition *dos_get_pt_entry(int);
#define MBR_PT_OFFSET 0x1be
+static inline struct dos_partition *mbr_get_partition(unsigned char *mbr, int i)
+{
+ return (struct dos_partition *)
+ (mbr + MBR_PT_OFFSET + (i * sizeof(struct dos_partition)));
+}
+
/* assemble badly aligned little endian integer */
static inline unsigned int __dos_assemble_4le(const unsigned char *p)
{
if (!mbr_is_valid_magic(data))
goto leave;
- p0 = (struct dos_partition *) (data + MBR_PT_OFFSET);
+ p0 = mbr_get_partition(data, 0);
/* Usually, the first entry is the real data partition,
* the 2nd entry is the next extended partition, or empty,
goto nothing;
}
- p0 = (struct dos_partition *) (data + MBR_PT_OFFSET);
+ p0 = mbr_get_partition(data, 0);
/*
* Reject PT where boot indicator is not 0 or 0x80.
}
}
- blkid_probe_use_wiper(pr, MBR_PT_OFFSET,
- 512 - MBR_PT_OFFSET);
+ blkid_probe_use_wiper(pr, MBR_PT_OFFSET, 512 - MBR_PT_OFFSET);
id = mbr_get_id(data);
if (id)
if (!mbr_is_valid_magic(data))
goto failed;
- p = (struct dos_partition *) (data + MBR_PT_OFFSET);
-
- for (i = 0; i < 4; i++, p++) {
+ for (i = 0, p = mbr_get_partition(data, 0); i < 4; i++, p++) {
if (p->sys_ind == MBR_GPT_PARTITION)
goto ok;
}
/* caller does not ask for details about partitions */
return 0;
- p = (struct dos_partition *) (data + MBR_PT_OFFSET);
-
tab = blkid_partlist_new_parttable(ls, "minix", MBR_PT_OFFSET);
if (!tab)
goto err;
- for (i = 0; i < MINIX_MAXPARTITIONS; i++, p++) {
+ for (i = 0, p = mbr_get_partition(data, 0);
+ i < MINIX_MAXPARTITIONS; i++, p++) {
+
uint32_t start, size;
blkid_partition par;