QemuOpts: change opt->name|str from (const char *) to (char *)
qemu_opt_del() already assumes that all QemuOpt instances contain malloc'd name and value; but it had to cast away const because opts_start_struct() was doing its own thing and using static storage instead. By using the correct type and malloced strings everywhere, the usage of this struct becomes clearer. Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Leandro Dorileo <l@dorileo.org> Signed-off-by: Chunyan Liu <cyliu@suse.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
e36af94f86
commit
dc8622f2bf
@ -30,8 +30,8 @@
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
struct QemuOpt {
|
||||
const char *name;
|
||||
const char *str;
|
||||
char *name;
|
||||
char *str;
|
||||
|
||||
const QemuOptDesc *desc;
|
||||
union {
|
||||
|
@ -143,8 +143,8 @@ opts_start_struct(Visitor *v, void **obj, const char *kind,
|
||||
if (ov->opts_root->id != NULL) {
|
||||
ov->fake_id_opt = g_malloc0(sizeof *ov->fake_id_opt);
|
||||
|
||||
ov->fake_id_opt->name = "id";
|
||||
ov->fake_id_opt->str = ov->opts_root->id;
|
||||
ov->fake_id_opt->name = g_strdup("id");
|
||||
ov->fake_id_opt->str = g_strdup(ov->opts_root->id);
|
||||
opts_visitor_insert(ov->unprocessed_opts, ov->fake_id_opt);
|
||||
}
|
||||
}
|
||||
@ -177,7 +177,11 @@ opts_end_struct(Visitor *v, Error **errp)
|
||||
}
|
||||
g_hash_table_destroy(ov->unprocessed_opts);
|
||||
ov->unprocessed_opts = NULL;
|
||||
g_free(ov->fake_id_opt);
|
||||
if (ov->fake_id_opt) {
|
||||
g_free(ov->fake_id_opt->name);
|
||||
g_free(ov->fake_id_opt->str);
|
||||
g_free(ov->fake_id_opt);
|
||||
}
|
||||
ov->fake_id_opt = NULL;
|
||||
}
|
||||
|
||||
|
@ -664,8 +664,8 @@ static void qemu_opt_parse(QemuOpt *opt, Error **errp)
|
||||
static void qemu_opt_del(QemuOpt *opt)
|
||||
{
|
||||
QTAILQ_REMOVE(&opt->opts->head, opt, next);
|
||||
g_free((/* !const */ char*)opt->name);
|
||||
g_free((/* !const */ char*)opt->str);
|
||||
g_free(opt->name);
|
||||
g_free(opt->str);
|
||||
g_free(opt);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user