aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--devices.c15
-rw-r--r--monitor.c6
-rw-r--r--qemu-gtk.c30
3 files changed, 40 insertions, 11 deletions
diff --git a/devices.c b/devices.c
index 872afdd..6fbde73 100644
--- a/devices.c
+++ b/devices.c
@@ -361,10 +361,17 @@ void devices_parse_info_usbhost(struct qemu_window *win, char *str)
" %31[^:]: USB device %x:%x, %63[^\r\n]%n",
device, speed, class, &vendor, &product, name, &len);
if (rc != 6) {
- /* parse error, try to skip line */
- if (0 == (len = skip_line(str, pos)))
- break;
- continue;
+ strcpy(name, "no name");
+ rc = sscanf(str+pos,
+ " Device %15[^,], speed %15s Mb/s\n"
+ " %31[^:]: USB device %x:%x%n",
+ device, speed, class, &vendor, &product, &len);
+ if (rc != 5) {
+ /* parse error, try to skip line */
+ if (0 == (len = skip_line(str, pos)))
+ break;
+ continue;
+ }
}
while (str[pos+len] == '\r' || str[pos+len] == '\n')
len++;
diff --git a/monitor.c b/monitor.c
index 4ddfd1b..cc640ac 100644
--- a/monitor.c
+++ b/monitor.c
@@ -275,12 +275,6 @@ int monitor_connect(struct qemu_window *win, char *dest)
char buf[256];
int fd;
- if (!strchr(dest,':') && !strchr(dest,'/')) {
- /* just a name */
- snprintf(buf, sizeof(buf), "unix:%s/.qemu-gtk/%s", getenv("HOME"), dest);
- dest = buf;
- }
-
fd = conn_init(&win->monitor, "monitor", dest);
if (-1 == fd)
return -1;
diff --git a/qemu-gtk.c b/qemu-gtk.c
index 073d572..a092c3c 100644
--- a/qemu-gtk.c
+++ b/qemu-gtk.c
@@ -957,10 +957,37 @@ static void usage(FILE *fp)
APPNAME);
}
+static void vm_lookup(char *mon, int len, char *arg)
+{
+ GError *err = NULL;
+ char *ptr;
+
+ /* monitor connection specified? */
+ if (strchr(arg,':') || strchr(arg,'/')) {
+ snprintf(mon, len, "%s", arg);
+ goto done;
+ }
+
+ /* listed in config file? */
+ ptr = g_key_file_get_string(config, "vm", arg, &err);
+ if (ptr) {
+ snprintf(mon, len, "%s", ptr);
+ goto done;
+ }
+
+ /* try socket created by qemu-run script */
+ snprintf(mon, len, "unix:%s/.qemu-gtk/%s", getenv("HOME"), arg);
+
+done:
+ if (debug)
+ fprintf(stderr, "monitor: %s\n", mon);
+}
+
int
main(int argc, char *argv[])
{
struct qemu_window *win;
+ char mon[256];
int monitor_tab = 0;
int sercon_tab = 0;
int quit_on_shutdown = 1;
@@ -1002,7 +1029,8 @@ main(int argc, char *argv[])
/* main window */
win = qemu_create_window();
- if (-1 == monitor_connect(win, argv[optind])) {
+ vm_lookup(mon, sizeof(mon), argv[optind]);
+ if (-1 == monitor_connect(win, mon)) {
exit(1);
}
win->quit_on_shutdown = quit_on_shutdown;