qapi: fix build on glib < 2.28

The following commits:
    qapi: make string output visitor parse int list
    qapi: make string input visitor parse int list
break with glib < 2.28 since they use the
new g_list_free_full function.

Open-code that to fix build on old systems.

Cc: Hu Tao <hutao@cn.fujitsu.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Michael S. Tsirkin 2014-06-16 18:07:03 +03:00
parent 69e255635d
commit 0d156683f6
2 changed files with 17 additions and 4 deletions

View File

@ -32,6 +32,11 @@ struct StringInputVisitor
const char *string; const char *string;
}; };
static void free_range(void *range, void *dummy)
{
g_free(range);
}
static void parse_str(StringInputVisitor *siv, Error **errp) static void parse_str(StringInputVisitor *siv, Error **errp)
{ {
char *str = (char *) siv->string; char *str = (char *) siv->string;
@ -108,8 +113,9 @@ static void parse_str(StringInputVisitor *siv, Error **errp)
return; return;
error: error:
g_list_free_full(siv->ranges, g_free); g_list_foreach(siv->ranges, free_range, NULL);
assert(siv->ranges == NULL); g_list_free(siv->ranges);
siv->ranges = NULL;
} }
static void static void
@ -314,7 +320,8 @@ Visitor *string_input_get_visitor(StringInputVisitor *v)
void string_input_visitor_cleanup(StringInputVisitor *v) void string_input_visitor_cleanup(StringInputVisitor *v)
{ {
g_list_free_full(v->ranges, g_free); g_list_foreach(v->ranges, free_range, NULL);
g_list_free(v->ranges);
g_free(v); g_free(v);
} }

View File

@ -316,13 +316,19 @@ Visitor *string_output_get_visitor(StringOutputVisitor *sov)
return &sov->visitor; return &sov->visitor;
} }
static void free_range(void *range, void *dummy)
{
g_free(range);
}
void string_output_visitor_cleanup(StringOutputVisitor *sov) void string_output_visitor_cleanup(StringOutputVisitor *sov)
{ {
if (sov->string) { if (sov->string) {
g_string_free(sov->string, true); g_string_free(sov->string, true);
} }
g_list_free_full(sov->ranges, g_free); g_list_foreach(sov->ranges, free_range, NULL);
g_list_free(sov->ranges);
g_free(sov); g_free(sov);
} }