diff options
Diffstat (limited to 'lib/pb-protocol')
-rw-r--r-- | lib/pb-protocol/pb-protocol.c | 19 | ||||
-rw-r--r-- | lib/pb-protocol/pb-protocol.h | 2 |
2 files changed, 21 insertions, 0 deletions
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); |