mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
qom: Add check() argument to object_property_add_link()
There are currently three types of object_property_add_link() callers: 1. The link property may be set at any time. 2. The link property of a DeviceState instance may only be set before realize. 3. The link property may never be set, it is read-only. Something similar can already be achieved with object_property_add_str()'s set() argument. Follow its example and add a check() argument to object_property_add_link(). Also provide default check() functions for case #1 and #2. Case #3 is covered by passing a NULL function pointer. Cc: Peter Crosthwaite <peter.crosthwaite@petalogix.com> Cc: Alexander Graf <agraf@suse.de> Cc: Anthony Liguori <aliguori@amazon.com> Cc: "Michael S. Tsirkin" <mst@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> [AF: Tweaked documentation comment] Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
9561fda8d9
commit
39f72ef94b
13 changed files with 80 additions and 4 deletions
|
@ -1072,12 +1072,23 @@ typedef enum {
|
|||
OBJ_PROP_LINK_UNREF_ON_RELEASE = 0x1,
|
||||
} ObjectPropertyLinkFlags;
|
||||
|
||||
/**
|
||||
* object_property_allow_set_link:
|
||||
*
|
||||
* The default implementation of the object_property_add_link() check()
|
||||
* callback function. It allows the link property to be set and never returns
|
||||
* an error.
|
||||
*/
|
||||
void object_property_allow_set_link(Object *, const char *,
|
||||
Object *, Error **);
|
||||
|
||||
/**
|
||||
* object_property_add_link:
|
||||
* @obj: the object to add a property to
|
||||
* @name: the name of the property
|
||||
* @type: the qobj type of the link
|
||||
* @child: a pointer to where the link object reference is stored
|
||||
* @check: callback to veto setting or NULL if the property is read-only
|
||||
* @flags: additional options for the link
|
||||
* @errp: if an error occurs, a pointer to an area to store the area
|
||||
*
|
||||
|
@ -1087,6 +1098,11 @@ typedef enum {
|
|||
*
|
||||
* Links form the graph in the object model.
|
||||
*
|
||||
* The <code>@check()</code> callback is invoked when
|
||||
* object_property_set_link() is called and can raise an error to prevent the
|
||||
* link being set. If <code>@check</code> is NULL, the property is read-only
|
||||
* and cannot be set.
|
||||
*
|
||||
* Ownership of the pointer that @child points to is transferred to the
|
||||
* link property. The reference count for <code>*@child</code> is
|
||||
* managed by the property from after the function returns till the
|
||||
|
@ -1096,6 +1112,8 @@ typedef enum {
|
|||
*/
|
||||
void object_property_add_link(Object *obj, const char *name,
|
||||
const char *type, Object **child,
|
||||
void (*check)(Object *obj, const char *name,
|
||||
Object *val, Error **errp),
|
||||
ObjectPropertyLinkFlags flags,
|
||||
Error **errp);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue