| /* |
| * Copyright (c) 2019 The Fuchsia Authors |
| */ |
| |
| #include <common.h> |
| #include <zircon-estelle/fw-testing.h> |
| #include <zircon-estelle/zircon.h> |
| #include <stdlib.h> |
| |
| static char *args = NULL; |
| static uint32_t args_len = 0; |
| |
| int zircon_fw_testing_append_boot_items(const char *payload) |
| { |
| if (!payload) { |
| return -1; |
| } |
| |
| uint32_t length = strlen(payload); |
| |
| if (length == 0) { |
| return -1; |
| } |
| |
| uint32_t new_args_len; |
| if (args) { |
| // a ' ' is inserted after previous args |
| new_args_len = args_len + length + 1; |
| } else { |
| new_args_len = length; |
| } |
| char *new_args = malloc(new_args_len + 1); |
| if (!new_args) { |
| return -1; |
| } |
| new_args[new_args_len] = '\0'; |
| |
| if (args) { |
| memcpy(new_args, args, args_len); |
| free(args); |
| |
| new_args[args_len] = ' '; |
| memcpy(new_args + args_len + 1, payload, length); |
| } else { |
| memcpy(new_args, payload, length); |
| } |
| |
| args_len = new_args_len; |
| args = new_args; |
| |
| printf("args: %s, args_len: %u\n", args, args_len); |
| return 0; |
| } |
| |
| int zircon_fw_testing_add_extra_zbi_items(zbi_header_t *zbi, size_t capacity) |
| { |
| int ret = 0; |
| |
| if (args) { |
| ret = append_zbi_item_or_log(zbi, capacity, ZBI_TYPE_CMDLINE, 0, |
| args, args_len + 1); |
| free(args); |
| args = NULL; |
| args_len = 0; |
| } |
| |
| return ret; |
| } |