diff options
-rw-r--r-- | devices.c | 15 | ||||
-rw-r--r-- | monitor.c | 6 | ||||
-rw-r--r-- | qemu-gtk.c | 30 |
3 files changed, 40 insertions, 11 deletions
@@ -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++; @@ -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; @@ -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; |