Module Name:    src
Committed By:   jnemeth
Date:           Tue Jun 25 03:50:18 UTC 2019

Modified Files:
        src/sbin/gpt: gpt.c

Log Message:
Add gpt_change_hdr() similar to gpt_change_ent() for changing
arbitrary header fields.


To generate a diff of this commit:
cvs rdiff -u -r1.79 -r1.80 src/sbin/gpt/gpt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/gpt/gpt.c
diff -u src/sbin/gpt/gpt.c:1.79 src/sbin/gpt/gpt.c:1.80
--- src/sbin/gpt/gpt.c:1.79	Fri Jun 21 02:14:59 2019
+++ src/sbin/gpt/gpt.c	Tue Jun 25 03:50:18 2019
@@ -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 g
 }
 
 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) {

Reply via email to