summaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorjnemeth <jnemeth@NetBSD.org>2019-06-25 03:42:45 +0000
committerjnemeth <jnemeth@NetBSD.org>2019-06-25 03:42:45 +0000
commitb1a79b234d7a71c43d9baef27f706175b973e994 (patch)
tree1da4d6cd5438990cb0858d7fc82112022e12d17f /sbin
parenta8dc3d49b3123b434307a16505fa218721f1735f (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.c29
-rw-r--r--sbin/gpt/gpt.h2
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:"