ui/spice-app: don't use qemu_chr_open_spice_port directly

Save the parent object's open function pointer in the (new)
VCChardevClass struct instead before overwriting it, so we
can look it up when needed.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20201014121120.13482-3-kraxel@redhat.com
This commit is contained in:
Gerd Hoffmann 2020-10-14 14:11:15 +02:00
parent f88908cf30
commit e220cf8662
1 changed files with 13 additions and 4 deletions

View File

@ -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)