Message ID | 1308927289-10474-2-git-send-email-stefano.stabellini@eu.citrix.com |
---|---|
State | New |
Headers | show |
On 24 June 2011 15:54, <stefano.stabellini@eu.citrix.com> wrote: > + if (!in->c.ds) { > + char *vfb = xenstore_read_str(NULL, "device/vfb"); > + if (vfb == NULL) { > + /* there is no vfb, run vkbd on its own */ > + in->c.ds = get_displaystate(); > + } else { > + free(vfb); xenstore_read_str() returns a pointer from a qemu_strdup() so strictly this should be a qemu_free(), I think? -- PMM
On Fri, 24 Jun 2011, Peter Maydell wrote: > On 24 June 2011 15:54, <stefano.stabellini@eu.citrix.com> wrote: > > > + if (!in->c.ds) { > > + char *vfb = xenstore_read_str(NULL, "device/vfb"); > > + if (vfb == NULL) { > > + /* there is no vfb, run vkbd on its own */ > > + in->c.ds = get_displaystate(); > > + } else { > > + free(vfb); > > xenstore_read_str() returns a pointer from a qemu_strdup() > so strictly this should be a qemu_free(), I think? Yes, it should be, I'll send a second version of the patch.
diff --git a/hw/xenfb.c b/hw/xenfb.c index a3301ac..13b9b1b 100644 --- a/hw/xenfb.c +++ b/hw/xenfb.c @@ -347,13 +347,6 @@ static void xenfb_mouse_event(void *opaque, static int input_init(struct XenDevice *xendev) { - struct XenInput *in = container_of(xendev, struct XenInput, c.xendev); - - if (!in->c.ds) { - xen_be_printf(xendev, 1, "ds not set (yet)\n"); - return -1; - } - xenstore_write_be_int(xendev, "feature-abs-pointer", 1); return 0; } @@ -363,6 +356,18 @@ static int input_initialise(struct XenDevice *xendev) struct XenInput *in = container_of(xendev, struct XenInput, c.xendev); int rc; + if (!in->c.ds) { + char *vfb = xenstore_read_str(NULL, "device/vfb"); + if (vfb == NULL) { + /* there is no vfb, run vkbd on its own */ + in->c.ds = get_displaystate(); + } else { + free(vfb); + xen_be_printf(xendev, 1, "ds not set (yet)\n"); + return -1; + } + } + rc = common_bind(&in->c); if (rc != 0) return rc; diff --git a/xen-all.c b/xen-all.c index 93fa2ee..6099bff 100644 --- a/xen-all.c +++ b/xen-all.c @@ -868,6 +868,7 @@ int xen_hvm_init(void) exit(1); } xen_be_register("console", &xen_console_ops); + xen_be_register("vkbd", &xen_kbdmouse_ops); xen_be_register("qdisk", &xen_blkdev_ops); return 0;