aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorChunyan Liu <cyliu@suse.com>2014-06-05 17:21:12 +0800
committerStefan Hajnoczi <stefanha@redhat.com>2014-06-16 17:23:21 +0800
commit98d896d978eef0fd6ff8d93a1ccea34e00b97f8c (patch)
tree1c2a049cb1aebe3fe24aec7494dde091351aac6d /util
parentc282e1fdf7ec9659c7f320123be397477a359d01 (diff)
QemuOpts: cleanup tmp 'allocated' member from QemuOptsList
Now only qemu_opts_append uses 'allocated' to indicate free memory. For this function only, we can also let result list's (const char *) members point to input list's members, only if the input list has longer lifetime than result list. In current code, that is true. So, we can remove the 'allocated' member from QemuOptsList definition to keep code clean. Signed-off-by: Chunyan Liu <cyliu@suse.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'util')
-rw-r--r--util/qemu-option.c27
1 files changed, 3 insertions, 24 deletions
diff --git a/util/qemu-option.c b/util/qemu-option.c
index 8ac8111ea8..836055a4d2 100644
--- a/util/qemu-option.c
+++ b/util/qemu-option.c
@@ -1077,26 +1077,13 @@ static size_t count_opts_list(QemuOptsList *list)
void qemu_opts_free(QemuOptsList *list)
{
- /* List members point to new malloced space and need to be freed.
- * FIXME:
- * Introduced for QEMUOptionParamter->QemuOpts conversion.
- * Will remove after all drivers switch to QemuOpts.
- */
- if (list && list->allocated) {
- QemuOptDesc *desc = list->desc;
- while (desc && desc->name) {
- g_free((char *)desc->name);
- g_free((char *)desc->help);
- g_free((char *)desc->def_value_str);
- desc++;
- }
- }
-
g_free(list);
}
/* Realloc dst option list and append options from an option list (list)
* to it. dst could be NULL or a malloced list.
+ * The lifetime of dst must be shorter than the input list because the
+ * QemuOptDesc->name, ->help, and ->def_value_str strings are shared.
*/
QemuOptsList *qemu_opts_append(QemuOptsList *dst,
QemuOptsList *list)
@@ -1125,24 +1112,16 @@ QemuOptsList *qemu_opts_append(QemuOptsList *dst,
dst->name = NULL;
dst->implied_opt_name = NULL;
QTAILQ_INIT(&dst->head);
- dst->allocated = true;
dst->merge_lists = false;
}
dst->desc[num_dst_opts].name = NULL;
- /* (const char *) members of result dst are malloced, need free. */
- assert(dst->allocated);
/* append list->desc to dst->desc */
if (list) {
desc = list->desc;
while (desc && desc->name) {
if (find_desc_by_name(dst->desc, desc->name) == NULL) {
- dst->desc[num_dst_opts].name = g_strdup(desc->name);
- dst->desc[num_dst_opts].type = desc->type;
- dst->desc[num_dst_opts].help = g_strdup(desc->help);
- dst->desc[num_dst_opts].def_value_str =
- g_strdup(desc->def_value_str);
- num_dst_opts++;
+ dst->desc[num_dst_opts++] = *desc;
dst->desc[num_dst_opts].name = NULL;
}
desc++;