mirror of https://github.com/proxmox/mirror_qemu
object: add object_property_set_default
Add a default value to ObjectProperty and an implementation of ObjectPropertyInit that uses it. This will make it easier to show the default in help messages. Also provide convenience functions object_property_set_default_{bool, str, int, uint}(). Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20200110153039.1379601-11-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>master
parent
164c374b75
commit
0e76ed0a5d
|
@ -378,6 +378,7 @@ struct ObjectProperty
|
||||||
ObjectPropertyRelease *release;
|
ObjectPropertyRelease *release;
|
||||||
ObjectPropertyInit *init;
|
ObjectPropertyInit *init;
|
||||||
void *opaque;
|
void *opaque;
|
||||||
|
QObject *defval;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1055,6 +1056,42 @@ ObjectProperty *object_class_property_add(ObjectClass *klass, const char *name,
|
||||||
ObjectPropertyRelease *release,
|
ObjectPropertyRelease *release,
|
||||||
void *opaque, Error **errp);
|
void *opaque, Error **errp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* object_property_set_default_bool:
|
||||||
|
* @prop: the property to set
|
||||||
|
* @value: the value to be written to the property
|
||||||
|
*
|
||||||
|
* Set the property default value.
|
||||||
|
*/
|
||||||
|
void object_property_set_default_bool(ObjectProperty *prop, bool value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* object_property_set_default_str:
|
||||||
|
* @prop: the property to set
|
||||||
|
* @value: the value to be written to the property
|
||||||
|
*
|
||||||
|
* Set the property default value.
|
||||||
|
*/
|
||||||
|
void object_property_set_default_str(ObjectProperty *prop, const char *value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* object_property_set_default_int:
|
||||||
|
* @prop: the property to set
|
||||||
|
* @value: the value to be written to the property
|
||||||
|
*
|
||||||
|
* Set the property default value.
|
||||||
|
*/
|
||||||
|
void object_property_set_default_int(ObjectProperty *prop, int64_t value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* object_property_set_default_uint:
|
||||||
|
* @prop: the property to set
|
||||||
|
* @value: the value to be written to the property
|
||||||
|
*
|
||||||
|
* Set the property default value.
|
||||||
|
*/
|
||||||
|
void object_property_set_default_uint(ObjectProperty *prop, uint64_t value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* object_property_find:
|
* object_property_find:
|
||||||
* @obj: the object
|
* @obj: the object
|
||||||
|
|
48
qom/object.c
48
qom/object.c
|
@ -19,8 +19,10 @@
|
||||||
#include "qapi/visitor.h"
|
#include "qapi/visitor.h"
|
||||||
#include "qapi/string-input-visitor.h"
|
#include "qapi/string-input-visitor.h"
|
||||||
#include "qapi/string-output-visitor.h"
|
#include "qapi/string-output-visitor.h"
|
||||||
|
#include "qapi/qobject-input-visitor.h"
|
||||||
#include "qapi/qapi-builtin-visit.h"
|
#include "qapi/qapi-builtin-visit.h"
|
||||||
#include "qapi/qmp/qerror.h"
|
#include "qapi/qmp/qerror.h"
|
||||||
|
#include "qapi/qmp/qjson.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
|
||||||
/* TODO: replace QObject with a simpler visitor to avoid a dependency
|
/* TODO: replace QObject with a simpler visitor to avoid a dependency
|
||||||
|
@ -268,6 +270,10 @@ static void object_property_free(gpointer data)
|
||||||
{
|
{
|
||||||
ObjectProperty *prop = data;
|
ObjectProperty *prop = data;
|
||||||
|
|
||||||
|
if (prop->defval) {
|
||||||
|
qobject_unref(prop->defval);
|
||||||
|
prop->defval = NULL;
|
||||||
|
}
|
||||||
g_free(prop->name);
|
g_free(prop->name);
|
||||||
g_free(prop->type);
|
g_free(prop->type);
|
||||||
g_free(prop->description);
|
g_free(prop->description);
|
||||||
|
@ -1438,6 +1444,45 @@ int64_t object_property_get_int(Object *obj, const char *name,
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void object_property_init_defval(Object *obj, ObjectProperty *prop)
|
||||||
|
{
|
||||||
|
Visitor *v = qobject_input_visitor_new(prop->defval);
|
||||||
|
|
||||||
|
assert(prop->set != NULL);
|
||||||
|
prop->set(obj, v, prop->name, prop->opaque, &error_abort);
|
||||||
|
|
||||||
|
visit_free(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void object_property_set_default(ObjectProperty *prop, QObject *defval)
|
||||||
|
{
|
||||||
|
assert(!prop->defval);
|
||||||
|
assert(!prop->init);
|
||||||
|
|
||||||
|
prop->defval = defval;
|
||||||
|
prop->init = object_property_init_defval;
|
||||||
|
}
|
||||||
|
|
||||||
|
void object_property_set_default_bool(ObjectProperty *prop, bool value)
|
||||||
|
{
|
||||||
|
object_property_set_default(prop, QOBJECT(qbool_from_bool(value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void object_property_set_default_str(ObjectProperty *prop, const char *value)
|
||||||
|
{
|
||||||
|
object_property_set_default(prop, QOBJECT(qstring_from_str(value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void object_property_set_default_int(ObjectProperty *prop, int64_t value)
|
||||||
|
{
|
||||||
|
object_property_set_default(prop, QOBJECT(qnum_from_int(value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void object_property_set_default_uint(ObjectProperty *prop, uint64_t value)
|
||||||
|
{
|
||||||
|
object_property_set_default(prop, QOBJECT(qnum_from_uint(value)));
|
||||||
|
}
|
||||||
|
|
||||||
void object_property_set_uint(Object *obj, uint64_t value,
|
void object_property_set_uint(Object *obj, uint64_t value,
|
||||||
const char *name, Error **errp)
|
const char *name, Error **errp)
|
||||||
{
|
{
|
||||||
|
@ -2549,6 +2594,9 @@ void object_property_add_alias(Object *obj, const char *name,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
op->resolve = property_resolve_alias;
|
op->resolve = property_resolve_alias;
|
||||||
|
if (target_prop->defval) {
|
||||||
|
op->defval = qobject_ref(target_prop->defval);
|
||||||
|
}
|
||||||
|
|
||||||
object_property_set_description(obj, op->name,
|
object_property_set_description(obj, op->name,
|
||||||
target_prop->description,
|
target_prop->description,
|
||||||
|
|
Loading…
Reference in New Issue