Patchwork [6/9] petitboot: Add boot_option_copy routine

login
register
mail settings
Submitter Geoff Levand
Date Jan. 22, 2009, 12:26 a.m.
Message ID <20090122002653.638981957@am.sony.com>
Download mbox | patch
Permalink /patch/19743/
State Accepted
Delegated to: Jeremy Kerr
Headers show

Comments

Geoff Levand - Jan. 22, 2009, 12:26 a.m.
Add the convenience routine boot_option_copy().  Does a deep copy.

Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
---
 lib/pb-protocol/pb-protocol.c |   19 +++++++++++++++++++
 lib/pb-protocol/pb-protocol.h |    2 ++
 2 files changed, 21 insertions(+)

Patch

--- a/lib/pb-protocol/pb-protocol.c
+++ b/lib/pb-protocol/pb-protocol.c
@@ -38,6 +38,25 @@ 
  *   4-byte len, id
  */
 
+/* Deep copy a boot_option.
+*/
+struct boot_option *boot_option_copy(void* ctx, const struct boot_option *opt)
+{
+	struct boot_option *new = talloc(ctx, struct boot_option);
+
+	if (new) {
+		new->id = talloc_strdup(new, opt->id);
+		new->name = talloc_strdup(new, opt->name);
+		new->description = talloc_strdup(new, opt->description);
+		new->icon_file = talloc_strdup(new, opt->icon_file);
+		new->boot_image_file = talloc_strdup(new, opt->boot_image_file);
+		new->initrd_file = talloc_strdup(new, opt->initrd_file);
+		new->boot_args = talloc_strdup(new, opt->boot_args);
+		memset(&new->list, 0, sizeof(new->list));
+	}
+
+	return new;
+}
 
 /* Write a string into the buffer, starting at pos.
  *
--- a/lib/pb-protocol/pb-protocol.h
+++ b/lib/pb-protocol/pb-protocol.h
@@ -41,6 +41,8 @@  struct boot_option {
 	struct list_item list;
 };
 
+struct boot_option *boot_option_copy(void* ctx, const struct boot_option *opt);
+
 int pb_protocol_device_len(struct device *dev);
 
 int pb_protocol_serialise_string(char *pos, const char *str);