machine: Set MachineClass::name automatically

Now all TYPE_MACHINE subclasses use MACHINE_TYPE_NAME to generate the
class name. So instead of requiring each subclass to set
MachineClass::name manually, we can now set it automatically at the
TYPE_MACHINE class_base_init() function.

Backports commit 98cec76a7076c4a38e16f1a9de170a7942b3be54 from qemu
This commit is contained in:
Eduardo Habkost 2018-03-11 14:37:36 -04:00 committed by Lioncash
parent 0261df973b
commit 46e1c5482b
No known key found for this signature in database
GPG Key ID: 4E3C3CC1031BA9C7
6 changed files with 11 additions and 11 deletions

View File

@ -50,8 +50,7 @@ typedef struct {
bool secure;
} VirtMachineState;
#define VIRT_MACHINE_NAME "virt"
#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME(VIRT_MACHINE_NAME)
#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME("virt")
#define VIRT_MACHINE(uc, obj) \
OBJECT_CHECK((uc), VirtMachineState, (obj), TYPE_VIRT_MACHINE)
#define VIRT_MACHINE_GET_CLASS(uc, obj) \
@ -121,7 +120,6 @@ static void virt_class_init(struct uc_struct *uc, ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(uc, oc);
mc->name = VIRT_MACHINE_NAME;
mc->init = machvirt_init;
mc->max_cpus = 8;
mc->is_default = 1;

View File

@ -15,11 +15,14 @@
#include "qapi/error.h"
#include "qemu/cutils.h"
static void machine_class_base_init(ObjectClass *oc, void *data)
static void machine_class_base_init(struct uc_struct *uc, ObjectClass *oc, void *data)
{
if (!object_class_is_abstract(oc)) {
MachineClass *mc = MACHINE_CLASS(uc, oc);
const char *cname = object_class_get_name(oc);
assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX));
mc->name = g_strndup(cname,
strlen(cname) - strlen(TYPE_MACHINE_SUFFIX));
}
}

View File

@ -271,7 +271,7 @@ static void device_finalize(struct uc_struct *uc, Object *obj, void *opaque)
{
}
static void device_class_base_init(ObjectClass *class, void *data)
static void device_class_base_init(struct uc_struct *uc, ObjectClass *class, void *data)
{
}

View File

@ -489,8 +489,8 @@ struct TypeInfo
void *class_data;
void (*class_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
void (*class_base_init)(ObjectClass *klass, void *data);
void (*class_finalize)(ObjectClass *klass, void *data);
void (*class_base_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
void (*class_finalize)(struct uc_struct *uc, ObjectClass *klass, void *data);
bool abstract;

View File

@ -48,8 +48,8 @@ struct TypeImpl
void *instance_userdata;
void (*class_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
void (*class_base_init)(ObjectClass *klass, void *data);
void (*class_finalize)(ObjectClass *klass, void *data);
void (*class_base_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
void (*class_finalize)(struct uc_struct *uc, ObjectClass *klass, void *data);
void *class_data;
@ -320,7 +320,7 @@ static void type_initialize(struct uc_struct *uc, TypeImpl *ti)
while (parent) {
if (parent->class_base_init) {
parent->class_base_init(ti->class, ti->class_data);
parent->class_base_init(uc, ti->class, ti->class_data);
}
parent = type_get_parent(uc, parent);
}

View File

@ -182,7 +182,6 @@ static void machine_class_init(struct uc_struct *uc, ObjectClass *oc, void *data
MachineClass *mc = MACHINE_CLASS(uc, oc);
QEMUMachine *qm = data;
mc->name = qm->name;
mc->init = qm->init;
mc->max_cpus = qm->max_cpus;
mc->is_default = qm->is_default;