qom: enforce readonly nature of link's check callback

link's check callback is supposed to verify/permit setting it,
however currently nothing restricts it from misusing it
and modifying target object from within.
Make sure that readonly semantics are checked by compiler
to prevent callback's misuse.

Backports commit 8f5d58ef2c92d7b82d9a6eeefd7c8854a183ba4a from qemu
This commit is contained in:
Igor Mammedov 2018-03-03 22:17:13 -05:00 committed by Lioncash
parent d0a70720a3
commit fe4152c6a5
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7
2 changed files with 7 additions and 7 deletions

View file

@ -651,7 +651,7 @@ ObjectClass *object_get_class(Object *obj);
*
* Returns: The QOM typename of @obj.
*/
const char *object_get_typename(Object *obj);
const char *object_get_typename(const Object *obj);
/**
* type_register_static:
@ -1165,7 +1165,7 @@ typedef enum {
* callback function. It allows the link property to be set and never returns
* an error.
*/
void object_property_allow_set_link(Object *, const char *,
void object_property_allow_set_link(const Object *, const char *,
Object *, Error **);
/**
@ -1198,7 +1198,7 @@ void object_property_allow_set_link(Object *, const char *,
*/
void object_property_add_link(struct uc_struct *uc, Object *obj, const char *name,
const char *type, Object **child,
void (*check)(Object *obj, const char *name,
void (*check)(const Object *obj, const char *name,
Object *val, Error **errp),
ObjectPropertyLinkFlags flags,
Error **errp);

View file

@ -616,7 +616,7 @@ out:
return ret;
}
const char *object_get_typename(Object *obj)
const char *object_get_typename(const Object *obj)
{
return obj->class->type->name;
}
@ -1211,7 +1211,7 @@ out:
g_free(type);
}
void object_property_allow_set_link(Object *obj, const char *name,
void object_property_allow_set_link(const Object *obj, const char *name,
Object *val, Error **errp)
{
/* Allow the link to be set, always */
@ -1219,7 +1219,7 @@ void object_property_allow_set_link(Object *obj, const char *name,
typedef struct {
Object **child;
void (*check)(Object *, const char *, Object *, Error **);
void (*check)(const Object *, const char *, Object *, Error **);
ObjectPropertyLinkFlags flags;
} LinkProperty;
@ -1337,7 +1337,7 @@ static void object_release_link_property(struct uc_struct *uc, Object *obj, cons
void object_property_add_link(struct uc_struct *uc, Object *obj, const char *name,
const char *type, Object **child,
void (*check)(Object *, const char *,
void (*check)(const Object *, const char *,
Object *, Error **),
ObjectPropertyLinkFlags flags,
Error **errp)