summaryrefslogtreecommitdiff
path: root/src/libtracker-data/tracker-turtle-reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtracker-data/tracker-turtle-reader.c')
-rw-r--r--src/libtracker-data/tracker-turtle-reader.c16
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)
{