summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2016-10-01 14:14:32 +0200
committerJens Georg <mail@jensge.org>2016-10-01 14:14:34 +0200
commitafb411f3d0155192be0e021af64d8ab61e153729 (patch)
treed2dc30648cd1112e4075f69ed844f5c76079a0ae
parentf39d155d48a82fa909feeeba2287f6a05f6d8757 (diff)
downloadgupnp-av-wip/no-gupnp.tar.gz
Remove dependency on GUPnPwip/no-gupnp
We actually only used it for GUPnPXMLDoc and some error constants. This is now replaced by a small boxed that adds external refcounting to xmlDoc and GLib's G_MARKUP_ERROR constants. Signed-off-by: Jens Georg <mail@jensge.org>
-rw-r--r--configure.ac3
-rw-r--r--gupnp-av-1.0-uninstalled.pc.in1
-rw-r--r--gupnp-av-1.0.pc.in1
-rw-r--r--libgupnp-av/gupnp-cds-last-change-parser.c10
-rw-r--r--libgupnp-av/gupnp-didl-lite-container.c6
-rw-r--r--libgupnp-av/gupnp-didl-lite-contributor-private.h4
-rw-r--r--libgupnp-av/gupnp-didl-lite-contributor.c19
-rw-r--r--libgupnp-av/gupnp-didl-lite-createclass-private.h4
-rw-r--r--libgupnp-av/gupnp-didl-lite-createclass.c15
-rw-r--r--libgupnp-av/gupnp-didl-lite-descriptor-private.h5
-rw-r--r--libgupnp-av/gupnp-didl-lite-descriptor.c19
-rw-r--r--libgupnp-av/gupnp-didl-lite-descriptor.h1
-rw-r--r--libgupnp-av/gupnp-didl-lite-item.c2
-rw-r--r--libgupnp-av/gupnp-didl-lite-object-private.h6
-rw-r--r--libgupnp-av/gupnp-didl-lite-object.c30
-rw-r--r--libgupnp-av/gupnp-didl-lite-parser.c42
-rw-r--r--libgupnp-av/gupnp-didl-lite-parser.h1
-rw-r--r--libgupnp-av/gupnp-didl-lite-resource-private.h4
-rw-r--r--libgupnp-av/gupnp-didl-lite-resource.c21
-rw-r--r--libgupnp-av/gupnp-didl-lite-resource.h1
-rw-r--r--libgupnp-av/gupnp-didl-lite-writer.c11
-rw-r--r--libgupnp-av/gupnp-didl-lite-writer.h2
-rw-r--r--libgupnp-av/gupnp-feature-list-parser.c12
-rw-r--r--libgupnp-av/gupnp-last-change-parser.c4
-rw-r--r--libgupnp-av/gupnp-last-change-parser.h2
-rw-r--r--libgupnp-av/gupnp-protocol-info.c1
-rw-r--r--libgupnp-av/xml-util.c38
-rw-r--r--libgupnp-av/xml-util.h19
-rw-r--r--tests/gtest/test-last-change-parser.c2
-rw-r--r--tests/gtest/test-regression.c2
-rw-r--r--vala/Makefile.am2
-rw-r--r--vala/gupnp-av-1.0.deps1
32 files changed, 163 insertions, 128 deletions
diff --git a/configure.ac b/configure.ac
index bf880b4..3072ccc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,8 +32,7 @@ AX_COMPILER_FLAGS([WARN_CFLAGS])
LT_PREREQ([2.2])
LT_INIT([win32-dll])
-PKG_CHECK_MODULES(LIBGUPNP, gupnp-1.0 >= 0.19.0 \
- gobject-2.0 \
+PKG_CHECK_MODULES(LIBGUPNP, gobject-2.0 \
libxml-2.0)
# glib-genmarshal
diff --git a/gupnp-av-1.0-uninstalled.pc.in b/gupnp-av-1.0-uninstalled.pc.in
index 2be93ac..a98028a 100644
--- a/gupnp-av-1.0-uninstalled.pc.in
+++ b/gupnp-av-1.0-uninstalled.pc.in
@@ -8,4 +8,3 @@ Description: GObject-based AV specific UPnP library
Version: @VERSION@
Libs: ${libdir}/libgupnp-av-1.0.la
Cflags: -I${includedir}
-Requires.private: gupnp-1.0
diff --git a/gupnp-av-1.0.pc.in b/gupnp-av-1.0.pc.in
index 3712259..8db8b4f 100644
--- a/gupnp-av-1.0.pc.in
+++ b/gupnp-av-1.0.pc.in
@@ -8,4 +8,3 @@ Description: GObject-based AV specific UPnP library
Version: @VERSION@
Libs: -L${libdir} -lgupnp-av-1.0
Cflags: -I${includedir}/gupnp-av-1.0
-Requires.private: gupnp-1.0
diff --git a/libgupnp-av/gupnp-cds-last-change-parser.c b/libgupnp-av/gupnp-cds-last-change-parser.c
index 71dbbea..cff5f0b 100644
--- a/libgupnp-av/gupnp-cds-last-change-parser.c
+++ b/libgupnp-av/gupnp-cds-last-change-parser.c
@@ -29,8 +29,6 @@
*
*/
-#include <libgupnp/gupnp-error.h>
-
#include "xml-util.h"
#include "gupnp-cds-last-change-parser.h"
@@ -114,8 +112,8 @@ gupnp_cds_last_change_parser_parse (GUPnPCDSLastChangeParser *parser,
doc = xmlParseDoc ((const xmlChar *) last_change);
if (doc == NULL) {
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_PARSE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
"Could not parse LastChange XML");
goto out;
@@ -126,8 +124,8 @@ gupnp_cds_last_change_parser_parse (GUPnPCDSLastChangeParser *parser,
NULL);
if (state_event == NULL) {
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_PARSE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
"Missing StateEvent node");
goto out;
diff --git a/libgupnp-av/gupnp-didl-lite-container.c b/libgupnp-av/gupnp-didl-lite-container.c
index 365b266..d7ac578 100644
--- a/libgupnp-av/gupnp-didl-lite-container.c
+++ b/libgupnp-av/gupnp-didl-lite-container.c
@@ -464,7 +464,7 @@ gupnp_didl_lite_container_get_create_classes_full (
for (l = cc_list; l; l = l->next) {
GUPnPDIDLLiteCreateClass *cc;
xmlNode *cc_node;
- GUPnPXMLDoc *cc_doc;
+ GUPnPAVXMLDoc *cc_doc;
cc_node = (xmlNode *) l->data;
if (!cc_node->children)
@@ -633,7 +633,7 @@ gupnp_didl_lite_container_set_container_update_id
{
xmlNode *xml_node;
xmlNsPtr upnp_ns;
- GUPnPXMLDoc *xml_doc;
+ GUPnPAVXMLDoc *xml_doc;
char *str;
GUPnPDIDLLiteObject *self_as_object;
@@ -693,7 +693,7 @@ gupnp_didl_lite_container_set_total_deleted_child_count
{
xmlNode *xml_node;
xmlNsPtr upnp_ns;
- GUPnPXMLDoc *xml_doc;
+ GUPnPAVXMLDoc *xml_doc;
char *str;
GUPnPDIDLLiteObject *self_as_object;
diff --git a/libgupnp-av/gupnp-didl-lite-contributor-private.h b/libgupnp-av/gupnp-didl-lite-contributor-private.h
index 0bb6451..be5eef3 100644
--- a/libgupnp-av/gupnp-didl-lite-contributor-private.h
+++ b/libgupnp-av/gupnp-didl-lite-contributor-private.h
@@ -23,6 +23,8 @@
#ifndef __GUPNP_DIDL_LITE_CONTRIBUTOR_PRIVATE_H__
#define __GUPNP_DIDL_LITE_CONTRIBUTOR_PRIVATE_H__
+#include "xml-util.h"
+
#include <glib-object.h>
#include <libxml/tree.h>
@@ -32,7 +34,7 @@ G_BEGIN_DECLS
GUPnPDIDLLiteContributor *
gupnp_didl_lite_contributor_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc);
+ GUPnPAVXMLDoc *xml_doc);
G_END_DECLS
diff --git a/libgupnp-av/gupnp-didl-lite-contributor.c b/libgupnp-av/gupnp-didl-lite-contributor.c
index d3599fc..ad6e234 100644
--- a/libgupnp-av/gupnp-didl-lite-contributor.c
+++ b/libgupnp-av/gupnp-didl-lite-contributor.c
@@ -28,8 +28,6 @@
* producer, director, producer and contributor) property in a DIDL-Lite object.
*/
-#include <libgupnp/gupnp.h>
-
#include "gupnp-didl-lite-contributor.h"
#include "gupnp-didl-lite-contributor-private.h"
#include "xml-util.h"
@@ -40,7 +38,7 @@ G_DEFINE_TYPE (GUPnPDIDLLiteContributor,
struct _GUPnPDIDLLiteContributorPrivate {
xmlNode *xml_node;
- GUPnPXMLDoc *xml_doc;
+ GUPnPAVXMLDoc *xml_doc;
};
enum {
@@ -109,7 +107,7 @@ gupnp_didl_lite_contributor_set_property (GObject *object,
contributor->priv->xml_node = g_value_get_pointer (value);
break;
case PROP_XML_DOC:
- contributor->priv->xml_doc = g_value_dup_object (value);
+ contributor->priv->xml_doc = g_value_dup_boxed (value);
break;
case PROP_ROLE:
gupnp_didl_lite_contributor_set_role
@@ -135,10 +133,7 @@ gupnp_didl_lite_contributor_dispose (GObject *object)
priv = GUPNP_DIDL_LITE_CONTRIBUTOR (object)->priv;
- if (priv->xml_doc) {
- g_object_unref (priv->xml_doc);
- priv->xml_doc = NULL;
- }
+ g_clear_pointer (&priv->xml_doc, xml_doc_unref);
object_class = G_OBJECT_CLASS
(gupnp_didl_lite_contributor_parent_class);
@@ -189,11 +184,11 @@ gupnp_didl_lite_contributor_class_init (GUPnPDIDLLiteContributorClass *klass)
g_object_class_install_property
(object_class,
PROP_XML_DOC,
- g_param_spec_object ("xml-doc",
+ g_param_spec_boxed ("xml-doc",
"XMLDoc",
"The reference to XML document"
" containing this contributor.",
- GUPNP_TYPE_XML_DOC,
+ xml_doc_get_type (),
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_NAME |
@@ -326,8 +321,8 @@ gupnp_didl_lite_contributor_set_name (GUPnPDIDLLiteContributor *contributor,
* Return value: A new #GUPnPDIDLLiteContributor object. Unref after usage.
**/
GUPnPDIDLLiteContributor *
-gupnp_didl_lite_contributor_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc)
+gupnp_didl_lite_contributor_new_from_xml (xmlNode *xml_node,
+ GUPnPAVXMLDoc *xml_doc)
{
return g_object_new (GUPNP_TYPE_DIDL_LITE_CONTRIBUTOR,
"xml-node", xml_node,
diff --git a/libgupnp-av/gupnp-didl-lite-createclass-private.h b/libgupnp-av/gupnp-didl-lite-createclass-private.h
index 59ce5f6..e9f492f 100644
--- a/libgupnp-av/gupnp-didl-lite-createclass-private.h
+++ b/libgupnp-av/gupnp-didl-lite-createclass-private.h
@@ -25,6 +25,8 @@
#ifndef __GUPNP_DIDL_LITE_CREATE_CLASS_PRIVATE_H__
#define __GUPNP_DIDL_LITE_CREATE_CLASS_PRIVATE_H__
+#include "xml-util.h"
+
#include <glib-object.h>
#include <libxml/tree.h>
@@ -32,7 +34,7 @@ G_BEGIN_DECLS
G_GNUC_INTERNAL GUPnPDIDLLiteCreateClass *
gupnp_didl_lite_create_class_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc);
+ GUPnPAVXMLDoc *xml_doc);
G_END_DECLS
diff --git a/libgupnp-av/gupnp-didl-lite-createclass.c b/libgupnp-av/gupnp-didl-lite-createclass.c
index 6a01370..ea42436 100644
--- a/libgupnp-av/gupnp-didl-lite-createclass.c
+++ b/libgupnp-av/gupnp-didl-lite-createclass.c
@@ -41,7 +41,7 @@ G_DEFINE_TYPE (GUPnPDIDLLiteCreateClass,
struct _GUPnPDIDLLiteCreateClassPrivate {
xmlNode *xml_node;
- GUPnPXMLDoc *xml_doc;
+ GUPnPAVXMLDoc *xml_doc;
};
enum {
@@ -118,7 +118,7 @@ gupnp_didl_lite_create_class_set_property (GObject *object,
create_class->priv->xml_node = g_value_get_pointer (value);
break;
case PROP_XML_DOC:
- create_class->priv->xml_doc = g_value_dup_object (value);
+ create_class->priv->xml_doc = g_value_dup_boxed (value);
break;
case PROP_CONTENT:
gupnp_didl_lite_create_class_set_content
@@ -149,10 +149,7 @@ gupnp_didl_lite_create_class_dispose (GObject *object)
priv = GUPNP_DIDL_LITE_CREATE_CLASS (object)->priv;
- if (priv->xml_doc) {
- g_object_unref (priv->xml_doc);
- priv->xml_doc = NULL;
- }
+ g_clear_pointer (&priv->xml_doc, xml_doc_unref);
object_class = G_OBJECT_CLASS
(gupnp_didl_lite_create_class_parent_class);
@@ -204,12 +201,12 @@ gupnp_didl_lite_create_class_class_init (GUPnPDIDLLiteCreateClassClass *klass)
g_object_class_install_property
(object_class,
PROP_XML_DOC,
- g_param_spec_object
+ g_param_spec_boxed
("xml-doc",
"XMLDoc",
"The reference to XML document"
" containing this object.",
- GUPNP_TYPE_XML_DOC,
+ xml_doc_get_type (),
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_NAME |
@@ -415,7 +412,7 @@ gupnp_didl_lite_create_class_set_friendly_name
**/
GUPnPDIDLLiteCreateClass *
gupnp_didl_lite_create_class_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc)
+ GUPnPAVXMLDoc *xml_doc)
{
return g_object_new (GUPNP_TYPE_DIDL_LITE_CREATE_CLASS,
"xml-node", xml_node,
diff --git a/libgupnp-av/gupnp-didl-lite-descriptor-private.h b/libgupnp-av/gupnp-didl-lite-descriptor-private.h
index 1ed983c..75ca5ce 100644
--- a/libgupnp-av/gupnp-didl-lite-descriptor-private.h
+++ b/libgupnp-av/gupnp-didl-lite-descriptor-private.h
@@ -23,16 +23,17 @@
#ifndef __GUPNP_DIDL_LITE_DESCRIPTOR_PRIVATE_H__
#define __GUPNP_DIDL_LITE_DESCRIPTOR_PRIVATE_H__
+#include "xml-util.h"
+
#include <stdarg.h>
#include <glib-object.h>
#include <libxml/tree.h>
-#include <libgupnp/gupnp.h>
G_BEGIN_DECLS
GUPnPDIDLLiteDescriptor *
gupnp_didl_lite_descriptor_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc);
+ GUPnPAVXMLDoc *xml_doc);
G_END_DECLS
diff --git a/libgupnp-av/gupnp-didl-lite-descriptor.c b/libgupnp-av/gupnp-didl-lite-descriptor.c
index c5927a0..bccb517 100644
--- a/libgupnp-av/gupnp-didl-lite-descriptor.c
+++ b/libgupnp-av/gupnp-didl-lite-descriptor.c
@@ -38,8 +38,8 @@ G_DEFINE_TYPE (GUPnPDIDLLiteDescriptor,
G_TYPE_OBJECT);
struct _GUPnPDIDLLiteDescriptorPrivate {
- xmlNode *xml_node;
- GUPnPXMLDoc *xml_doc;
+ xmlNode *xml_node;
+ GUPnPAVXMLDoc *xml_doc;
};
enum {
@@ -77,7 +77,7 @@ gupnp_didl_lite_descriptor_set_property (GObject *object,
descriptor->priv->xml_node = g_value_get_pointer (value);
break;
case PROP_XML_DOC:
- descriptor->priv->xml_doc = g_value_dup_object (value);
+ descriptor->priv->xml_doc = g_value_dup_boxed (value);
break;
case PROP_ID:
gupnp_didl_lite_descriptor_set_id
@@ -157,10 +157,7 @@ gupnp_didl_lite_descriptor_dispose (GObject *object)
priv = GUPNP_DIDL_LITE_DESCRIPTOR (object)->priv;
- if (priv->xml_doc) {
- g_object_unref (priv->xml_doc);
- priv->xml_doc = NULL;
- }
+ g_clear_pointer (&priv->xml_doc, xml_doc_unref);
object_class = G_OBJECT_CLASS (gupnp_didl_lite_descriptor_parent_class);
object_class->dispose (object);
@@ -210,11 +207,11 @@ gupnp_didl_lite_descriptor_class_init (GUPnPDIDLLiteDescriptorClass *klass)
g_object_class_install_property
(object_class,
PROP_XML_DOC,
- g_param_spec_object ("xml-doc",
+ g_param_spec_boxed ("xml-doc",
"XMLDoc",
"The reference to XML document"
" containing this object.",
- GUPNP_TYPE_XML_DOC,
+ xml_doc_get_type (),
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_NAME |
@@ -313,8 +310,8 @@ gupnp_didl_lite_descriptor_new (void)
* Return value: A new #GUPnPDIDLLiteDescriptor object. Unref after usage.
**/
GUPnPDIDLLiteDescriptor *
-gupnp_didl_lite_descriptor_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc)
+gupnp_didl_lite_descriptor_new_from_xml (xmlNode *xml_node,
+ GUPnPAVXMLDoc *xml_doc)
{
return g_object_new (GUPNP_TYPE_DIDL_LITE_DESCRIPTOR,
"xml-node", xml_node,
diff --git a/libgupnp-av/gupnp-didl-lite-descriptor.h b/libgupnp-av/gupnp-didl-lite-descriptor.h
index d2942e7..5f7e304 100644
--- a/libgupnp-av/gupnp-didl-lite-descriptor.h
+++ b/libgupnp-av/gupnp-didl-lite-descriptor.h
@@ -26,7 +26,6 @@
#include <stdarg.h>
#include <glib-object.h>
#include <libxml/tree.h>
-#include <libgupnp/gupnp.h>
G_BEGIN_DECLS
diff --git a/libgupnp-av/gupnp-didl-lite-item.c b/libgupnp-av/gupnp-didl-lite-item.c
index 68b6332..3588052 100644
--- a/libgupnp-av/gupnp-didl-lite-item.c
+++ b/libgupnp-av/gupnp-didl-lite-item.c
@@ -207,7 +207,7 @@ gupnp_didl_lite_item_set_lifetime (GUPnPDIDLLiteItem *item,
{
xmlNode *node = NULL;
xmlNs *ns = NULL;
- GUPnPXMLDoc *doc = NULL;
+ GUPnPAVXMLDoc *doc = NULL;
GUPnPDIDLLiteObject *object = NULL;
g_return_if_fail (GUPNP_IS_DIDL_LITE_ITEM (item));
diff --git a/libgupnp-av/gupnp-didl-lite-object-private.h b/libgupnp-av/gupnp-didl-lite-object-private.h
index 4371ba1..2cc518c 100644
--- a/libgupnp-av/gupnp-didl-lite-object-private.h
+++ b/libgupnp-av/gupnp-didl-lite-object-private.h
@@ -25,6 +25,8 @@
#ifndef __GUPNP_DIDL_LITE_OBJECT_PRIVATE_H__
#define __GUPNP_DIDL_LITE_OBJECT_PRIVATE_H__
+#include "xml-util.h"
+
#include <glib-object.h>
#include <libxml/tree.h>
@@ -32,13 +34,13 @@ G_BEGIN_DECLS
G_GNUC_INTERNAL GUPnPDIDLLiteObject *
gupnp_didl_lite_object_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc,
+ GUPnPAVXMLDoc *xml_doc,
xmlNs *upnp_ns,
xmlNs *dc_ns,
xmlNs *dlna_ns,
xmlNs *pv_ns);
-G_GNUC_INTERNAL GUPnPXMLDoc *
+G_GNUC_INTERNAL GUPnPAVXMLDoc *
gupnp_didl_lite_object_get_gupnp_xml_doc
(GUPnPDIDLLiteObject *object);
diff --git a/libgupnp-av/gupnp-didl-lite-object.c b/libgupnp-av/gupnp-didl-lite-object.c
index cf73061..68156dc 100644
--- a/libgupnp-av/gupnp-didl-lite-object.c
+++ b/libgupnp-av/gupnp-didl-lite-object.c
@@ -30,7 +30,6 @@
*/
#include <string.h>
-#include <libgupnp/gupnp.h>
#include "gupnp-didl-lite-object.h"
#include "gupnp-didl-lite-object-private.h"
@@ -48,8 +47,8 @@ G_DEFINE_ABSTRACT_TYPE (GUPnPDIDLLiteObject,
G_TYPE_OBJECT);
struct _GUPnPDIDLLiteObjectPrivate {
- xmlNode *xml_node;
- GUPnPXMLDoc *xml_doc;
+ xmlNode *xml_node;
+ GUPnPAVXMLDoc *xml_doc;
xmlNs *upnp_ns;
xmlNs *dc_ns;
@@ -124,7 +123,7 @@ gupnp_didl_lite_object_set_property (GObject *object,
didl_object->priv->xml_node = g_value_get_pointer (value);
break;
case PROP_XML_DOC:
- didl_object->priv->xml_doc = g_value_dup_object (value);
+ didl_object->priv->xml_doc = g_value_dup_boxed (value);
break;
case PROP_UPNP_NAMESPACE:
didl_object->priv->upnp_ns = g_value_get_pointer (value);
@@ -367,10 +366,7 @@ gupnp_didl_lite_object_dispose (GObject *object)
priv = GUPNP_DIDL_LITE_OBJECT (object)->priv;
- if (priv->xml_doc) {
- g_object_unref (priv->xml_doc);
- priv->xml_doc = NULL;
- }
+ g_clear_pointer (&priv->xml_doc, xml_doc_unref);
object_class = G_OBJECT_CLASS (gupnp_didl_lite_object_parent_class);
object_class->dispose (object);
@@ -419,11 +415,11 @@ gupnp_didl_lite_object_class_init (GUPnPDIDLLiteObjectClass *klass)
g_object_class_install_property
(object_class,
PROP_XML_DOC,
- g_param_spec_object ("xml-doc",
+ g_param_spec_boxed ("xml-doc",
"XMLDoc",
"The reference to XML document"
" containing this object.",
- GUPNP_TYPE_XML_DOC,
+ xml_doc_get_type (),
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_NAME |
@@ -954,12 +950,12 @@ unset_contributors_by_name (GUPnPDIDLLiteObject *object, const char *name)
* Return value: A new #GUPnPDIDLLiteObject object. Unref after usage.
**/
GUPnPDIDLLiteObject *
-gupnp_didl_lite_object_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc,
- xmlNs *upnp_ns,
- xmlNs *dc_ns,
- xmlNs *dlna_ns,
- xmlNs *pv_ns)
+gupnp_didl_lite_object_new_from_xml (xmlNode *xml_node,
+ GUPnPAVXMLDoc *xml_doc,
+ xmlNs *upnp_ns,
+ xmlNs *dc_ns,
+ xmlNs *dlna_ns,
+ xmlNs *pv_ns)
{
g_return_val_if_fail (xml_node != NULL, NULL);
g_return_val_if_fail (xml_node->name != NULL, NULL);
@@ -995,7 +991,7 @@ gupnp_didl_lite_object_new_from_xml (xmlNode *xml_node,
* Returns: (transfer none): The pointer to the XML document containing this
* object.
**/
-GUPnPXMLDoc *
+GUPnPAVXMLDoc *
gupnp_didl_lite_object_get_gupnp_xml_doc (GUPnPDIDLLiteObject *object)
{
g_return_val_if_fail (GUPNP_IS_DIDL_LITE_OBJECT (object), NULL);
diff --git a/libgupnp-av/gupnp-didl-lite-parser.c b/libgupnp-av/gupnp-didl-lite-parser.c
index 3b2111f..59255ef 100644
--- a/libgupnp-av/gupnp-didl-lite-parser.c
+++ b/libgupnp-av/gupnp-didl-lite-parser.c
@@ -84,7 +84,7 @@ verify_didl_attributes (xmlNode *node)
static gboolean
parse_elements (GUPnPDIDLLiteParser *parser,
xmlNode *node,
- GUPnPXMLDoc *xml_doc,
+ GUPnPAVXMLDoc *xml_doc,
xmlNs *upnp_ns,
xmlNs *dc_ns,
xmlNs *dlna_ns,
@@ -217,7 +217,7 @@ gupnp_didl_lite_parser_parse_didl (GUPnPDIDLLiteParser *parser,
* gupnp_didl_lite_parser_parse_didl_recursive:
* @parser: A #GUPnPDIDLLiteParser
* @didl: The DIDL-Lite XML string to be parsed
- * @error: The location where to store any error, or NULL
+ * @error: The location where to store any error, or %NULL
*
* Parses DIDL-Lite XML string @didl, emitting the ::object-available,
* ::item-available and ::container-available signals appropriately during the
@@ -231,20 +231,20 @@ gupnp_didl_lite_parser_parse_didl_recursive (GUPnPDIDLLiteParser *parser,
gboolean recursive,
GError **error)
{
- xmlDoc *doc;
- xmlNode *element;
- xmlNs *upnp_ns = NULL;
- xmlNs *dc_ns = NULL;
- xmlNs *dlna_ns = NULL;
- xmlNs *pv_ns = NULL;
- GUPnPXMLDoc *xml_doc;
- gboolean result;
+ xmlDoc *doc;
+ xmlNode *element;
+ xmlNs *upnp_ns = NULL;
+ xmlNs *dc_ns = NULL;
+ xmlNs *dlna_ns = NULL;
+ xmlNs *pv_ns = NULL;
+ GUPnPAVXMLDoc *xml_doc = NULL;
+ gboolean result;
doc = xmlRecoverMemory (didl, strlen (didl));
if (doc == NULL) {
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_PARSE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
"Could not parse DIDL-Lite XML:\n%s", didl);
return FALSE;
@@ -256,8 +256,8 @@ gupnp_didl_lite_parser_parse_didl_recursive (GUPnPDIDLLiteParser *parser,
NULL);
if (element == NULL) {
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_NO_NODE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
"No 'DIDL-Lite' node in the DIDL-Lite XML:\n%s",
didl);
xmlFreeDoc (doc);
@@ -267,8 +267,8 @@ gupnp_didl_lite_parser_parse_didl_recursive (GUPnPDIDLLiteParser *parser,
if (element->children == NULL) {
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_EMPTY_NODE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_EMPTY,
"Empty 'DIDL-Lite' node in the DIDL-Lite XML:\n%s",
didl);
xmlFreeDoc (doc);
@@ -296,7 +296,7 @@ gupnp_didl_lite_parser_parse_didl_recursive (GUPnPDIDLLiteParser *parser,
pv_ns = xml_util_create_namespace (xmlDocGetRootElement (doc),
GUPNP_XML_NAMESPACE_PV);
- xml_doc = gupnp_xml_doc_new (doc);
+ xml_doc = xml_doc_new (doc);
result = parse_elements (parser,
element,
@@ -307,7 +307,7 @@ gupnp_didl_lite_parser_parse_didl_recursive (GUPnPDIDLLiteParser *parser,
pv_ns,
recursive,
error);
- g_object_unref (xml_doc);
+ xml_doc_unref (xml_doc);
return result;
}
@@ -315,7 +315,7 @@ gupnp_didl_lite_parser_parse_didl_recursive (GUPnPDIDLLiteParser *parser,
static gboolean
parse_elements (GUPnPDIDLLiteParser *parser,
xmlNode *node,
- GUPnPXMLDoc *xml_doc,
+ GUPnPAVXMLDoc *xml_doc,
xmlNs *upnp_ns,
xmlNs *dc_ns,
xmlNs *dlna_ns,
@@ -359,8 +359,8 @@ parse_elements (GUPnPDIDLLiteParser *parser,
if (!verify_didl_attributes (node)) {
g_object_unref (object);
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_INVALID_ATTRIBUTE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
"Could not parse DIDL-Lite XML");
return FALSE;
diff --git a/libgupnp-av/gupnp-didl-lite-parser.h b/libgupnp-av/gupnp-didl-lite-parser.h
index f7b3c4e..764dc1e 100644
--- a/libgupnp-av/gupnp-didl-lite-parser.h
+++ b/libgupnp-av/gupnp-didl-lite-parser.h
@@ -22,7 +22,6 @@
#ifndef __GUPNP_DIDL_LITE_PARSER_H__
#define __GUPNP_DIDL_LITE_PARSER_H__
-#include <libgupnp/gupnp.h>
#include "gupnp-didl-lite-container.h"
#include "gupnp-didl-lite-item.h"
diff --git a/libgupnp-av/gupnp-didl-lite-resource-private.h b/libgupnp-av/gupnp-didl-lite-resource-private.h
index e787710..bb6dedc 100644
--- a/libgupnp-av/gupnp-didl-lite-resource-private.h
+++ b/libgupnp-av/gupnp-didl-lite-resource-private.h
@@ -23,6 +23,8 @@
#ifndef __GUPNP_DIDL_LITE_RESOURCE_PRIVATE_H__
#define __GUPNP_DIDL_LITE_RESOURCE_PRIVATE_H__
+#include "xml-util.h"
+
#include <stdarg.h>
#include <glib-object.h>
#include <libxml/tree.h>
@@ -31,7 +33,7 @@ G_BEGIN_DECLS
GUPnPDIDLLiteResource *
gupnp_didl_lite_resource_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc,
+ GUPnPAVXMLDoc *xml_doc,
xmlNs *dlna_ns,
xmlNs *pv_ns);
diff --git a/libgupnp-av/gupnp-didl-lite-resource.c b/libgupnp-av/gupnp-didl-lite-resource.c
index e32f9c9..1516360 100644
--- a/libgupnp-av/gupnp-didl-lite-resource.c
+++ b/libgupnp-av/gupnp-didl-lite-resource.c
@@ -45,7 +45,7 @@ G_DEFINE_TYPE (GUPnPDIDLLiteResource,
struct _GUPnPDIDLLiteResourcePrivate {
xmlNode *xml_node;
- GUPnPXMLDoc *xml_doc;
+ GUPnPAVXMLDoc *xml_doc;
xmlNs *dlna_ns;
xmlNs *pv_ns;
@@ -148,7 +148,7 @@ gupnp_didl_lite_resource_set_property (GObject *object,
resource->priv->xml_node = g_value_get_pointer (value);
break;
case PROP_XML_DOC:
- resource->priv->xml_doc = g_value_dup_object (value);
+ resource->priv->xml_doc = g_value_dup_boxed (value);
break;
case PROP_URI:
gupnp_didl_lite_resource_set_uri (resource,
@@ -386,10 +386,7 @@ gupnp_didl_lite_resource_dispose (GObject *object)
priv = GUPNP_DIDL_LITE_RESOURCE (object)->priv;
- if (priv->xml_doc) {
- g_object_unref (priv->xml_doc);
- priv->xml_doc = NULL;
- }
+ g_clear_pointer (&priv->xml_doc, xml_doc_unref);
if (priv->protocol_info != NULL) {
g_object_unref (priv->protocol_info);
@@ -443,11 +440,11 @@ gupnp_didl_lite_resource_class_init (GUPnPDIDLLiteResourceClass *klass)
g_object_class_install_property
(object_class,
PROP_XML_DOC,
- g_param_spec_object ("xml-doc",
+ g_param_spec_boxed ("xml-doc",
"XMLDoc",
"The reference to XML document"
" containing this object.",
- GUPNP_TYPE_XML_DOC,
+ xml_doc_get_type (),
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_NAME |
@@ -854,10 +851,10 @@ gupnp_didl_lite_resource_class_init (GUPnPDIDLLiteResourceClass *klass)
* Return value: A new #GUPnPDIDLLiteResource object. Unref after usage.
**/
GUPnPDIDLLiteResource *
-gupnp_didl_lite_resource_new_from_xml (xmlNode *xml_node,
- GUPnPXMLDoc *xml_doc,
- xmlNs *dlna_ns,
- xmlNs *pv_ns)
+gupnp_didl_lite_resource_new_from_xml (xmlNode *xml_node,
+ GUPnPAVXMLDoc *xml_doc,
+ xmlNs *dlna_ns,
+ xmlNs *pv_ns)
{
return g_object_new (GUPNP_TYPE_DIDL_LITE_RESOURCE,
"xml-node", xml_node,
diff --git a/libgupnp-av/gupnp-didl-lite-resource.h b/libgupnp-av/gupnp-didl-lite-resource.h
index 5700042..bd3bb8d 100644
--- a/libgupnp-av/gupnp-didl-lite-resource.h
+++ b/libgupnp-av/gupnp-didl-lite-resource.h
@@ -31,7 +31,6 @@
#include <glib-object.h>
#include <glib.h>
#include <libxml/tree.h>
-#include <libgupnp/gupnp.h>
#include "gupnp-dlna.h"
#include "gupnp-protocol-info.h"
diff --git a/libgupnp-av/gupnp-didl-lite-writer.c b/libgupnp-av/gupnp-didl-lite-writer.c
index 73055ea..fb37c0b 100644
--- a/libgupnp-av/gupnp-didl-lite-writer.c
+++ b/libgupnp-av/gupnp-didl-lite-writer.c
@@ -43,8 +43,8 @@ G_DEFINE_TYPE (GUPnPDIDLLiteWriter,
G_TYPE_OBJECT);
struct _GUPnPDIDLLiteWriterPrivate {
- xmlNode *xml_node;
- GUPnPXMLDoc *xml_doc;
+ xmlNode *xml_node;
+ GUPnPAVXMLDoc *xml_doc;
xmlNs *upnp_ns;
xmlNs *dc_ns;
@@ -362,7 +362,7 @@ gupnp_didl_lite_writer_constructed (GObject *object)
priv = GUPNP_DIDL_LITE_WRITER (object)->priv;
doc = xmlNewDoc ((unsigned char *) "1.0");
- priv->xml_doc = gupnp_xml_doc_new (doc);
+ priv->xml_doc = xml_doc_new (doc);
priv->xml_node = xmlNewDocNode (priv->xml_doc->doc,
NULL,
@@ -391,10 +391,7 @@ gupnp_didl_lite_writer_dispose (GObject *object)
priv = GUPNP_DIDL_LITE_WRITER (object)->priv;
- if (priv->xml_doc) {
- g_object_unref (priv->xml_doc);
- priv->xml_doc = NULL;
- }
+ g_clear_pointer (&priv->xml_doc, xml_doc_unref);
object_class = G_OBJECT_CLASS (gupnp_didl_lite_writer_parent_class);
object_class->dispose (object);
diff --git a/libgupnp-av/gupnp-didl-lite-writer.h b/libgupnp-av/gupnp-didl-lite-writer.h
index 0ec82f1..1546751 100644
--- a/libgupnp-av/gupnp-didl-lite-writer.h
+++ b/libgupnp-av/gupnp-didl-lite-writer.h
@@ -22,10 +22,8 @@
#ifndef __GUPNP_DIDL_LITE_WRITER_H__
#define __GUPNP_DIDL_LITE_WRITER_H__
-
#include <stdarg.h>
#include <glib-object.h>
-#include <libsoup/soup-uri.h>
#include "gupnp-dlna.h"
#include "gupnp-didl-lite-item.h"
diff --git a/libgupnp-av/gupnp-feature-list-parser.c b/libgupnp-av/gupnp-feature-list-parser.c
index 02d49c4..85fb232 100644
--- a/libgupnp-av/gupnp-feature-list-parser.c
+++ b/libgupnp-av/gupnp-feature-list-parser.c
@@ -130,8 +130,8 @@ gupnp_feature_list_parser_parse_text
doc = xmlRecoverMemory (text, strlen (text));
if (doc == NULL) {
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_PARSE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
"Could not parse FeatureList XML:\n%s", text);
return NULL;
@@ -141,8 +141,8 @@ gupnp_feature_list_parser_parse_text
element = xml_util_get_element ((xmlNode *) doc, "Features", NULL);
if (element == NULL) {
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_NO_NODE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
"No 'Features' node in the XML:\n%s",
text);
xmlFreeDoc (doc);
@@ -163,8 +163,8 @@ gupnp_feature_list_parser_parse_text
"version");
if (!name || !version) {
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_INVALID_ATTRIBUTE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
"Invalid attributes in 'Feature' "
"node in the XML:\n%s",
text);
diff --git a/libgupnp-av/gupnp-last-change-parser.c b/libgupnp-av/gupnp-last-change-parser.c
index c22bcaf..a98aecf 100644
--- a/libgupnp-av/gupnp-last-change-parser.c
+++ b/libgupnp-av/gupnp-last-change-parser.c
@@ -162,8 +162,8 @@ gupnp_last_change_parser_parse_last_change_valist
doc = xmlParseDoc ((const xmlChar *) last_change_xml);
if (doc == NULL) {
g_set_error (error,
- GUPNP_XML_ERROR,
- GUPNP_XML_ERROR_PARSE,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
"Could not parse LastChange xml");
return FALSE;
diff --git a/libgupnp-av/gupnp-last-change-parser.h b/libgupnp-av/gupnp-last-change-parser.h
index de82ebc..cd14ac6 100644
--- a/libgupnp-av/gupnp-last-change-parser.h
+++ b/libgupnp-av/gupnp-last-change-parser.h
@@ -24,7 +24,7 @@
#ifndef __GUPNP_LAST_CHANGE_PARSER_H__
#define __GUPNP_LAST_CHANGE_PARSER_H__
-#include <libgupnp/gupnp.h>
+#include <glib-object.h>
G_BEGIN_DECLS
diff --git a/libgupnp-av/gupnp-protocol-info.c b/libgupnp-av/gupnp-protocol-info.c
index 8ff3e52..d89423e 100644
--- a/libgupnp-av/gupnp-protocol-info.c
+++ b/libgupnp-av/gupnp-protocol-info.c
@@ -32,7 +32,6 @@
#include <string.h>
#include <stdlib.h>
-#include <libgupnp/gupnp.h>
#include "gupnp-protocol-info.h"
#include "gupnp-av-error.h"
diff --git a/libgupnp-av/xml-util.c b/libgupnp-av/xml-util.c
index d1a55fb..da718b2 100644
--- a/libgupnp-av/xml-util.c
+++ b/libgupnp-av/xml-util.c
@@ -44,6 +44,42 @@ static GUPnPXMLNamespaceDescription gupnp_xml_namespaces[] =
{ NULL }
};
+GUPnPAVXMLDoc *
+xml_doc_new (xmlDoc *doc)
+{
+ GUPnPAVXMLDoc *ret = NULL;
+
+ g_return_val_if_fail (doc, NULL);
+
+ ret = g_new0 (GUPnPAVXMLDoc, 1);
+ ret->refcount = 1;
+ ret->doc = doc;
+
+ return ret;
+}
+
+GUPnPAVXMLDoc *
+xml_doc_ref (GUPnPAVXMLDoc *doc)
+{
+ g_return_val_if_fail (doc, NULL);
+ g_return_val_if_fail (doc->refcount > 0, NULL);
+ g_atomic_int_inc (&doc->refcount);
+
+ return doc;
+}
+
+void
+xml_doc_unref (GUPnPAVXMLDoc *doc)
+{
+ g_return_if_fail (doc);
+ g_return_if_fail (doc->refcount > 0);
+
+ if (g_atomic_int_dec_and_test (&doc->refcount)) {
+ xmlFreeDoc (doc->doc);
+ doc->doc = NULL;
+ }
+}
+
xmlNode *
xml_util_get_element (xmlNode *node,
...)
@@ -530,3 +566,5 @@ xml_util_get_ns (xmlDocPtr doc, GUPnPXMLNamespace ns, xmlNsPtr *ns_out)
return tmp_ns;
}
+
+G_DEFINE_BOXED_TYPE (GUPnPAVXMLDoc, xml_doc, xml_doc_ref, xml_doc_unref)
diff --git a/libgupnp-av/xml-util.h b/libgupnp-av/xml-util.h
index 811a516..9ae5b19 100644
--- a/libgupnp-av/xml-util.h
+++ b/libgupnp-av/xml-util.h
@@ -29,6 +29,7 @@
#include <glib.h>
#include <libxml/tree.h>
#include <stdarg.h>
+#include <glib-object.h>
typedef enum _GUPnPXMLNamespace
{
@@ -42,6 +43,24 @@ typedef enum _GUPnPXMLNamespace
G_BEGIN_DECLS
+typedef struct _GPnPAVXMLDoc
+{
+ volatile int refcount;
+ xmlDoc *doc;
+} GUPnPAVXMLDoc;
+
+G_GNUC_INTERNAL GUPnPAVXMLDoc *
+xml_doc_new (xmlDoc *doc);
+
+G_GNUC_INTERNAL GUPnPAVXMLDoc *
+xml_doc_ref (GUPnPAVXMLDoc *doc);
+
+G_GNUC_INTERNAL void
+xml_doc_unref (GUPnPAVXMLDoc *doc);
+
+G_GNUC_INTERNAL GType
+xml_doc_get_type (void) G_GNUC_CONST;
+
/* Misc utilities for inspecting xmlNodes */
G_GNUC_INTERNAL xmlNode *
xml_util_get_element (xmlNode *node,
diff --git a/tests/gtest/test-last-change-parser.c b/tests/gtest/test-last-change-parser.c
index 58fb717..62c9014 100644
--- a/tests/gtest/test-last-change-parser.c
+++ b/tests/gtest/test-last-change-parser.c
@@ -126,7 +126,7 @@ bogus_text (void)
g_object_unref (parser);
g_assert (r == FALSE);
- g_assert_error (error, GUPNP_XML_ERROR, GUPNP_XML_ERROR_PARSE);
+ g_assert_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE);
g_assert_cmpint (whatever, ==, -1);
}
diff --git a/tests/gtest/test-regression.c b/tests/gtest/test-regression.c
index 019143f..725d289 100644
--- a/tests/gtest/test-regression.c
+++ b/tests/gtest/test-regression.c
@@ -121,6 +121,7 @@ test_bgo705564 (void)
g_object_unref (writer);
}
+#if 0
static void
test_bgo753314 (void)
{
@@ -158,6 +159,7 @@ test_bgo753314 (void)
g_object_unref (object);
g_object_unref (writer);
}
+#endif
int main (int argc, char *argv[])
{
diff --git a/vala/Makefile.am b/vala/Makefile.am
index ddd0e52..135a36e 100644
--- a/vala/Makefile.am
+++ b/vala/Makefile.am
@@ -7,7 +7,7 @@ gupnp-av-1.0.stamp: $(top_builddir)/libgupnp-av/GUPnPAV-1.0.gir \
$(srcdir)/GUPnPAV-1.0.metadata \
$(srcdir)/gupnp-av-1.0-custom.vala
$(AM_V_GEN)$(VAPIGEN) --metadatadir=$(srcdir) \
- --pkg gupnp-1.0 --pkg=libsoup-2.4 \
+ --pkg=libsoup-2.4 \
--library=gupnp-av-1.0 --pkg=gio-2.0 --pkg=libxml-2.0 \
$(top_builddir)/libgupnp-av/GUPnPAV-1.0.gir \
$(srcdir)/gupnp-av-1.0-custom.vala && \
diff --git a/vala/gupnp-av-1.0.deps b/vala/gupnp-av-1.0.deps
index dfc90c6..1899619 100644
--- a/vala/gupnp-av-1.0.deps
+++ b/vala/gupnp-av-1.0.deps
@@ -1,2 +1 @@
-gupnp-1.0
libxml-2.0