|
@@ -44,11 +44,15 @@ static char *sock_path;
|
|
|
struct VCChardev {
|
|
|
SpiceChardev parent;
|
|
|
};
|
|
|
-typedef struct VCChardev VCChardev;
|
|
|
+
|
|
|
+struct VCChardevClass {
|
|
|
+ ChardevClass parent;
|
|
|
+ void (*parent_open)(Chardev *chr, ChardevBackend *backend,
|
|
|
+ bool *be_opened, Error **errp);
|
|
|
+};
|
|
|
|
|
|
#define TYPE_CHARDEV_VC "chardev-vc"
|
|
|
-DECLARE_INSTANCE_CHECKER(VCChardev, VC_CHARDEV,
|
|
|
- TYPE_CHARDEV_VC)
|
|
|
+OBJECT_DECLARE_TYPE(VCChardev, VCChardevClass, CHARDEV_VC)
|
|
|
|
|
|
static ChardevBackend *
|
|
|
chr_spice_backend_new(void)
|
|
@@ -66,6 +70,7 @@ static void vc_chr_open(Chardev *chr,
|
|
|
bool *be_opened,
|
|
|
Error **errp)
|
|
|
{
|
|
|
+ VCChardevClass *vc = CHARDEV_VC_GET_CLASS(chr);
|
|
|
ChardevBackend *be;
|
|
|
const char *fqdn = NULL;
|
|
|
|
|
@@ -80,7 +85,7 @@ static void vc_chr_open(Chardev *chr,
|
|
|
be = chr_spice_backend_new();
|
|
|
be->u.spiceport.data->fqdn = fqdn ?
|
|
|
g_strdup(fqdn) : g_strdup_printf("org.qemu.console.%s", chr->label);
|
|
|
- qemu_chr_open_spice_port(chr, be, be_opened, errp);
|
|
|
+ vc->parent_open(chr, be, be_opened, errp);
|
|
|
qapi_free_ChardevBackend(be);
|
|
|
}
|
|
|
|
|
@@ -91,8 +96,11 @@ static void vc_chr_set_echo(Chardev *chr, bool echo)
|
|
|
|
|
|
static void char_vc_class_init(ObjectClass *oc, void *data)
|
|
|
{
|
|
|
+ VCChardevClass *vc = CHARDEV_VC_CLASS(oc);
|
|
|
ChardevClass *cc = CHARDEV_CLASS(oc);
|
|
|
|
|
|
+ vc->parent_open = cc->open;
|
|
|
+
|
|
|
cc->parse = qemu_chr_parse_vc;
|
|
|
cc->open = vc_chr_open;
|
|
|
cc->chr_set_echo = vc_chr_set_echo;
|
|
@@ -103,6 +111,7 @@ static const TypeInfo char_vc_type_info = {
|
|
|
.parent = TYPE_CHARDEV_SPICEPORT,
|
|
|
.instance_size = sizeof(VCChardev),
|
|
|
.class_init = char_vc_class_init,
|
|
|
+ .class_size = sizeof(VCChardevClass),
|
|
|
};
|
|
|
|
|
|
static void spice_app_atexit(void)
|