case OPT_STRING:
if (value != NULL) {
- list->value.s = qemu_strdup(value);
+ list->value.s = g_strdup(value);
} else {
fprintf(stderr, "Option '%s' needs a parameter\n", name);
return -1;
while (cur && cur->name) {
if (cur->type == OPT_STRING) {
- qemu_free(cur->value.s);
+ g_free(cur->value.s);
}
cur++;
}
- qemu_free(list);
+ g_free(list);
}
/*
num_options += count_option_parameters(list);
- dest = qemu_realloc(dest, (num_options + 1) * sizeof(QEMUOptionParameter));
+ dest = g_realloc(dest, (num_options + 1) * sizeof(QEMUOptionParameter));
dest[num_dest_options].name = NULL;
while (list && list->name) {
/*
* Parses a parameter string (param) into an option list (dest).
*
- * list is the templace is. If dest is NULL, a new copy of list is created for
- * it. If list is NULL, this function fails.
+ * list is the template option list. If dest is NULL, a new copy of list is
+ * created. If list is NULL, this function fails.
*
* A parameter string consists of one or more parameters, separated by commas.
* Each parameter consists of its name and possibly of a value. In the latter
char value[256];
char *param_delim, *value_delim;
char next_delim;
- size_t num_options;
if (list == NULL) {
return NULL;
}
if (dest == NULL) {
- // Count valid options
- num_options = count_option_parameters(list);
-
- // Create a copy of the option list to fill in values
- dest = qemu_mallocz((num_options + 1) * sizeof(QEMUOptionParameter));
- allocated = dest;
- memcpy(dest, list, (num_options + 1) * sizeof(QEMUOptionParameter));
+ dest = allocated = append_option_parameters(NULL, list);
}
while (*param) {
static void qemu_opt_del(QemuOpt *opt)
{
QTAILQ_REMOVE(&opt->opts->head, opt, next);
- qemu_free((/* !const */ char*)opt->name);
- qemu_free((/* !const */ char*)opt->str);
- qemu_free(opt);
+ g_free((/* !const */ char*)opt->name);
+ g_free((/* !const */ char*)opt->str);
+ g_free(opt);
}
int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
}
}
- opt = qemu_mallocz(sizeof(*opt));
- opt->name = qemu_strdup(name);
+ opt = g_malloc0(sizeof(*opt));
+ opt->name = g_strdup(name);
opt->opts = opts;
QTAILQ_INSERT_TAIL(&opts->head, opt, next);
if (desc[i].name != NULL) {
opt->desc = desc+i;
}
if (value) {
- opt->str = qemu_strdup(value);
+ opt->str = g_strdup(value);
}
if (qemu_opt_parse(opt) < 0) {
qemu_opt_del(opt);
}
}
}
- opts = qemu_mallocz(sizeof(*opts));
+ opts = g_malloc0(sizeof(*opts));
if (id) {
- opts->id = qemu_strdup(id);
+ opts->id = g_strdup(id);
}
opts->list = list;
loc_save(&opts->loc);
return opts;
}
+void qemu_opts_reset(QemuOptsList *list)
+{
+ QemuOpts *opts, *next_opts;
+
+ QTAILQ_FOREACH_SAFE(opts, &list->head, next, next_opts) {
+ qemu_opts_del(opts);
+ }
+}
+
+void qemu_opts_loc_restore(QemuOpts *opts)
+{
+ loc_restore(&opts->loc);
+}
+
int qemu_opts_set(QemuOptsList *list, const char *id,
const char *name, const char *value)
{
qemu_opt_del(opt);
}
QTAILQ_REMOVE(&opts->list->head, opts, next);
- qemu_free(opts->id);
- qemu_free(opts);
+ g_free(opts->id);
+ g_free(opts);
}
int qemu_opts_print(QemuOpts *opts, void *dummy)