qdev: allow reusing get/set for legacy property
In some cases, a legacy property does need a special print method but not a special parse method. In this case, we can reuse the get/set from the static (non-legacy) property. If neither parse nor print is needed, though, do not register the legacy property at all. The previous patch ensures that the right fallback will be used. Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
d822979bdf
commit
68ee356941
11
hw/qdev.c
11
hw/qdev.c
@ -550,21 +550,24 @@ static void qdev_set_legacy_property(Object *obj, Visitor *v, void *opaque,
|
|||||||
* Do not use this is new code! Properties added through this interface will
|
* Do not use this is new code! Properties added through this interface will
|
||||||
* be given names and types in the "legacy" namespace.
|
* be given names and types in the "legacy" namespace.
|
||||||
*
|
*
|
||||||
* Legacy properties are always processed as strings. The format of the string
|
* Legacy properties are string versions of other OOM properties. The format
|
||||||
* depends on the property type.
|
* of the string depends on the property type.
|
||||||
*/
|
*/
|
||||||
void qdev_property_add_legacy(DeviceState *dev, Property *prop,
|
void qdev_property_add_legacy(DeviceState *dev, Property *prop,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
gchar *name, *type;
|
gchar *name, *type;
|
||||||
|
|
||||||
|
if (!prop->info->print && !prop->info->parse) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
name = g_strdup_printf("legacy-%s", prop->name);
|
name = g_strdup_printf("legacy-%s", prop->name);
|
||||||
type = g_strdup_printf("legacy<%s>",
|
type = g_strdup_printf("legacy<%s>",
|
||||||
prop->info->legacy_name ?: prop->info->name);
|
prop->info->legacy_name ?: prop->info->name);
|
||||||
|
|
||||||
object_property_add(OBJECT(dev), name, type,
|
object_property_add(OBJECT(dev), name, type,
|
||||||
prop->info->print ? qdev_get_legacy_property : NULL,
|
prop->info->print ? qdev_get_legacy_property : prop->info->get,
|
||||||
prop->info->parse ? qdev_set_legacy_property : NULL,
|
prop->info->parse ? qdev_set_legacy_property : prop->info->set,
|
||||||
NULL,
|
NULL,
|
||||||
prop, errp);
|
prop, errp);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user