[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 01/23] QemuOpts: split option parser into two functi
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 01/23] QemuOpts: split option parser into two functions. |
Date: |
Mon, 7 Sep 2009 18:06:03 +0200 |
looking for id= and creating a new QemuOpts instance is splitted from
the actual option parser code now, so the parser can be called from
other contexts too.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
qemu-option.c | 46 +++++++++++++++++++++++++++++-----------------
qemu-option.h | 1 +
2 files changed, 30 insertions(+), 17 deletions(-)
diff --git a/qemu-option.c b/qemu-option.c
index 61141e0..d37ffe9 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -709,23 +709,11 @@ int qemu_opts_print(QemuOpts *opts, void *dummy)
return 0;
}
-QemuOpts *qemu_opts_parse(QemuOptsList *list, const char *params, const char
*firstname)
+int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char
*firstname)
{
- char option[128], value[128], *id = NULL;
- QemuOpts *opts;
+ char option[128], value[128];
const char *p,*pe,*pc;
- if (strncmp(params, "id=", 3) == 0) {
- get_opt_value(value, sizeof(value), params+3);
- id = qemu_strdup(value);
- } else if ((p = strstr(params, ",id=")) != NULL) {
- get_opt_value(value, sizeof(value), p+4);
- id = qemu_strdup(value);
- }
- opts = qemu_opts_create(list, id, 1);
- if (opts == NULL)
- return NULL;
-
p = params;
for(;;) {
pe = strchr(p, '=');
@@ -739,7 +727,7 @@ QemuOpts *qemu_opts_parse(QemuOptsList *list, const char
*params, const char *fi
} else {
/* option without value, probably a flag */
p = get_opt_name(option, sizeof(option), p, ',');
- if (strncmp(p, "no", 2) == 0) {
+ if (strncmp(option, "no", 2) == 0) {
memmove(option, option+2, strlen(option+2)+1);
pstrcpy(value, sizeof(value), "off");
} else {
@@ -758,8 +746,7 @@ QemuOpts *qemu_opts_parse(QemuOptsList *list, const char
*params, const char *fi
if (strcmp(option, "id") != 0) {
/* store and parse */
if (-1 == qemu_opt_set(opts, option, value)) {
- qemu_opts_del(opts);
- return NULL;
+ return -1;
}
}
if (*p != ',') {
@@ -767,6 +754,31 @@ QemuOpts *qemu_opts_parse(QemuOptsList *list, const char
*params, const char *fi
}
p++;
}
+ return 0;
+}
+
+QemuOpts *qemu_opts_parse(QemuOptsList *list, const char *params, const char
*firstname)
+{
+ char value[128], *id = NULL;
+ const char *p;
+ QemuOpts *opts;
+
+ if (strncmp(params, "id=", 3) == 0) {
+ get_opt_value(value, sizeof(value), params+3);
+ id = qemu_strdup(value);
+ } else if ((p = strstr(params, ",id=")) != NULL) {
+ get_opt_value(value, sizeof(value), p+4);
+ id = qemu_strdup(value);
+ }
+ opts = qemu_opts_create(list, id, 1);
+ if (opts == NULL)
+ return NULL;
+
+ if (qemu_opts_do_parse(opts, params, firstname) != 0) {
+ qemu_opts_del(opts);
+ return NULL;
+ }
+
return opts;
}
diff --git a/qemu-option.h b/qemu-option.h
index 56c7eac..9e52625 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -114,6 +114,7 @@ int qemu_opts_set(QemuOptsList *list, const char *id,
const char *name, const char *value);
const char *qemu_opts_id(QemuOpts *opts);
void qemu_opts_del(QemuOpts *opts);
+int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char
*firstname);
QemuOpts *qemu_opts_parse(QemuOptsList *list, const char *params, const char
*firstname);
typedef int (*qemu_opts_loopfunc)(QemuOpts *opts, void *opaque);
--
1.6.2.5
- Re: [Qemu-devel] [PATCH 03/23] switch chardev to QemuOpts: infrastructure, null device, (continued)
- [Qemu-devel] [PATCH 02/23] qemu-option.h include protectors, Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 05/23] sockets: add unix_connect_opts, Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 04/23] convert file+pipe chardevs to QemuOpts., Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 07/23] sockets: add unix_*_opts for windows., Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 06/23] sockets: add unix_listen_opts, Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 11/23] convert pty chardev to QemuOpts., Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 14/23] convert braille chardev to QemuOpts., Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 12/23] convert stdio chardev to QemuOpts., Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 10/23] convert unix+tcp chardevs to QemuOpts., Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 01/23] QemuOpts: split option parser into two functions.,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 08/23] sockets: add inet_connect_opts, Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 13/23] convert msmouse chardev to QemuOpts., Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 09/23] sockets: add inet_listen_opts, Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 15/23] convert windows console chardev to QemuOpts., Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 21/23] qdev: add parser for chardev properties, Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 17/23] convert vc chardev to QemuOpts., Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 23/23] move mux focus field from CharDriverState to MuxDriver, Gerd Hoffmann, 2009/09/07
- [Qemu-devel] [PATCH 22/23] monitor: fix muxing, Gerd Hoffmann, 2009/09/07