mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 04:43:53 +00:00
Fix the problem, when gpart(8) can't write both bootcode and partcode
in one command due to wrong file size limit. Do not use bootcode size to calculate partsize limit. Also add report message about successful partcode writing. Reported by: Trond Endrestøl MFC after: 2 weeks
This commit is contained in:
parent
2dcee04b3a
commit
b2d7040c1c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=297820
|
@ -1126,6 +1126,7 @@ gpart_write_partcode(struct ggeom *gp, int idx, void *code, ssize_t size)
|
|||
err(EXIT_FAILURE, "%s", dsf);
|
||||
free(buf);
|
||||
close(fd);
|
||||
printf("partcode written to %s\n", pp->lg_name);
|
||||
} else
|
||||
errx(EXIT_FAILURE, "invalid partition index");
|
||||
}
|
||||
|
@ -1172,6 +1173,9 @@ gpart_write_partcode_vtoc8(struct ggeom *gp, int idx, void *code)
|
|||
}
|
||||
if (installed == 0)
|
||||
errx(EXIT_FAILURE, "%s: no partitions", gp->lg_name);
|
||||
else
|
||||
printf("partcode written to %s\n",
|
||||
idx != 0 ? pp->lg_name: gp->lg_name);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1193,10 +1197,8 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl)
|
|||
bootcode);
|
||||
if (error)
|
||||
errc(EXIT_FAILURE, error, "internal error");
|
||||
} else {
|
||||
} else
|
||||
bootcode = NULL;
|
||||
bootsize = 0;
|
||||
}
|
||||
|
||||
s = gctl_get_ascii(req, "class");
|
||||
if (s == NULL)
|
||||
|
@ -1220,21 +1222,23 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl)
|
|||
s = find_geomcfg(gp, "scheme");
|
||||
if (s == NULL)
|
||||
errx(EXIT_FAILURE, "Scheme not found for geom %s", gp->lg_name);
|
||||
vtoc8 = 0;
|
||||
if (strcmp(s, "VTOC8") == 0)
|
||||
vtoc8 = 1;
|
||||
else
|
||||
vtoc8 = 0;
|
||||
|
||||
if (gctl_has_param(req, GPART_PARAM_PARTCODE)) {
|
||||
s = gctl_get_ascii(req, GPART_PARAM_PARTCODE);
|
||||
partsize = vtoc8 != 0 ? VTOC_BOOTSIZE : bootsize * 1024;
|
||||
if (vtoc8 != 0)
|
||||
partsize = VTOC_BOOTSIZE;
|
||||
else
|
||||
partsize = 1024 * 1024; /* Arbitrary limit. */
|
||||
partcode = gpart_bootfile_read(s, &partsize);
|
||||
error = gctl_delete_param(req, GPART_PARAM_PARTCODE);
|
||||
if (error)
|
||||
errc(EXIT_FAILURE, error, "internal error");
|
||||
} else {
|
||||
} else
|
||||
partcode = NULL;
|
||||
partsize = 0;
|
||||
}
|
||||
|
||||
if (gctl_has_param(req, GPART_PARAM_INDEX)) {
|
||||
if (partcode == NULL)
|
||||
|
|
Loading…
Reference in a new issue