[syslinux:master] com32/chain: setup_handover() - use iter->length

syslinux-bot for Michal Soltys soltys at ziu.info
Mon Mar 26 15:03:30 PDT 2012


Commit-ID:  a3141df0147be83c5c5b4c15cf4c2dcf7fb5d204
Gitweb:     http://www.syslinux.org/commit/a3141df0147be83c5c5b4c15cf4c2dcf7fb5d204
Author:     Michal Soltys <soltys at ziu.info>
AuthorDate: Wed, 9 Mar 2011 00:34:20 +0100
Committer:  Michal Soltys <soltys at ziu.info>
CommitDate: Wed, 9 Mar 2011 00:34:20 +0100

com32/chain: setup_handover() - use iter->length

Signed-off-by: Michal Soltys <soltys at ziu.info>

---
 com32/chain/chain.c |   31 +++++++++++++------------------
 1 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/com32/chain/chain.c b/com32/chain/chain.c
index 6a028a4..784d636 100644
--- a/com32/chain/chain.c
+++ b/com32/chain/chain.c
@@ -414,8 +414,8 @@ static int setup_handover(const struct part_iter *iter,
 	    goto bail;
 	}
 	len = ~0u;
-	if (iter->di.lbacnt < len)
-	    len = (uint32_t)iter->di.lbacnt;
+	if (iter->length < len)
+	    len = (uint32_t)iter->length;
 	lba2chs(&ha->start, &iter->di, 0, l2c_cadd);
 	lba2chs(&ha->end, &iter->di, len - 1, l2c_cadd);
 	ha->active_flag = 0x80;
@@ -423,11 +423,7 @@ static int setup_handover(const struct part_iter *iter,
 	ha->start_lba = 0;
 	ha->length = len;
     } else if (iter->type == typegpt) {
-	const struct disk_gpt_part_entry *gp;
-	uint64_t lba_count;
 	/* GPT handover protocol */
-	gp = (const struct disk_gpt_part_entry *)iter->record;
-	lba_count = gp->lba_last - gp->lba_first + 1;
 	synth_size = sizeof(struct disk_dos_part_entry) +
 	    sizeof(uint32_t) + (uint32_t)iter->sub.gpt.pe_size;
 	ha = malloc(synth_size);
@@ -435,8 +431,8 @@ static int setup_handover(const struct part_iter *iter,
 	    error("Could not build GPT hand-over record!\n");
 	    goto bail;
 	}
-	lba2chs(&ha->start, &iter->di, gp->lba_first, l2c_cadd);
-	lba2chs(&ha->end, &iter->di, gp->lba_last, l2c_cadd);
+	lba2chs(&ha->start, &iter->di, iter->start_lba, l2c_cadd);
+	lba2chs(&ha->end, &iter->di, iter->start_lba + iter->length - 1, l2c_cadd);
 	ha->active_flag = 0x80;
 	ha->ostype = 0xED;
 	/* All bits set by default */
@@ -445,34 +441,33 @@ static int setup_handover(const struct part_iter *iter,
 	/* If these fit the precision, pass them on */
 	if (iter->start_lba < ha->start_lba)
 	    ha->start_lba = (uint32_t)iter->start_lba;
-	if (lba_count < ha->length)
-	    ha->length = (uint32_t)lba_count;
+	if (iter->length < ha->length)
+	    ha->length = (uint32_t)iter->length;
 	/* Next comes the GPT partition record length */
 	plen = (uint32_t *) (ha + 1);
 	plen[0] = (uint32_t)iter->sub.gpt.pe_size;
 	/* Next comes the GPT partition record copy */
-	memcpy(plen + 1, gp, plen[0]);
+	memcpy(plen + 1, iter->record, plen[0]);
 #ifdef DEBUG
 	dprintf("GPT handover:\n");
 	disk_dos_part_dump(ha);
 	disk_gpt_part_dump((struct disk_gpt_part_entry *)(plen + 1));
 #endif
     } else if (iter->type == typedos) {
-	const struct disk_dos_part_entry *dp;
 	/* MBR handover protocol */
-	dp = (const struct disk_dos_part_entry *)iter->record;
 	synth_size = sizeof(struct disk_dos_part_entry);
 	ha = malloc(synth_size);
 	if (!ha) {
 	    error("Could not build MBR hand-over record!\n");
 	    goto bail;
 	}
+	memcpy(ha, iter->record, synth_size);
+	/* make sure these match bios imaginations and are ebr agnostic */
 	lba2chs(&ha->start, &iter->di, iter->start_lba, l2c_cadd);
-	lba2chs(&ha->end, &iter->di, iter->start_lba + dp->length - 1, l2c_cadd);
-	ha->active_flag = dp->active_flag;
-	ha->ostype = dp->ostype;
-	ha->start_lba = (uint32_t)iter->start_lba;  /* fine, we iterate over legacy scheme */
-	ha->length = dp->length;
+	lba2chs(&ha->end, &iter->di, iter->start_lba + iter->length - 1, l2c_cadd);
+	ha->start_lba = (uint32_t)iter->start_lba;
+	ha->length = (uint32_t)iter->length;
+
 #ifdef DEBUG
 	dprintf("MBR handover:\n");
 	disk_dos_part_dump(ha);


More information about the Syslinux-commits mailing list