Allow boot code to be smaller than what the scheme expects.

This effectively changes the boot code size to be an upper
bound and makes the interface more flexible.
This commit is contained in:
Marcel Moolenaar 2008-12-01 00:07:17 +00:00
parent 08b6360ca3
commit 6647711279
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=185497
4 changed files with 20 additions and 5 deletions

View file

@ -535,8 +535,8 @@ g_part_ctl_bootcode(struct gctl_req *req, struct g_part_parms *gpp)
error = ENODEV;
goto fail;
}
if (gpp->gpp_codesize != sz) {
error = EINVAL;
if (gpp->gpp_codesize > sz) {
error = EFBIG;
goto fail;
}

View file

@ -374,9 +374,14 @@ static int
g_part_gpt_bootcode(struct g_part_table *basetable, struct g_part_parms *gpp)
{
struct g_part_gpt_table *table;
size_t codesz;
codesz = DOSPARTOFF;
table = (struct g_part_gpt_table *)basetable;
bcopy(gpp->gpp_codeptr, table->mbr, DOSPARTOFF);
bzero(table->mbr, codesz);
codesz = MIN(codesz, gpp->gpp_codesize);
if (codesz > 0)
bcopy(gpp->gpp_codeptr, table->mbr, codesz);
return (0);
}

View file

@ -213,9 +213,14 @@ static int
g_part_mbr_bootcode(struct g_part_table *basetable, struct g_part_parms *gpp)
{
struct g_part_mbr_table *table;
size_t codesz;
codesz = DOSPARTOFF;
table = (struct g_part_mbr_table *)basetable;
bcopy(gpp->gpp_codeptr, table->mbr, DOSPARTOFF);
bzero(table->mbr, codesz);
codesz = MIN(codesz, gpp->gpp_codesize);
if (codesz > 0)
bcopy(gpp->gpp_codeptr, table->mbr, codesz);
return (0);
}

View file

@ -209,9 +209,14 @@ static int
g_part_pc98_bootcode(struct g_part_table *basetable, struct g_part_parms *gpp)
{
struct g_part_pc98_table *table;
size_t codesz;
codesz = DOSMAGICOFFSET;
table = (struct g_part_pc98_table *)basetable;
bcopy(gpp->gpp_codeptr, table->boot, DOSMAGICOFFSET);
bzero(table->boot, codesz);
codesz = MIN(codesz, gpp->gpp_codesize);
if (codesz > 0)
bcopy(gpp->gpp_codeptr, table->boot, codesz);
return (0);
}