From 5a1cb18519a0140ad49c460d99be2fb399efb802 Mon Sep 17 00:00:00 2001 From: Geoff Levand Date: Wed, 21 Jan 2009 16:26:59 -0800 Subject: [PATCH] Add boot_option_copy routine Add the convenience routine boot_option_copy(). Does a deep copy. Signed-off-by: Geoff Levand Signed-off-by: Jeremy Kerr --- lib/pb-protocol/pb-protocol.c | 19 +++++++++++++++++++ lib/pb-protocol/pb-protocol.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c index d5f8b2f..0252b9a 100644 --- 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. * diff --git a/lib/pb-protocol/pb-protocol.h b/lib/pb-protocol/pb-protocol.h index 399c824..c8ce36b 100644 --- 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); -- 2.39.2