Let's factor out the code to format a help string for a property. We are going to reuse it in qdev next, which will bring some consistency.
Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- include/qom/object.h | 14 ++++++++++++++ qom/object_interfaces.c | 39 +++++++++++++++++++++++---------------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index aa2cf1ca75..adbccb7705 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -1834,4 +1834,18 @@ Object *container_get(Object *root, const char *path); * Returns the instance_size of the given @typename. */ size_t object_type_get_instance_size(const char *typename); + +/** + * object_property_help: + * @name: the name of the property + * @type: the type of the property + * @defval: the default value + * @description: description of the property + * + * Returns: a user-friendly formatted string describing the property + * for help purposes. + */ +char *object_property_help(const char *name, const char *type, + const char *defval, const char *description); + #endif diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c index edb4cc4a3d..b7157d6ab0 100644 --- a/qom/object_interfaces.c +++ b/qom/object_interfaces.c @@ -158,6 +158,25 @@ int user_creatable_add_opts_foreach(void *opaque, QemuOpts *opts, Error **errp) return 0; } +char *object_property_help(const char *name, const char *type, + const char *defval, const char *description) +{ + GString *str = g_string_new(NULL); + + g_string_append_printf(str, " %s=<%s>", name, type); + if (defval) { + g_string_append_printf(str, " (default: %s)", defval); + } + if (description) { + if (str->len < 24) { + g_string_append_printf(str, "%*s", 24 - (int)str->len, ""); + } + g_string_append_printf(str, " - %s", description); + } + + return g_string_free(str, false); +} + bool user_creatable_print_help(const char *type, QemuOpts *opts) { ObjectClass *klass; @@ -184,27 +203,15 @@ bool user_creatable_print_help(const char *type, QemuOpts *opts) object_class_property_iter_init(&iter, klass); while ((prop = object_property_iter_next(&iter))) { - GString *str; - char *defval; + g_autofree char *defval = object_property_get_default(prop); if (!prop->set) { continue; } - str = g_string_new(NULL); - g_string_append_printf(str, " %s=<%s>", prop->name, prop->type); - defval = object_property_get_default(prop); - if (defval) { - g_string_append_printf(str, " (default: %s)", defval); - g_free(defval); - } - if (prop->description) { - if (str->len < 24) { - g_string_append_printf(str, "%*s", 24 - (int)str->len, ""); - } - g_string_append_printf(str, " - %s", prop->description); - } - g_ptr_array_add(array, g_string_free(str, false)); + g_ptr_array_add(array, + object_property_help(prop->name, prop->type, + defval, prop->description)); } g_ptr_array_sort(array, (GCompareFunc)qemu_pstrcmp0); if (array->len > 0) { -- 2.24.0