diff options
Diffstat (limited to 'src/libtracker-data/tracker-turtle-reader.c')
-rw-r--r-- | src/libtracker-data/tracker-turtle-reader.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/libtracker-data/tracker-turtle-reader.c b/src/libtracker-data/tracker-turtle-reader.c index f5b3abc97..50cde79b4 100644 --- a/src/libtracker-data/tracker-turtle-reader.c +++ b/src/libtracker-data/tracker-turtle-reader.c @@ -55,6 +55,7 @@ struct _TrackerTurtleReader { gchar *subject; gchar *predicate; gchar *object; + gchar *object_lang; gboolean object_is_uri; ParserState state; }; @@ -229,6 +230,7 @@ pop_stack (TrackerTurtleReader *reader) /* Restore the old subject as current object */ reader->object = s; reader->object_is_uri = TRUE; + g_clear_pointer (&reader->object_lang, g_free); s = NULL; } else if (reader->state == STATE_SUBJECT) { g_clear_pointer (&reader->subject, g_free); @@ -486,7 +488,7 @@ tracker_turtle_reader_iterate_next (TrackerTurtleReader *reader, GError **error) { while (TRUE) { - gchar *str; + gchar *str, *lang; advance_whitespace (reader); @@ -565,6 +567,7 @@ tracker_turtle_reader_iterate_next (TrackerTurtleReader *reader, break; case STATE_OBJECT: g_clear_pointer (&reader->object, g_free); + g_clear_pointer (&reader->object_lang, g_free); reader->object_is_uri = FALSE; if (parse_token (reader, "[")) { @@ -591,16 +594,18 @@ tracker_turtle_reader_iterate_next (TrackerTurtleReader *reader, parse_terminal (reader, terminal_STRING_LITERAL_LONG2, 3, &str)) { reader->object = g_strcompress (str); g_free (str); - if (!parse_terminal (reader, terminal_LANGTAG, 0, NULL)) { - if (!handle_type_cast (reader, error)) + if (parse_terminal (reader, terminal_LANGTAG, 0, &lang)) { + reader->object_lang = lang; + } else if (!handle_type_cast (reader, error)) { return FALSE; } } else if (parse_terminal (reader, terminal_STRING_LITERAL1, 1, &str) || parse_terminal (reader, terminal_STRING_LITERAL2, 1, &str)) { reader->object = g_strcompress (str); g_free (str); - if (!parse_terminal (reader, terminal_LANGTAG, 0, NULL)) { - if (!handle_type_cast (reader, error)) + if (parse_terminal (reader, terminal_LANGTAG, 0, &lang)) { + reader->object_lang = lang; + } else if (!handle_type_cast (reader, error)) { return FALSE; } } else if (parse_terminal (reader, terminal_DOUBLE, 0, &str) || @@ -664,6 +669,7 @@ tracker_turtle_reader_next (TrackerTurtleReader *reader, const gchar **subject, const gchar **predicate, const gchar **object, + const gchar **object_lang, gboolean *object_is_uri, GError **error) { |