diff options
author | Ryan Lortie <desrt@desrt.ca> | 2010-03-26 08:01:51 -0500 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2010-03-26 08:02:17 -0500 |
commit | 409a3a61ece7bbdacbf2469eb7b86c3aa3c44653 (patch) | |
tree | 9e5e2b5e1e0b8e6b96dba9d1d60d3932e5f9f007 | |
parent | df67a0662b0c20ab58f992fc114a48039e7fb9e0 (diff) | |
download | glib-409a3a61ece7bbdacbf2469eb7b86c3aa3c44653.tar.gz |
GVariant: Stop lexing format strings at :
Lets us parse this successfully: {%s: %s}.
-rw-r--r-- | glib/gvariant-parser.c | 7 | ||||
-rw-r--r-- | glib/tests/gvariant.c | 1 |
2 files changed, 5 insertions, 3 deletions
diff --git a/glib/gvariant-parser.c b/glib/gvariant-parser.c index 5bb2c358c..10206336b 100644 --- a/glib/gvariant-parser.c +++ b/glib/gvariant-parser.c @@ -167,11 +167,12 @@ token_stream_prepare (TokenStream *stream) break; case '@': case '%': - /* stop at the first space, comma or unmatched bracket. - * deals nicely with cases like (%i, %i). + /* stop at the first space, comma, colon or unmatched bracket. + * deals nicely with cases like (%i, %i) or {%i: %i}. */ for (end = stream->stream + 1; - end != stream->end && *end != ',' && !g_ascii_isspace (*end); + end != stream->end && *end != ',' && + *end != ':' && !g_ascii_isspace (*end); end++) if (*end == '(' || *end == '{') diff --git a/glib/tests/gvariant.c b/glib/tests/gvariant.c index 1a51268d2..b37f5a778 100644 --- a/glib/tests/gvariant.c +++ b/glib/tests/gvariant.c @@ -3678,6 +3678,7 @@ test_parse_positional (void) " ('three', %u)]", "two", 3); g_assert (g_variant_is_of_type (value, G_VARIANT_TYPE ("a(su)"))); check_and_free (value, "[('one', 1), ('two', 2), ('three', 3)]"); + check_and_free (g_variant_new_parsed ("{%s:%i}", "one", 1), "{'one': 1}"); if (do_failed_test ("*GVariant format string*")) { |