diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2009-09-10 10:58:50 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-09-11 10:19:49 -0500 |
commit | 7591c5c19951def341139c3874bdc7289f9813d1 (patch) | |
tree | 74200b7e910ead8627262b22c39bbf5faf1c212b /qemu-char.c | |
parent | 6ea314d91439741e95772dfbab98b4135e04bebb (diff) | |
download | qemu-7591c5c19951def341139c3874bdc7289f9813d1.zip qemu-7591c5c19951def341139c3874bdc7289f9813d1.tar.gz qemu-7591c5c19951def341139c3874bdc7289f9813d1.tar.bz2 |
convert mux chardev to QemuOpts.
new cmd line syntax: you can add mux=1 to any chardev to enable muxing,
then attach it multiple times, like this:
-chardev pty,name=mux,mux=on
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'qemu-char.c')
-rw-r--r-- | qemu-char.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/qemu-char.c b/qemu-char.c index 3240e13..a7e6cf7 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -2230,6 +2230,11 @@ static QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename) if (NULL == opts) return NULL; + if (strstart(filename, "mon:", &p)) { + filename = p; + qemu_opt_set(opts, "mux", "on"); + } + if (strcmp(filename, "null") == 0 || strcmp(filename, "pty") == 0 || strcmp(filename, "msmouse") == 0 || @@ -2378,8 +2383,18 @@ CharDriverState *qemu_chr_open_opts(QemuOpts *opts, if (!chr->filename) chr->filename = qemu_strdup(qemu_opt_get(opts, "backend")); chr->init = init; - chr->label = qemu_strdup(qemu_opts_id(opts)); TAILQ_INSERT_TAIL(&chardevs, chr, next); + + if (qemu_opt_get_bool(opts, "mux", 0)) { + CharDriverState *base = chr; + int len = strlen(qemu_opts_id(opts)) + 6; + base->label = qemu_malloc(len); + snprintf(base->label, len, "%s-base", qemu_opts_id(opts)); + chr = qemu_chr_open_mux(base); + chr->filename = base->filename; + TAILQ_INSERT_TAIL(&chardevs, chr, next); + } + chr->label = qemu_strdup(qemu_opts_id(opts)); return chr; } @@ -2391,21 +2406,16 @@ CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*i opts = qemu_chr_parse_compat(label, filename); if (opts) { - return qemu_chr_open_opts(opts, init); + chr = qemu_chr_open_opts(opts, init); + if (qemu_opt_get_bool(opts, "mux", 0)) { + monitor_init(chr, MONITOR_USE_READLINE); + } + return chr; } if (strstart(filename, "udp:", &p)) { chr = qemu_chr_open_udp(p); } else - if (strstart(filename, "mon:", &p)) { - chr = qemu_chr_open(label, p, NULL); - if (chr) { - chr = qemu_chr_open_mux(chr); - monitor_init(chr, MONITOR_USE_READLINE); - } else { - printf("Unable to open driver: %s\n", p); - } - } else { chr = NULL; } |