* [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification
@ 2014-07-31 5:34 Peter Crosthwaite
2014-07-31 5:35 ` [Qemu-devel] [PATCH qom v1 2/2] memory: remove object_property_add_child_array Peter Crosthwaite
2014-07-31 9:38 ` [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification Paolo Bonzini
0 siblings, 2 replies; 4+ messages in thread
From: Peter Crosthwaite @ 2014-07-31 5:34 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, afaerber
If "[*]" is given as the last part of a QOM property name, treat that
as an array property. The added property is given the first available
name, replacing the * with a decimal number counting from 0.
First add with name "foo[*]" will be "foo[0]". Second "foo[1]" and so
on.
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
Suggest by Paolo and first pass discussion on list about the feature
here:
https://lists.nongnu.org/archive/html/qemu-devel/2014-06/msg03794.html
qom/object.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/qom/object.c b/qom/object.c
index 0e8267b..c869e8e 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -739,6 +739,28 @@ object_property_add(Object *obj, const char *name, const char *type,
{
ObjectProperty *prop;
+ if (strlen(name) >= 3 && !strncmp(name + strlen(name) - 3, "[*]", 3)) {
+ int i;
+ ObjectProperty *ret;
+ char *name_no_array = g_strdup(name);
+
+ name_no_array[strlen(name) - 3] = '\0';
+ for (i = 0; ; ++i) {
+ char *full_name = g_strdup_printf("%s[%d]", name_no_array, i);
+ Error *local_err = NULL;
+ ret = object_property_add(obj, full_name, type, get, set,
+ release, opaque, &local_err);
+
+ g_free(full_name);
+ if (!local_err) {
+ break;
+ }
+ error_free(local_err);
+ }
+ g_free(name_no_array);
+ return ret;
+ }
+
QTAILQ_FOREACH(prop, &obj->properties, node) {
if (strcmp(prop->name, name) == 0) {
error_setg(errp, "attempt to add duplicate property '%s'"
--
2.0.1.1.gfbfc394
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH qom v1 2/2] memory: remove object_property_add_child_array
2014-07-31 5:34 [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification Peter Crosthwaite
@ 2014-07-31 5:35 ` Peter Crosthwaite
2014-07-31 9:38 ` Paolo Bonzini
2014-07-31 9:38 ` [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification Paolo Bonzini
1 sibling, 1 reply; 4+ messages in thread
From: Peter Crosthwaite @ 2014-07-31 5:35 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, afaerber
Obsoleted by automatic object_property_add arrayification.
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
memory.c | 30 +++++-------------------------
1 file changed, 5 insertions(+), 25 deletions(-)
diff --git a/memory.c b/memory.c
index 64d7176..5272bf9 100644
--- a/memory.c
+++ b/memory.c
@@ -877,30 +877,6 @@ static char *memory_region_escape_name(const char *name)
return escaped;
}
-static void object_property_add_child_array(Object *owner,
- const char *name,
- Object *child)
-{
- int i;
- char *base_name = memory_region_escape_name(name);
-
- for (i = 0; ; i++) {
- char *full_name = g_strdup_printf("%s[%d]", base_name, i);
- Error *local_err = NULL;
-
- object_property_add_child(owner, full_name, child, &local_err);
- g_free(full_name);
- if (!local_err) {
- break;
- }
-
- error_free(local_err);
- }
-
- g_free(base_name);
-}
-
-
void memory_region_init(MemoryRegion *mr,
Object *owner,
const char *name,
@@ -918,8 +894,12 @@ void memory_region_init(MemoryRegion *mr,
mr->name = g_strdup(name);
if (name) {
- object_property_add_child_array(owner, name, OBJECT(mr));
+ char *escaped_name = memory_region_escape_name(name);
+ char *name_array = g_strdup_printf("%s[*]", escaped_name);
+ object_property_add_child(owner, name_array, OBJECT(mr), &error_abort);
object_unref(OBJECT(mr));
+ g_free(name_array);
+ g_free(escaped_name);
}
}
--
2.0.1.1.gfbfc394
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH qom v1 2/2] memory: remove object_property_add_child_array
2014-07-31 5:35 ` [Qemu-devel] [PATCH qom v1 2/2] memory: remove object_property_add_child_array Peter Crosthwaite
@ 2014-07-31 9:38 ` Paolo Bonzini
0 siblings, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2014-07-31 9:38 UTC (permalink / raw)
To: Peter Crosthwaite, qemu-devel; +Cc: afaerber
Il 31/07/2014 07:35, Peter Crosthwaite ha scritto:
> Obsoleted by automatic object_property_add arrayification.
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
>
> memory.c | 30 +++++-------------------------
> 1 file changed, 5 insertions(+), 25 deletions(-)
>
> diff --git a/memory.c b/memory.c
> index 64d7176..5272bf9 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -877,30 +877,6 @@ static char *memory_region_escape_name(const char *name)
> return escaped;
> }
>
> -static void object_property_add_child_array(Object *owner,
> - const char *name,
> - Object *child)
> -{
> - int i;
> - char *base_name = memory_region_escape_name(name);
> -
> - for (i = 0; ; i++) {
> - char *full_name = g_strdup_printf("%s[%d]", base_name, i);
> - Error *local_err = NULL;
> -
> - object_property_add_child(owner, full_name, child, &local_err);
> - g_free(full_name);
> - if (!local_err) {
> - break;
> - }
> -
> - error_free(local_err);
> - }
> -
> - g_free(base_name);
> -}
> -
> -
> void memory_region_init(MemoryRegion *mr,
> Object *owner,
> const char *name,
> @@ -918,8 +894,12 @@ void memory_region_init(MemoryRegion *mr,
> mr->name = g_strdup(name);
>
> if (name) {
> - object_property_add_child_array(owner, name, OBJECT(mr));
> + char *escaped_name = memory_region_escape_name(name);
> + char *name_array = g_strdup_printf("%s[*]", escaped_name);
> + object_property_add_child(owner, name_array, OBJECT(mr), &error_abort);
> object_unref(OBJECT(mr));
> + g_free(name_array);
> + g_free(escaped_name);
> }
> }
>
>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification
2014-07-31 5:34 [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification Peter Crosthwaite
2014-07-31 5:35 ` [Qemu-devel] [PATCH qom v1 2/2] memory: remove object_property_add_child_array Peter Crosthwaite
@ 2014-07-31 9:38 ` Paolo Bonzini
1 sibling, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2014-07-31 9:38 UTC (permalink / raw)
To: Peter Crosthwaite, qemu-devel; +Cc: afaerber
Il 31/07/2014 07:34, Peter Crosthwaite ha scritto:
> If "[*]" is given as the last part of a QOM property name, treat that
> as an array property. The added property is given the first available
> name, replacing the * with a decimal number counting from 0.
>
> First add with name "foo[*]" will be "foo[0]". Second "foo[1]" and so
> on.
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
> Suggest by Paolo and first pass discussion on list about the feature
> here:
>
> https://lists.nongnu.org/archive/html/qemu-devel/2014-06/msg03794.html
>
> qom/object.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/qom/object.c b/qom/object.c
> index 0e8267b..c869e8e 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -739,6 +739,28 @@ object_property_add(Object *obj, const char *name, const char *type,
> {
> ObjectProperty *prop;
>
> + if (strlen(name) >= 3 && !strncmp(name + strlen(name) - 3, "[*]", 3)) {
Please cache strlen in a variable, and use memcmp(..., "[*]", 4).
strncmp is used often to compare just a prefix, and it's not obvious
that you're doing something else.
Otherwise looks good, thanks!
Paolo
> + int i;
> + ObjectProperty *ret;
> + char *name_no_array = g_strdup(name);
> +
> + name_no_array[strlen(name) - 3] = '\0';
> + for (i = 0; ; ++i) {
> + char *full_name = g_strdup_printf("%s[%d]", name_no_array, i);
> + Error *local_err = NULL;
> + ret = object_property_add(obj, full_name, type, get, set,
> + release, opaque, &local_err);
> +
> + g_free(full_name);
> + if (!local_err) {
> + break;
> + }
> + error_free(local_err);
> + }
> + g_free(name_no_array);
> + return ret;
> + }
> +
> QTAILQ_FOREACH(prop, &obj->properties, node) {
> if (strcmp(prop->name, name) == 0) {
> error_setg(errp, "attempt to add duplicate property '%s'"
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-07-31 9:38 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-31 5:34 [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification Peter Crosthwaite
2014-07-31 5:35 ` [Qemu-devel] [PATCH qom v1 2/2] memory: remove object_property_add_child_array Peter Crosthwaite
2014-07-31 9:38 ` Paolo Bonzini
2014-07-31 9:38 ` [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification Paolo Bonzini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.