[glib/gsettings] parser/printer improvements:



commit 013ea2ae23b1d40cb0f73464146196e94acb3061
Author: Ryan Lortie <desrt desrt ca>
Date:   Fri Aug 28 11:09:13 2009 -0400

    parser/printer improvements:
    
      parser: fix end-of-stream detection (don't give spurious errors)
      printer: use symbolic type names where possible ('byte' vs '@y')
      test case: modify for above changes

 glib/gvariant-parser.c               |   12 ++++++++----
 glib/gvariant-printer.c              |   18 +++++++++---------
 glib/tests/gvariant-printer-parser.c |    6 +++---
 3 files changed, 20 insertions(+), 16 deletions(-)
---
diff --git a/glib/gvariant-parser.c b/glib/gvariant-parser.c
index be19cf0..c4d9a21 100644
--- a/glib/gvariant-parser.c
+++ b/glib/gvariant-parser.c
@@ -2075,16 +2075,20 @@ g_variant_parse_full (const gchar         *text,
 
   if ((ast = parse (&stream, NULL)))
     {
-      result = ast_resolve (ast, &stream.error);
+      if (type == NULL)
+        result = ast_resolve (ast, &stream.error);
+      else
+        result = ast_get_value (ast, type, &stream.error);
 
       if (result != NULL)
         {
           if (endptr == NULL)
             {
-              while (g_ascii_isspace (*text))
-                text++;
+              while (stream.stream != limit &&
+                     g_ascii_isspace (*stream.stream))
+                stream.stream++;
 
-              if (*text)
+              if (stream.stream != limit && *stream.stream != '\0')
                 {
                   set_error (&stream.error, text, text,
                              "trailing text after value");
diff --git a/glib/gvariant-printer.c b/glib/gvariant-printer.c
index 05e4679..1f2877c 100644
--- a/glib/gvariant-printer.c
+++ b/glib/gvariant-printer.c
@@ -70,7 +70,7 @@ g_variant_print_string (GVariant *value,
         GVariantIter iter;
 
         if (type_annotate)
-          g_string_append_printf (string, "@%s",
+          g_string_append_printf (string, "@%s ",
                                   g_variant_get_type_string (value));
         g_string_append_c (string, '[');
         if (g_variant_iter_init (&iter, value))
@@ -198,21 +198,21 @@ g_variant_print_string (GVariant *value,
 
     case G_VARIANT_TYPE_CLASS_BYTE:
       if (type_annotate)
-        g_string_append (string, "@y");
+        g_string_append (string, "byte ");
       g_string_append_printf (string, "0x%02x",
                               g_variant_get_byte (value));
       break;
 
     case G_VARIANT_TYPE_CLASS_INT16:
       if (type_annotate)
-        g_string_append (string, "@n");
+        g_string_append (string, "int16 ");
       g_string_append_printf (string, "%"G_GINT16_FORMAT,
                               g_variant_get_int16 (value));
       break;
 
     case G_VARIANT_TYPE_CLASS_UINT16:
       if (type_annotate)
-        g_string_append (string, "@q");
+        g_string_append (string, "uint16 ");
       g_string_append_printf (string, "%"G_GUINT16_FORMAT,
                               g_variant_get_uint16 (value));
       break;
@@ -227,21 +227,21 @@ g_variant_print_string (GVariant *value,
 
     case G_VARIANT_TYPE_CLASS_UINT32:
       if (type_annotate)
-        g_string_append (string, "@u");
+        g_string_append (string, "uint32 ");
       g_string_append_printf (string, "%"G_GUINT32_FORMAT,
                               g_variant_get_uint32 (value));
       break;
 
     case G_VARIANT_TYPE_CLASS_INT64:
       if (type_annotate)
-        g_string_append (string, "@x");
+        g_string_append (string, "int64 ");
       g_string_append_printf (string, "%"G_GINT64_FORMAT,
                               g_variant_get_int64 (value));
       break;
 
     case G_VARIANT_TYPE_CLASS_UINT64:
       if (type_annotate)
-        g_string_append (string, "@t");
+        g_string_append (string, "uint64 ");
       g_string_append_printf (string, "%"G_GUINT64_FORMAT,
                               g_variant_get_uint64 (value));
       break;
@@ -279,14 +279,14 @@ g_variant_print_string (GVariant *value,
 
     case G_VARIANT_TYPE_CLASS_OBJECT_PATH:
       if (type_annotate)
-        g_string_append (string, "@o");
+        g_string_append (string, "objectpath ");
       g_string_append_printf (string, "\"%s\"",
                               g_variant_get_string (value, NULL));
       break;
 
     case G_VARIANT_TYPE_CLASS_SIGNATURE:
       if (type_annotate)
-        g_string_append (string, "@g");
+        g_string_append (string, "signature");
       g_string_append_printf (string, "\"%s\"",
                               g_variant_get_string (value, NULL));
       break;
diff --git a/glib/tests/gvariant-printer-parser.c b/glib/tests/gvariant-printer-parser.c
index 4d6cfc0..b88bd7d 100644
--- a/glib/tests/gvariant-printer-parser.c
+++ b/glib/tests/gvariant-printer-parser.c
@@ -31,13 +31,13 @@ const char *verbatim_tests[] = {
 
   "[[3, 4], [5, 6]]",
 
-  "<(@y 0x04, @x -16, 6.0, 3.141, \"Hello\", <<<<<5>>>>>)>",
+  "<(byte 0x04, int16 -16, 6.0, 3.141, \"Hello\", <<<<<5>>>>>)>",
 
   "([true, false, false, true, false], [(), ()])",
 
-  "<@ai[]>",
+  "<@ai []>",
 
-  "<@an[1, -1, 2, -3, -1, -2, 1, -3, 4, -7, 3, -10, 13, -23, 26]>"
+  "<@an [1, -1, 2, -3, -1, -2, 1, -3, 4, -7, 3, -10, 13, -23, 26]>"
 };
 
 static void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]