[gupnp-av/wip/didl-lite-fragments] Take C arrays instead of GList.
- From: Krzesimir Nowak <krnowak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gupnp-av/wip/didl-lite-fragments] Take C arrays instead of GList.
- Date: Mon, 22 Oct 2012 12:40:17 +0000 (UTC)
commit bb8c2d7674ccb38fe6a44a45f54b449539c1c8cd
Author: Krzesimir Nowak <krnowak openismus com>
Date: Mon Oct 22 14:37:32 2012 +0200
Take C arrays instead of GList.
Gee collections have a to_array(), but no to_glist.
libgupnp-av/gupnp-didl-lite-object.c | 53 +++++++++++++++++++++++----------
libgupnp-av/gupnp-didl-lite-object.h | 8 +++--
2 files changed, 42 insertions(+), 19 deletions(-)
---
diff --git a/libgupnp-av/gupnp-didl-lite-object.c b/libgupnp-av/gupnp-didl-lite-object.c
index 6ede416..9d0ee92 100644
--- a/libgupnp-av/gupnp-didl-lite-object.c
+++ b/libgupnp-av/gupnp-didl-lite-object.c
@@ -3018,17 +3018,30 @@ get_xsd_validate_data (void)
return vdata;
}
+/**
+ * gupnp_didl_lite_object_apply_fragments:
+ * @object: The #GUPnPDIDLLiteObject
+ * @current_fragments: (array) (transfer none): XML fragments of @objects
+ * @current_size: Size of @current_fragments or -1.
+ * @new_fragments: (array) (transfer none): Substitutes for @current_fragments.
+ * @new_size: Size of @new_fragments or -1.
+ *
+ * Updates object by applying @new_fragments in places of @current_fragments.
+ *
+ * Returns: Result of operation.
+ */
GUPnPDIDLLiteFragmentResult
-gupnp_didl_lite_object_apply_fragments (GUPnPDIDLLiteObject *object,
- GList *current_fragments,
- GList *new_fragments)
+gupnp_didl_lite_object_apply_fragments (GUPnPDIDLLiteObject *object,
+ gchar **current_fragments,
+ gint current_size,
+ gchar **new_fragments,
+ gint new_size)
{
DocNode modified;
DocNode original;
GUPnPDIDLLiteFragmentResult result;
- GList *current_iter;
- GList *new_iter;
- XSDValidateData *vdata = get_xsd_validate_data ();
+ XSDValidateData *vdata;
+ gint iter;
g_return_val_if_fail (GUPNP_IS_DIDL_LITE_OBJECT (object),
GUPNP_DIDL_LITE_FRAGMENT_RESULT_UNKNOWN_ERROR);
@@ -3036,10 +3049,25 @@ gupnp_didl_lite_object_apply_fragments (GUPnPDIDLLiteObject *object,
GUPNP_DIDL_LITE_FRAGMENT_RESULT_UNKNOWN_ERROR);
g_return_val_if_fail (new_fragments != NULL,
GUPNP_DIDL_LITE_FRAGMENT_RESULT_UNKNOWN_ERROR);
+
+ vdata = get_xsd_validate_data ();
+
g_return_val_if_fail (vdata != NULL,
GUPNP_DIDL_LITE_FRAGMENT_RESULT_UNKNOWN_ERROR);
result = GUPNP_DIDL_LITE_FRAGMENT_RESULT_OK;
+ modified.doc = NULL;
+
+ if (current_size < 0)
+ current_size = g_strv_length (current_fragments);
+ if (new_size < 0)
+ new_size = g_strv_length (new_fragments);
+
+ if (current_size != new_size) {
+ result = GUPNP_DIDL_LITE_FRAGMENT_RESULT_MISMATCH;
+ goto out;
+ }
+
original.doc = object->priv->xml_doc->doc;
original.node = object->priv->xml_node;
modified.doc = xmlCopyDoc (original.doc, 1);
@@ -3056,11 +3084,9 @@ gupnp_didl_lite_object_apply_fragments (GUPnPDIDLLiteObject *object,
goto out;
}
- for (current_iter = current_fragments, new_iter = new_fragments;
- current_iter && new_iter;
- current_iter = current_iter->next, new_iter = new_iter->next) {
- const gchar *current_fragment = (gchar *) current_iter->data;
- const gchar *new_fragment = (gchar *) new_iter->data;
+ for (iter = 0; iter < new_size; ++iter) {
+ const gchar *current_fragment = current_fragments[iter];
+ const gchar *new_fragment = new_fragments[iter];
result = check_fragments (&original,
&modified,
@@ -3073,11 +3099,6 @@ gupnp_didl_lite_object_apply_fragments (GUPnPDIDLLiteObject *object,
}
}
- if (current_iter || new_iter) {
- result = GUPNP_DIDL_LITE_FRAGMENT_RESULT_MISMATCH;
- goto out;
- }
-
apply_modification (object, &modified);
out:
if (modified.doc)
diff --git a/libgupnp-av/gupnp-didl-lite-object.h b/libgupnp-av/gupnp-didl-lite-object.h
index daca888..b6b3d1d 100644
--- a/libgupnp-av/gupnp-didl-lite-object.h
+++ b/libgupnp-av/gupnp-didl-lite-object.h
@@ -278,9 +278,11 @@ void
gupnp_didl_lite_object_unset_update_id (GUPnPDIDLLiteObject *object);
GUPnPDIDLLiteFragmentResult
-gupnp_didl_lite_object_apply_fragments (GUPnPDIDLLiteObject *object,
- GList *current_fragments,
- GList *new_fragments);
+gupnp_didl_lite_object_apply_fragments (GUPnPDIDLLiteObject *object,
+ gchar **current_fragments,
+ gint current_size,
+ gchar **new_fragments,
+ gint new_size);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]