summaryrefslogtreecommitdiff
path: root/libappstream-glib/as-node.c
diff options
context:
space:
mode:
Diffstat (limited to 'libappstream-glib/as-node.c')
-rw-r--r--libappstream-glib/as-node.c53
1 files changed, 49 insertions, 4 deletions
diff --git a/libappstream-glib/as-node.c b/libappstream-glib/as-node.c
index 1256687..a4eee71 100644
--- a/libappstream-glib/as-node.c
+++ b/libappstream-glib/as-node.c
@@ -94,10 +94,10 @@ as_node_attr_insert (AsNodeData *data, const gchar *key, const gchar *value)
}
/**
- * as_node_attr_lookup:
+ * as_node_attr_find:
**/
-static const gchar *
-as_node_attr_lookup (AsNodeData *data, const gchar *key)
+static AsNodeAttr *
+as_node_attr_find (AsNodeData *data, const gchar *key)
{
AsNodeAttr *attr;
GList *l;
@@ -105,12 +105,25 @@ as_node_attr_lookup (AsNodeData *data, const gchar *key)
for (l = data->attrs; l != NULL; l = l->next) {
attr = l->data;
if (g_strcmp0 (attr->key, key) == 0)
- return attr->value;
+ return attr;
}
return NULL;
}
/**
+ * as_node_attr_lookup:
+ **/
+static const gchar *
+as_node_attr_lookup (AsNodeData *data, const gchar *key)
+{
+ AsNodeAttr *attr;
+ attr = as_node_attr_find (data, key);
+ if (attr != NULL)
+ return attr->value;
+ return NULL;
+}
+
+/**
* as_node_destroy_node_cb:
**/
static gboolean
@@ -826,6 +839,38 @@ as_node_get_attribute (const GNode *node, const gchar *key)
}
/**
+ * as_node_take_attribute: (skip)
+ * @node: a #GNode
+ * @key: the attribute key
+ *
+ * Gets a node attribute, e.g. "false"
+ *
+ * Return value: string value
+ *
+ * Since: 0.1.2
+ **/
+gchar *
+as_node_take_attribute (const GNode *node, const gchar *key)
+{
+ AsNodeAttr *attr;
+ AsNodeData *data;
+ gchar *tmp;
+
+ g_return_val_if_fail (node != NULL, NULL);
+ g_return_val_if_fail (key != NULL, NULL);
+
+ if (node->data == NULL)
+ return NULL;
+ data = (AsNodeData *) node->data;
+ attr = as_node_attr_find (data, key);
+ if (attr == NULL)
+ return NULL;
+ tmp = attr->value;
+ attr->value = NULL;
+ return tmp;
+}
+
+/**
* as_node_add_attribute: (skip)
* @node: a #GNode
* @key: the attribute key