diff options
Diffstat (limited to 'libappstream-glib/as-node.c')
-rw-r--r-- | libappstream-glib/as-node.c | 53 |
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 |