diff options
| author | jnemeth <jnemeth@NetBSD.org> | 2019-06-25 03:42:45 +0000 |
|---|---|---|
| committer | jnemeth <jnemeth@NetBSD.org> | 2019-06-25 03:42:45 +0000 |
| commit | b1a79b234d7a71c43d9baef27f706175b973e994 (patch) | |
| tree | 1da4d6cd5438990cb0858d7fc82112022e12d17f /sbin | |
| parent | a8dc3d49b3123b434307a16505fa218721f1735f (diff) | |
Add gpt_change_hdr() similar to gpt_change_ent() for changing
arbitrary header fields.
Diffstat (limited to 'sbin')
| -rw-r--r-- | sbin/gpt/gpt.c | 29 | ||||
| -rw-r--r-- | sbin/gpt/gpt.h | 2 |
2 files changed, 30 insertions, 1 deletions
diff --git a/sbin/gpt/gpt.c b/sbin/gpt/gpt.c index 565984faf64..f36949da2e4 100644 --- a/sbin/gpt/gpt.c +++ b/sbin/gpt/gpt.c @@ -35,7 +35,7 @@ __FBSDID("$FreeBSD: src/sbin/gpt/gpt.c,v 1.16 2006/07/07 02:44:23 marcel Exp $"); #endif #ifdef __RCSID -__RCSID("$NetBSD: gpt.c,v 1.79 2019/06/21 02:14:59 jnemeth Exp $"); +__RCSID("$NetBSD: gpt.c,v 1.80 2019/06/25 03:50:18 jnemeth Exp $"); #endif #include <sys/param.h> @@ -1076,6 +1076,33 @@ gpt_change_ent(gpt_t gpt, const struct gpt_find *find, } int +gpt_change_hdr(gpt_t gpt, const struct gpt_find *find, + void (*cfn)(struct gpt_hdr *, void *, int), void *v) +{ + struct gpt_hdr *hdr; + + if ((hdr = gpt_hdr(gpt)) == NULL) + return -1; + + /* Change the primary header. */ + (*cfn)(hdr, v, 0); + + if (gpt_write_primary(gpt) == -1) + return -1; + + hdr = gpt->tpg->map_data; + /* Change the secondary header. */ + (*cfn)(hdr, v, 1); + + if (gpt_write_backup(gpt) == -1) + return -1; + + gpt_msg(gpt, "Header %s", find->msg); + + return 0; +} + +int gpt_add_ais(gpt_t gpt, off_t *alignment, u_int *entry, off_t *size, int ch) { switch (ch) { diff --git a/sbin/gpt/gpt.h b/sbin/gpt/gpt.h index 92b99b8d02a..aadb74393bc 100644 --- a/sbin/gpt/gpt.h +++ b/sbin/gpt/gpt.h @@ -116,6 +116,8 @@ struct gpt_find { }; int gpt_change_ent(gpt_t, const struct gpt_find *, void (*)(struct gpt_ent *, void *, int), void *); +int gpt_change_hdr(gpt_t, const struct gpt_find *, + void (*)(struct gpt_hdr *, void *, int), void *); int gpt_add_find(gpt_t, struct gpt_find *, int); #define GPT_AIS "a:i:s:" |
