aboutsummaryrefslogtreecommitdiff
path: root/qapi/string-output-visitor.c
diff options
context:
space:
mode:
Diffstat (limited to 'qapi/string-output-visitor.c')
-rw-r--r--qapi/string-output-visitor.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/qapi/string-output-visitor.c b/qapi/string-output-visitor.c
index 71ddc92b7b..c0cb72dbe4 100644
--- a/qapi/string-output-visitor.c
+++ b/qapi/string-output-visitor.c
@@ -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)