The next few commits will use it to replace object_property_add()'s "automatic arrayification" (commit 3396590). "Automatic arrayification" is a convenience feature for creating a bunch of properties with a common type, accessors and so forth, named in a peculiar way: "foo[0]", "foo[1]", ... It's implemented by making property names ending with "[*]" magical. The magic is uncalled for, as names can be just as well generated separately from adding properties.
The name object_gen_new_property_name() is exceedingly long, but that's how QOM names are. Signed-off-by: Markus Armbruster <arm...@redhat.com> --- include/qom/object.h | 8 ++++++++ qom/object.c | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/qom/object.h b/include/qom/object.h index 89c3092..b5c9201 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -832,6 +832,14 @@ void object_property_del(Object *obj, const char *name, Error **errp); ObjectProperty *object_property_find(Object *obj, const char *name, Error **errp); +/* + * Return a property name that doesn't clash with @obj's existing ones. + * The name is of the form %s[%d], where %s is @stem, and %d counts up + * from zero. + * The caller should free the name. + */ +char *object_gen_new_property_name(Object *obj, const char *stem); + void object_unparent(Object *obj); /** diff --git a/qom/object.c b/qom/object.c index 1812c73..4c46662 100644 --- a/qom/object.c +++ b/qom/object.c @@ -808,6 +808,20 @@ void object_property_del(Object *obj, const char *name, Error **errp) g_free(prop); } +char *object_gen_new_property_name(Object *obj, const char *stem) +{ + int i; + + for (i = 0; ; ++i) { + char *name = g_strdup_printf("%s[%d]", stem, i); + + if (!object_property_find(obj, name, NULL)) { + return name; + } + g_free(name); + } +} + void object_property_get(Object *obj, Visitor *v, const char *name, Error **errp) { -- 1.9.3