fw_cfg: add "modify" functions for all types
This allows to alter the contents of an already added item. Signed-off-by: Sergio Lopez <slp@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
parent
703a548aa9
commit
e5f6aa319f
@ -690,6 +690,15 @@ void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value)
|
|||||||
fw_cfg_add_bytes(s, key, g_memdup(value, sz), sz);
|
fw_cfg_add_bytes(s, key, g_memdup(value, sz), sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fw_cfg_modify_string(FWCfgState *s, uint16_t key, const char *value)
|
||||||
|
{
|
||||||
|
size_t sz = strlen(value) + 1;
|
||||||
|
char *old;
|
||||||
|
|
||||||
|
old = fw_cfg_modify_bytes_read(s, key, g_memdup(value, sz), sz);
|
||||||
|
g_free(old);
|
||||||
|
}
|
||||||
|
|
||||||
void fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value)
|
void fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value)
|
||||||
{
|
{
|
||||||
uint16_t *copy;
|
uint16_t *copy;
|
||||||
@ -720,6 +729,16 @@ void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value)
|
|||||||
fw_cfg_add_bytes(s, key, copy, sizeof(value));
|
fw_cfg_add_bytes(s, key, copy, sizeof(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fw_cfg_modify_i32(FWCfgState *s, uint16_t key, uint32_t value)
|
||||||
|
{
|
||||||
|
uint32_t *copy, *old;
|
||||||
|
|
||||||
|
copy = g_malloc(sizeof(value));
|
||||||
|
*copy = cpu_to_le32(value);
|
||||||
|
old = fw_cfg_modify_bytes_read(s, key, copy, sizeof(value));
|
||||||
|
g_free(old);
|
||||||
|
}
|
||||||
|
|
||||||
void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value)
|
void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value)
|
||||||
{
|
{
|
||||||
uint64_t *copy;
|
uint64_t *copy;
|
||||||
@ -730,6 +749,16 @@ void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value)
|
|||||||
fw_cfg_add_bytes(s, key, copy, sizeof(value));
|
fw_cfg_add_bytes(s, key, copy, sizeof(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fw_cfg_modify_i64(FWCfgState *s, uint16_t key, uint64_t value)
|
||||||
|
{
|
||||||
|
uint64_t *copy, *old;
|
||||||
|
|
||||||
|
copy = g_malloc(sizeof(value));
|
||||||
|
*copy = cpu_to_le64(value);
|
||||||
|
old = fw_cfg_modify_bytes_read(s, key, copy, sizeof(value));
|
||||||
|
g_free(old);
|
||||||
|
}
|
||||||
|
|
||||||
void fw_cfg_set_order_override(FWCfgState *s, int order)
|
void fw_cfg_set_order_override(FWCfgState *s, int order)
|
||||||
{
|
{
|
||||||
assert(s->fw_cfg_order_override == 0);
|
assert(s->fw_cfg_order_override == 0);
|
||||||
|
@ -98,6 +98,20 @@ void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len);
|
|||||||
*/
|
*/
|
||||||
void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value);
|
void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fw_cfg_modify_string:
|
||||||
|
* @s: fw_cfg device being modified
|
||||||
|
* @key: selector key value for new fw_cfg item
|
||||||
|
* @value: NUL-terminated ascii string
|
||||||
|
*
|
||||||
|
* Replace the fw_cfg item available by selecting the given key. The new
|
||||||
|
* data will consist of a dynamically allocated copy of the provided string,
|
||||||
|
* including its NUL terminator. The data being replaced, assumed to have
|
||||||
|
* been dynamically allocated during an earlier call to either
|
||||||
|
* fw_cfg_add_string() or fw_cfg_modify_string(), is freed before returning.
|
||||||
|
*/
|
||||||
|
void fw_cfg_modify_string(FWCfgState *s, uint16_t key, const char *value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fw_cfg_add_i16:
|
* fw_cfg_add_i16:
|
||||||
* @s: fw_cfg device being modified
|
* @s: fw_cfg device being modified
|
||||||
@ -136,6 +150,20 @@ void fw_cfg_modify_i16(FWCfgState *s, uint16_t key, uint16_t value);
|
|||||||
*/
|
*/
|
||||||
void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value);
|
void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fw_cfg_modify_i32:
|
||||||
|
* @s: fw_cfg device being modified
|
||||||
|
* @key: selector key value for new fw_cfg item
|
||||||
|
* @value: 32-bit integer
|
||||||
|
*
|
||||||
|
* Replace the fw_cfg item available by selecting the given key. The new
|
||||||
|
* data will consist of a dynamically allocated copy of the given 32-bit
|
||||||
|
* value, converted to little-endian representation. The data being replaced,
|
||||||
|
* assumed to have been dynamically allocated during an earlier call to
|
||||||
|
* either fw_cfg_add_i32() or fw_cfg_modify_i32(), is freed before returning.
|
||||||
|
*/
|
||||||
|
void fw_cfg_modify_i32(FWCfgState *s, uint16_t key, uint32_t value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fw_cfg_add_i64:
|
* fw_cfg_add_i64:
|
||||||
* @s: fw_cfg device being modified
|
* @s: fw_cfg device being modified
|
||||||
@ -148,6 +176,20 @@ void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value);
|
|||||||
*/
|
*/
|
||||||
void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value);
|
void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fw_cfg_modify_i64:
|
||||||
|
* @s: fw_cfg device being modified
|
||||||
|
* @key: selector key value for new fw_cfg item
|
||||||
|
* @value: 64-bit integer
|
||||||
|
*
|
||||||
|
* Replace the fw_cfg item available by selecting the given key. The new
|
||||||
|
* data will consist of a dynamically allocated copy of the given 64-bit
|
||||||
|
* value, converted to little-endian representation. The data being replaced,
|
||||||
|
* assumed to have been dynamically allocated during an earlier call to
|
||||||
|
* either fw_cfg_add_i64() or fw_cfg_modify_i64(), is freed before returning.
|
||||||
|
*/
|
||||||
|
void fw_cfg_modify_i64(FWCfgState *s, uint16_t key, uint64_t value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fw_cfg_add_file:
|
* fw_cfg_add_file:
|
||||||
* @s: fw_cfg device being modified
|
* @s: fw_cfg device being modified
|
||||||
|
Loading…
Reference in New Issue
Block a user