Skip to content

Commit

Permalink
string-output-visitor: Support lists for non-integer types
Browse files Browse the repository at this point in the history
With the introduction of list-based array properties in qdev, the string
output visitor has to deal with lists of non-integer elements now ('info
qtree' prints all properties with the string output visitor).

Currently there is no explicit support for such lists, and the resulting
output is only the last element because string_output_set() always
replaces the output with the latest value. Instead of replacing the old
value, append comma separated values in list context.

The difference can be observed in 'info qtree' with a 'rocker' device
that has a 'ports' list with more than one element.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-ID: <20231121173416.346610-3-kwolf@redhat.com>
  • Loading branch information
kevmw authored and stefanhaRH committed Nov 28, 2023
1 parent 5057188 commit ea7ec15
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions qapi/string-output-visitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,27 @@ static StringOutputVisitor *to_sov(Visitor *v)

static void string_output_set(StringOutputVisitor *sov, char *string)
{
if (sov->string) {
g_string_free(sov->string, true);
switch (sov->list_mode) {
case LM_STARTED:
sov->list_mode = LM_IN_PROGRESS;
/* fall through */
case LM_NONE:
if (sov->string) {
g_string_free(sov->string, true);
}
sov->string = g_string_new(string);
g_free(string);
break;

case LM_IN_PROGRESS:
case LM_END:
g_string_append(sov->string, ", ");
g_string_append(sov->string, string);
break;

default:
abort();
}
sov->string = g_string_new(string);
g_free(string);
}

static void string_output_append(StringOutputVisitor *sov, int64_t a)
Expand Down

0 comments on commit ea7ec15

Please sign in to comment.