Fix bug in libxml patch
See http://tickets.musicbrainz.org/browse/LMB-34?focusedCommentId=27184 and http://lists.musicbrainz.org/pipermail/musicbrainz-devel/2013-March/005191.html The xmlError structure were not initialized before being used, causing use of unitialized memory, and then failure of the test case (use of -D_FORTIFY_SOURCE=2 seemed to make a difference on the test case behaviour)
This commit is contained in:
parent
e387f44242
commit
0ac7e2a2da
@ -1,7 +1,8 @@
|
|||||||
diff -up libmusicbrainz-5.0.1/CMakeLists.txt.xmlParser libmusicbrainz-5.0.1/CMakeLists.txt
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
--- libmusicbrainz-5.0.1/CMakeLists.txt.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
index 16870b4..a1f5a65 100644
|
||||||
+++ libmusicbrainz-5.0.1/CMakeLists.txt 2013-01-07 12:51:33.916020435 -0500
|
--- a/CMakeLists.txt
|
||||||
@@ -20,6 +20,7 @@ SET(musicbrainz5_SOVERSION ${musicbrainz
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -20,6 +20,7 @@ SET(musicbrainz5_SOVERSION ${musicbrainz5_SOVERSION_MAJOR})
|
||||||
|
|
||||||
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
|
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
|
||||||
FIND_PACKAGE(Neon REQUIRED)
|
FIND_PACKAGE(Neon REQUIRED)
|
||||||
@ -9,9 +10,10 @@ diff -up libmusicbrainz-5.0.1/CMakeLists.txt.xmlParser libmusicbrainz-5.0.1/CMak
|
|||||||
|
|
||||||
SET(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
|
SET(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
|
||||||
SET(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Installation prefix for executables and object code libraries" FORCE)
|
SET(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Installation prefix for executables and object code libraries" FORCE)
|
||||||
diff -up libmusicbrainz-5.0.1/examples/CMakeLists.txt.xmlParser libmusicbrainz-5.0.1/examples/CMakeLists.txt
|
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
|
||||||
--- libmusicbrainz-5.0.1/examples/CMakeLists.txt.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
index 3e11469..440d4f2 100644
|
||||||
+++ libmusicbrainz-5.0.1/examples/CMakeLists.txt 2013-01-07 12:51:33.917020435 -0500
|
--- a/examples/CMakeLists.txt
|
||||||
|
+++ b/examples/CMakeLists.txt
|
||||||
@@ -1,5 +1,5 @@
|
@@ -1,5 +1,5 @@
|
||||||
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
|
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
|
||||||
-LINK_LIBRARIES(musicbrainz5 ${NEON_LIBRARIES})
|
-LINK_LIBRARIES(musicbrainz5 ${NEON_LIBRARIES})
|
||||||
@ -20,9 +22,10 @@ diff -up libmusicbrainz-5.0.1/examples/CMakeLists.txt.xmlParser libmusicbrainz-5
|
|||||||
|
|
||||||
ADD_EXECUTABLE(cdlookup cdlookup.cc)
|
ADD_EXECUTABLE(cdlookup cdlookup.cc)
|
||||||
ADD_EXECUTABLE(cdlookup_c cdlookup_c.c)
|
ADD_EXECUTABLE(cdlookup_c cdlookup_c.c)
|
||||||
diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h
|
diff --git a/include/musicbrainz5/xmlParser.h b/include/musicbrainz5/xmlParser.h
|
||||||
--- libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
index 56b29d7..45db5fc 100644
|
||||||
+++ libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h 2013-01-07 12:51:33.918020435 -0500
|
--- a/include/musicbrainz5/xmlParser.h
|
||||||
|
+++ b/include/musicbrainz5/xmlParser.h
|
||||||
@@ -1,733 +1,111 @@
|
@@ -1,733 +1,111 @@
|
||||||
-/****************************************************************************/
|
-/****************************************************************************/
|
||||||
-/*! \mainpage XMLParser library
|
-/*! \mainpage XMLParser library
|
||||||
@ -108,12 +111,15 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- * work.has been done.
|
- * work.has been done.
|
||||||
- *
|
- *
|
||||||
- ****************************************************************************/
|
- ****************************************************************************/
|
||||||
-
|
+/* --------------------------------------------------------------------------
|
||||||
|
|
||||||
-#ifndef __INCLUDE_XML_NODE__
|
-#ifndef __INCLUDE_XML_NODE__
|
||||||
-#define __INCLUDE_XML_NODE__
|
-#define __INCLUDE_XML_NODE__
|
||||||
-
|
+ libmusicbrainz5 - Client library to access MusicBrainz
|
||||||
|
|
||||||
-#include <stdlib.h>
|
-#include <stdlib.h>
|
||||||
-
|
+ Copyright (C) 2012 Christophe Fergeau
|
||||||
|
|
||||||
-#ifdef _UNICODE
|
-#ifdef _UNICODE
|
||||||
-// If you comment the next "define" line then the library will never "switch to" _UNICODE (wchar_t*) mode (16/32 bits per characters).
|
-// If you comment the next "define" line then the library will never "switch to" _UNICODE (wchar_t*) mode (16/32 bits per characters).
|
||||||
-// This is useful when you get error messages like:
|
-// This is useful when you get error messages like:
|
||||||
@ -122,14 +128,12 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
-// must be defined) or utf8-mode(the pre-processor variable must be undefined).
|
-// must be defined) or utf8-mode(the pre-processor variable must be undefined).
|
||||||
-#define _XMLWIDECHAR
|
-#define _XMLWIDECHAR
|
||||||
-#endif
|
-#endif
|
||||||
+/* --------------------------------------------------------------------------
|
-
|
||||||
|
|
||||||
-#if defined(WIN32) || defined(UNDER_CE) || defined(_WIN32) || defined(WIN64) || defined(__BORLANDC__)
|
-#if defined(WIN32) || defined(UNDER_CE) || defined(_WIN32) || defined(WIN64) || defined(__BORLANDC__)
|
||||||
-// comment the next line if you are under windows and the compiler is not Microsoft Visual Studio (6.0 or .NET) or Borland
|
-// comment the next line if you are under windows and the compiler is not Microsoft Visual Studio (6.0 or .NET) or Borland
|
||||||
-#define _XMLWINDOWS
|
-#define _XMLWINDOWS
|
||||||
-#endif
|
-#endif
|
||||||
+ libmusicbrainz5 - Client library to access MusicBrainz
|
-
|
||||||
|
|
||||||
-#ifdef XMLDLLENTRY
|
-#ifdef XMLDLLENTRY
|
||||||
-#undef XMLDLLENTRY
|
-#undef XMLDLLENTRY
|
||||||
-#endif
|
-#endif
|
||||||
@ -142,19 +146,22 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
-#else
|
-#else
|
||||||
-#define XMLDLLENTRY
|
-#define XMLDLLENTRY
|
||||||
-#endif
|
-#endif
|
||||||
+ Copyright (C) 2012 Christophe Fergeau
|
+ This file is part of libmusicbrainz5.
|
||||||
|
|
||||||
-// uncomment the next line if you want no support for wchar_t* (no need for the <wchar.h> or <tchar.h> libraries anymore to compile)
|
-// uncomment the next line if you want no support for wchar_t* (no need for the <wchar.h> or <tchar.h> libraries anymore to compile)
|
||||||
-//#define XML_NO_WIDE_CHAR
|
-//#define XML_NO_WIDE_CHAR
|
||||||
+ This file is part of libmusicbrainz5.
|
+ This library is free software; you can redistribute it and/or
|
||||||
|
+ modify it under the terms of v2 of the GNU Lesser General Public
|
||||||
|
+ License as published by the Free Software Foundation.
|
||||||
|
|
||||||
-#ifdef XML_NO_WIDE_CHAR
|
-#ifdef XML_NO_WIDE_CHAR
|
||||||
-#undef _XMLWINDOWS
|
-#undef _XMLWINDOWS
|
||||||
-#undef _XMLWIDECHAR
|
-#undef _XMLWIDECHAR
|
||||||
-#endif
|
-#endif
|
||||||
+ This library is free software; you can redistribute it and/or
|
+ libmusicbrainz5 is distributed in the hope that it will be useful,
|
||||||
+ modify it under the terms of v2 of the GNU Lesser General Public
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
+ License as published by the Free Software Foundation.
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
+ Lesser General Public License for more details.
|
||||||
|
|
||||||
-#ifdef _XMLWINDOWS
|
-#ifdef _XMLWINDOWS
|
||||||
-#include <tchar.h>
|
-#include <tchar.h>
|
||||||
@ -165,10 +172,8 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- // to have 'mbsrtowcs' for WIDECHAR version
|
- // to have 'mbsrtowcs' for WIDECHAR version
|
||||||
-#endif
|
-#endif
|
||||||
-#endif
|
-#endif
|
||||||
+ libmusicbrainz5 is distributed in the hope that it will be useful,
|
+ You should have received a copy of the GNU General Public License
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
+ along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
+ Lesser General Public License for more details.
|
|
||||||
|
|
||||||
-// Some common types for char set portable code
|
-// Some common types for char set portable code
|
||||||
-#ifdef _XMLWIDECHAR
|
-#ifdef _XMLWIDECHAR
|
||||||
@ -188,27 +193,15 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
-#ifndef TRUE
|
-#ifndef TRUE
|
||||||
- #define TRUE 1
|
- #define TRUE 1
|
||||||
-#endif /* TRUE */
|
-#endif /* TRUE */
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+ $Id$
|
+ $Id$
|
||||||
+
|
|
||||||
+----------------------------------------------------------------------------*/
|
+----------------------------------------------------------------------------*/
|
||||||
+#ifndef _MUSICBRAINZ5_XMLPARSER_H
|
+#ifndef _MUSICBRAINZ5_XMLPARSER_H
|
||||||
+#define _MUSICBRAINZ5_XMLPARSER_H
|
+#define _MUSICBRAINZ5_XMLPARSER_H
|
||||||
+
|
|
||||||
+#include <string>
|
|
||||||
+#include <libxml/tree.h>
|
|
||||||
+
|
|
||||||
+typedef xmlError XMLResults;
|
|
||||||
|
|
||||||
+const int eXMLErrorNone = 0;
|
|
||||||
|
|
||||||
-/// Enumeration for XML parse errors.
|
-/// Enumeration for XML parse errors.
|
||||||
-typedef enum XMLError
|
-typedef enum XMLError
|
||||||
+class XMLAttribute;
|
-{
|
||||||
+class XMLNode
|
|
||||||
{
|
|
||||||
- eXMLErrorNone = 0,
|
- eXMLErrorNone = 0,
|
||||||
- eXMLErrorMissingEndTag,
|
- eXMLErrorMissingEndTag,
|
||||||
- eXMLErrorNoXMLTagFound,
|
- eXMLErrorNoXMLTagFound,
|
||||||
@ -232,47 +225,26 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- eXMLErrorBase64DecodeTruncatedData,
|
- eXMLErrorBase64DecodeTruncatedData,
|
||||||
- eXMLErrorBase64DecodeBufferTooSmall
|
- eXMLErrorBase64DecodeBufferTooSmall
|
||||||
-} XMLError;
|
-} XMLError;
|
||||||
+ public:
|
+#include <string>
|
||||||
+ static XMLNode emptyNode();
|
+#include <libxml/tree.h>
|
||||||
+ bool isEmpty() const;
|
|
||||||
|
|
||||||
+ virtual ~XMLNode() {};
|
+typedef xmlError XMLResults;
|
||||||
|
|
||||||
-/// Enumeration used to manage type of data. Use in conjunction with structure XMLNodeContents
|
-/// Enumeration used to manage type of data. Use in conjunction with structure XMLNodeContents
|
||||||
-typedef enum XMLElementType
|
-typedef enum XMLElementType
|
||||||
+ const XMLAttribute getAttribute(const char *name = NULL) const;
|
-{
|
||||||
+ bool isAttributeSet(const char *name) const;
|
|
||||||
+
|
|
||||||
+ XMLNode getChildNode(const char *name = NULL) const;
|
|
||||||
+ XMLNode next() const;
|
|
||||||
+ const char *getName() const;
|
|
||||||
+ const char *getText() const;
|
|
||||||
+
|
|
||||||
+ friend bool operator== (const XMLNode &lhs, const XMLNode &rhs);
|
|
||||||
+
|
|
||||||
+ protected:
|
|
||||||
+ XMLNode(xmlNodePtr node): mNode(node) {};
|
|
||||||
+
|
|
||||||
+ xmlNodePtr mNode;
|
|
||||||
+
|
|
||||||
+ private:
|
|
||||||
+ xmlAttrPtr getAttributeRaw(const char *name) const;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+inline bool operator== (const XMLNode &lhs, const XMLNode &rhs)
|
|
||||||
{
|
|
||||||
- eNodeChild=0,
|
- eNodeChild=0,
|
||||||
- eNodeAttribute=1,
|
- eNodeAttribute=1,
|
||||||
- eNodeText=2,
|
- eNodeText=2,
|
||||||
- eNodeClear=3,
|
- eNodeClear=3,
|
||||||
- eNodeNULL=4
|
- eNodeNULL=4
|
||||||
-} XMLElementType;
|
-} XMLElementType;
|
||||||
+ return (lhs.mNode == rhs.mNode);
|
+const int eXMLErrorNone = 0;
|
||||||
+}
|
|
||||||
|
|
||||||
-/// Structure used to obtain error details if the parse fails.
|
-/// Structure used to obtain error details if the parse fails.
|
||||||
-typedef struct XMLResults
|
-typedef struct XMLResults
|
||||||
+inline bool operator!= (const XMLNode &lhs, const XMLNode &rhs)
|
+class XMLAttribute;
|
||||||
|
+class XMLNode
|
||||||
{
|
{
|
||||||
- enum XMLError error;
|
- enum XMLError error;
|
||||||
- int nLine,nColumn;
|
- int nLine,nColumn;
|
||||||
@ -306,19 +278,11 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- * <li> XMLNode::createXMLTopNode (or XMLNode::createXMLTopNode_WOSD)</li>
|
- * <li> XMLNode::createXMLTopNode (or XMLNode::createXMLTopNode_WOSD)</li>
|
||||||
- * </ul> */
|
- * </ul> */
|
||||||
-typedef struct XMLDLLENTRY XMLNode
|
-typedef struct XMLDLLENTRY XMLNode
|
||||||
+ return !(lhs == rhs);
|
-{
|
||||||
+}
|
|
||||||
+
|
|
||||||
+class XMLRootNode: public XMLNode
|
|
||||||
{
|
|
||||||
- private:
|
- private:
|
||||||
+ public:
|
-
|
||||||
+ static XMLNode* parseString(std::string &xml, XMLResults *results);
|
|
||||||
+ static XMLNode* parseFile(const std::string &filename, XMLResults *results);
|
|
||||||
|
|
||||||
- struct XMLNodeDataTag;
|
- struct XMLNodeDataTag;
|
||||||
+ virtual ~XMLRootNode() { if (mDoc != NULL) xmlFreeDoc(mDoc); };
|
-
|
||||||
|
|
||||||
- /// Constructors are protected, so use instead one of: XMLNode::parseString, XMLNode::parseFile, XMLNode::openFileHelper, XMLNode::createXMLTopNode
|
- /// Constructors are protected, so use instead one of: XMLNode::parseString, XMLNode::parseFile, XMLNode::openFileHelper, XMLNode::createXMLTopNode
|
||||||
- XMLNode(struct XMLNodeDataTag *pParent, XMLSTR lpszName, char isDeclaration);
|
- XMLNode(struct XMLNodeDataTag *pParent, XMLSTR lpszName, char isDeclaration);
|
||||||
- /// Constructors are protected, so use instead one of: XMLNode::parseString, XMLNode::parseFile, XMLNode::openFileHelper, XMLNode::createXMLTopNode
|
- /// Constructors are protected, so use instead one of: XMLNode::parseString, XMLNode::parseFile, XMLNode::openFileHelper, XMLNode::createXMLTopNode
|
||||||
@ -356,7 +320,10 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- * @param tag the name of the first tag inside the XML file. If the tag parameter is omitted, this function returns a node that represents the head of the xml document including the declaration term (<? ... ?>).
|
- * @param tag the name of the first tag inside the XML file. If the tag parameter is omitted, this function returns a node that represents the head of the xml document including the declaration term (<? ... ?>).
|
||||||
- * @param pResults a pointer to a XMLResults variable that will contain some information that can be used to trace the XML parsing error. You can have a user-friendly explanation of the parsing error with the "getError" function.
|
- * @param pResults a pointer to a XMLResults variable that will contain some information that can be used to trace the XML parsing error. You can have a user-friendly explanation of the parsing error with the "getError" function.
|
||||||
- */
|
- */
|
||||||
-
|
+ public:
|
||||||
|
+ static XMLNode emptyNode();
|
||||||
|
+ bool isEmpty() const;
|
||||||
|
|
||||||
- /// Parse an XML file and return the root of a XMLNode tree representing the file. A very crude error checking is made. An attempt to guess the Char Encoding used in the file is made.
|
- /// Parse an XML file and return the root of a XMLNode tree representing the file. A very crude error checking is made. An attempt to guess the Char Encoding used in the file is made.
|
||||||
- static XMLNode openFileHelper(XMLCSTR filename, XMLCSTR tag=NULL);
|
- static XMLNode openFileHelper(XMLCSTR filename, XMLCSTR tag=NULL);
|
||||||
- /**< The "openFileHelper" function reports to the screen all the warnings and errors that occurred during parsing of the XML file.
|
- /**< The "openFileHelper" function reports to the screen all the warnings and errors that occurred during parsing of the XML file.
|
||||||
@ -375,16 +342,23 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- * @param filename the path of the XML file to parse.
|
- * @param filename the path of the XML file to parse.
|
||||||
- * @param tag the name of the first tag inside the XML file. If the tag parameter is omitted, this function returns a node that represents the head of the xml document including the declaration term (<? ... ?>).
|
- * @param tag the name of the first tag inside the XML file. If the tag parameter is omitted, this function returns a node that represents the head of the xml document including the declaration term (<? ... ?>).
|
||||||
- */
|
- */
|
||||||
-
|
+ virtual ~XMLNode() {};
|
||||||
|
|
||||||
- static XMLCSTR getError(XMLError error); ///< this gives you a user-friendly explanation of the parsing error
|
- static XMLCSTR getError(XMLError error); ///< this gives you a user-friendly explanation of the parsing error
|
||||||
-
|
+ const XMLAttribute getAttribute(const char *name = NULL) const;
|
||||||
|
+ bool isAttributeSet(const char *name) const;
|
||||||
|
|
||||||
- /// Create an XML string starting from the current XMLNode.
|
- /// Create an XML string starting from the current XMLNode.
|
||||||
- XMLSTR createXMLString(int nFormat=1, int *pnSize=NULL) const;
|
- XMLSTR createXMLString(int nFormat=1, int *pnSize=NULL) const;
|
||||||
- /**< The returned string should be free'd using the "freeXMLString" function.
|
- /**< The returned string should be free'd using the "freeXMLString" function.
|
||||||
- *
|
- *
|
||||||
- * If nFormat==0, no formatting is required otherwise this returns an user friendly XML string from a given element
|
- * If nFormat==0, no formatting is required otherwise this returns an user friendly XML string from a given element
|
||||||
- * with appropriate white spaces and carriage returns. if pnSize is given it returns the size in character of the string. */
|
- * with appropriate white spaces and carriage returns. if pnSize is given it returns the size in character of the string. */
|
||||||
-
|
+ XMLNode getChildNode(const char *name = NULL) const;
|
||||||
|
+ XMLNode next() const;
|
||||||
|
+ const char *getName() const;
|
||||||
|
+ const char *getText() const;
|
||||||
|
|
||||||
- /// Save the content of an xmlNode inside a file
|
- /// Save the content of an xmlNode inside a file
|
||||||
- XMLError writeToFile(XMLCSTR filename,
|
- XMLError writeToFile(XMLCSTR filename,
|
||||||
- const char *encoding=NULL,
|
- const char *encoding=NULL,
|
||||||
@ -395,7 +369,8 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- * If "_XMLWIDECHAR=1", then the "encoding" parameter is ignored and always set to "utf-16".
|
- * If "_XMLWIDECHAR=1", then the "encoding" parameter is ignored and always set to "utf-16".
|
||||||
- * If no "encoding" parameter is given the "ISO-8859-1" encoding is used. */
|
- * If no "encoding" parameter is given the "ISO-8859-1" encoding is used. */
|
||||||
- /** @} */
|
- /** @} */
|
||||||
-
|
+ friend bool operator== (const XMLNode &lhs, const XMLNode &rhs);
|
||||||
|
|
||||||
- /** @defgroup navigate Navigate the XMLNode structure
|
- /** @defgroup navigate Navigate the XMLNode structure
|
||||||
- * @ingroup XMLParserGeneral
|
- * @ingroup XMLParserGeneral
|
||||||
- * @{ */
|
- * @{ */
|
||||||
@ -414,7 +389,9 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- ///< return the first child node with specific path
|
- ///< return the first child node with specific path
|
||||||
- XMLNode getChildNodeByPathNonConst(XMLSTR path, char createNodeIfMissing=0, XMLCHAR sep='/');
|
- XMLNode getChildNodeByPathNonConst(XMLSTR path, char createNodeIfMissing=0, XMLCHAR sep='/');
|
||||||
- ///< return the first child node with specific path.
|
- ///< return the first child node with specific path.
|
||||||
-
|
+ protected:
|
||||||
|
+ XMLNode(xmlNodePtr node): mNode(node) {};
|
||||||
|
|
||||||
- int nChildNode(XMLCSTR name) const; ///< return the number of child node with specific name
|
- int nChildNode(XMLCSTR name) const; ///< return the number of child node with specific name
|
||||||
- int nChildNode() const; ///< nbr of child node
|
- int nChildNode() const; ///< nbr of child node
|
||||||
- XMLAttribute getAttribute(int i=0) const; ///< return ith attribute
|
- XMLAttribute getAttribute(int i=0) const; ///< return ith attribute
|
||||||
@ -433,11 +410,15 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- XMLNode deepCopy() const; ///< deep copy (duplicate/clone) a XMLNode
|
- XMLNode deepCopy() const; ///< deep copy (duplicate/clone) a XMLNode
|
||||||
- static XMLNode emptyNode(); ///< return XMLNode::emptyXMLNode;
|
- static XMLNode emptyNode(); ///< return XMLNode::emptyXMLNode;
|
||||||
- /** @} */
|
- /** @} */
|
||||||
-
|
+ xmlNodePtr mNode;
|
||||||
|
|
||||||
- ~XMLNode();
|
- ~XMLNode();
|
||||||
- XMLNode(const XMLNode &A); ///< to allow shallow/fast copy:
|
- XMLNode(const XMLNode &A); ///< to allow shallow/fast copy:
|
||||||
- XMLNode& operator=( const XMLNode& A ); ///< to allow shallow/fast copy:
|
- XMLNode& operator=( const XMLNode& A ); ///< to allow shallow/fast copy:
|
||||||
-
|
+ private:
|
||||||
|
+ xmlAttrPtr getAttributeRaw(const char *name) const;
|
||||||
|
+};
|
||||||
|
|
||||||
- XMLNode(): d(NULL){};
|
- XMLNode(): d(NULL){};
|
||||||
- static XMLNode emptyXMLNode;
|
- static XMLNode emptyXMLNode;
|
||||||
- static XMLClear emptyXMLClear;
|
- static XMLClear emptyXMLClear;
|
||||||
@ -684,12 +665,11 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- static void exactMemory(XMLNodeData *d);
|
- static void exactMemory(XMLNodeData *d);
|
||||||
- static int detachFromParent(XMLNodeData *d);
|
- static int detachFromParent(XMLNodeData *d);
|
||||||
-} XMLNode;
|
-} XMLNode;
|
||||||
+ private:
|
-
|
||||||
+ XMLRootNode(xmlDocPtr doc);
|
|
||||||
|
|
||||||
-/// This structure is given by the function XMLNode::enumContents.
|
-/// This structure is given by the function XMLNode::enumContents.
|
||||||
-typedef struct XMLNodeContents
|
-typedef struct XMLNodeContents
|
||||||
-{
|
+inline bool operator== (const XMLNode &lhs, const XMLNode &rhs)
|
||||||
|
{
|
||||||
- /// This dictates what's the content of the XMLNodeContent
|
- /// This dictates what's the content of the XMLNodeContent
|
||||||
- enum XMLElementType etype;
|
- enum XMLElementType etype;
|
||||||
- /**< should be an union to access the appropriate data. Compiler does not allow union of object with constructor... too bad. */
|
- /**< should be an union to access the appropriate data. Compiler does not allow union of object with constructor... too bad. */
|
||||||
@ -709,7 +689,9 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- * a very handy function when used with all the "XMLNode::*_WOSD" functions (\link xmlWOSD \endlink).
|
- * a very handy function when used with all the "XMLNode::*_WOSD" functions (\link xmlWOSD \endlink).
|
||||||
- * @param cbData If !=0 then cbData is the number of chars to duplicate. New strings allocated with
|
- * @param cbData If !=0 then cbData is the number of chars to duplicate. New strings allocated with
|
||||||
- * this function should be free'd using the "freeXMLString" function. */
|
- * this function should be free'd using the "freeXMLString" function. */
|
||||||
-
|
+ return (lhs.mNode == rhs.mNode);
|
||||||
|
+}
|
||||||
|
|
||||||
-/// to free the string allocated inside the "stringDup" function or the "createXMLString" function.
|
-/// to free the string allocated inside the "stringDup" function or the "createXMLString" function.
|
||||||
-XMLDLLENTRY void freeXMLString(XMLSTR t); // {free(t);}
|
-XMLDLLENTRY void freeXMLString(XMLSTR t); // {free(t);}
|
||||||
-/** @} */
|
-/** @} */
|
||||||
@ -745,14 +727,17 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- * you must not use the "ToXMLStringTool" class (because the "XMLNode" class does the
|
- * you must not use the "ToXMLStringTool" class (because the "XMLNode" class does the
|
||||||
- * processing job for you during rendering).*/
|
- * processing job for you during rendering).*/
|
||||||
-typedef struct XMLDLLENTRY ToXMLStringTool
|
-typedef struct XMLDLLENTRY ToXMLStringTool
|
||||||
-{
|
+inline bool operator!= (const XMLNode &lhs, const XMLNode &rhs)
|
||||||
|
{
|
||||||
-public:
|
-public:
|
||||||
- ToXMLStringTool(): buf(NULL),buflen(0){}
|
- ToXMLStringTool(): buf(NULL),buflen(0){}
|
||||||
- ~ToXMLStringTool();
|
- ~ToXMLStringTool();
|
||||||
- void freeBuffer();///<call this function when you have finished using this object to release memory used by the internal buffer.
|
- void freeBuffer();///<call this function when you have finished using this object to release memory used by the internal buffer.
|
||||||
-
|
-
|
||||||
- XMLSTR toXML(XMLCSTR source);///< returns a pointer to an internal buffer that contains a XML-encoded string based on the "source" parameter.
|
- XMLSTR toXML(XMLCSTR source);///< returns a pointer to an internal buffer that contains a XML-encoded string based on the "source" parameter.
|
||||||
-
|
+ return !(lhs == rhs);
|
||||||
|
+}
|
||||||
|
|
||||||
- /** The "toXMLUnSafe" function is deprecated because there is a possibility of
|
- /** The "toXMLUnSafe" function is deprecated because there is a possibility of
|
||||||
- * "destination-buffer-overflow". It converts the string
|
- * "destination-buffer-overflow". It converts the string
|
||||||
- * "source" to the string "dest". */
|
- * "source" to the string "dest". */
|
||||||
@ -778,10 +763,7 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- * functions can also be used to "encrypt/decrypt" some critical data contained inside
|
- * functions can also be used to "encrypt/decrypt" some critical data contained inside
|
||||||
- * the XML (it's not a strong encryption at all, but sometimes it can be useful). */
|
- * the XML (it's not a strong encryption at all, but sometimes it can be useful). */
|
||||||
-typedef struct XMLDLLENTRY XMLParserBase64Tool
|
-typedef struct XMLDLLENTRY XMLParserBase64Tool
|
||||||
+ mutable xmlDocPtr mDoc;
|
+class XMLRootNode: public XMLNode
|
||||||
+};
|
|
||||||
+
|
|
||||||
+class XMLAttribute
|
|
||||||
{
|
{
|
||||||
-public:
|
-public:
|
||||||
- XMLParserBase64Tool(): buf(NULL),buflen(0){}
|
- XMLParserBase64Tool(): buf(NULL),buflen(0){}
|
||||||
@ -791,24 +773,32 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- /**
|
- /**
|
||||||
- * @param formatted If "formatted"=true, some space will be reserved for a carriage-return every 72 chars. */
|
- * @param formatted If "formatted"=true, some space will be reserved for a carriage-return every 72 chars. */
|
||||||
- static int encodeLength(int inBufLen, char formatted=0); ///< return the length of the base64 string that encodes a data buffer of size inBufLen bytes.
|
- static int encodeLength(int inBufLen, char formatted=0); ///< return the length of the base64 string that encodes a data buffer of size inBufLen bytes.
|
||||||
-
|
+ public:
|
||||||
|
+ static XMLNode* parseString(std::string &xml, XMLResults *results);
|
||||||
|
+ static XMLNode* parseFile(const std::string &filename, XMLResults *results);
|
||||||
|
|
||||||
- /**
|
- /**
|
||||||
- * The "base64Encode" function returns a string containing the base64 encoding of "inByteLen" bytes
|
- * The "base64Encode" function returns a string containing the base64 encoding of "inByteLen" bytes
|
||||||
- * from "inByteBuf". If "formatted" parameter is true, then there will be a carriage-return every 72 chars.
|
- * from "inByteBuf". If "formatted" parameter is true, then there will be a carriage-return every 72 chars.
|
||||||
- * The string will be free'd when the XMLParserBase64Tool object is deleted.
|
- * The string will be free'd when the XMLParserBase64Tool object is deleted.
|
||||||
- * All returned strings are sharing the same memory space. */
|
- * All returned strings are sharing the same memory space. */
|
||||||
- XMLSTR encode(unsigned char *inByteBuf, unsigned int inByteLen, char formatted=0); ///< returns a pointer to an internal buffer containing the base64 string containing the binary data encoded from "inByteBuf"
|
- XMLSTR encode(unsigned char *inByteBuf, unsigned int inByteLen, char formatted=0); ///< returns a pointer to an internal buffer containing the base64 string containing the binary data encoded from "inByteBuf"
|
||||||
-
|
+ virtual ~XMLRootNode() { if (mDoc != NULL) xmlFreeDoc(mDoc); };
|
||||||
|
|
||||||
- /// returns the number of bytes which will be decoded from "inString".
|
- /// returns the number of bytes which will be decoded from "inString".
|
||||||
- static unsigned int decodeSize(XMLCSTR inString, XMLError *xe=NULL);
|
- static unsigned int decodeSize(XMLCSTR inString, XMLError *xe=NULL);
|
||||||
-
|
+ private:
|
||||||
|
+ XMLRootNode(xmlDocPtr doc);
|
||||||
|
|
||||||
- /**
|
- /**
|
||||||
- * The "decode" function returns a pointer to a buffer containing the binary data decoded from "inString"
|
- * The "decode" function returns a pointer to a buffer containing the binary data decoded from "inString"
|
||||||
- * The output buffer will be free'd when the XMLParserBase64Tool object is deleted.
|
- * The output buffer will be free'd when the XMLParserBase64Tool object is deleted.
|
||||||
- * All output buffer are sharing the same memory space.
|
- * All output buffer are sharing the same memory space.
|
||||||
- * @param inString If "instring" is malformed, NULL will be returned */
|
- * @param inString If "instring" is malformed, NULL will be returned */
|
||||||
- unsigned char* decode(XMLCSTR inString, int *outByteLen=NULL, XMLError *xe=NULL); ///< returns a pointer to an internal buffer containing the binary data decoded from "inString"
|
- unsigned char* decode(XMLCSTR inString, int *outByteLen=NULL, XMLError *xe=NULL); ///< returns a pointer to an internal buffer containing the binary data decoded from "inString"
|
||||||
-
|
+ mutable xmlDocPtr mDoc;
|
||||||
|
+};
|
||||||
|
|
||||||
- /**
|
- /**
|
||||||
- * decodes data from "inString" to "outByteBuf". You need to provide the size (in byte) of "outByteBuf"
|
- * decodes data from "inString" to "outByteBuf". You need to provide the size (in byte) of "outByteBuf"
|
||||||
- * in "inMaxByteOutBuflen". If "outByteBuf" is not large enough or if data is malformed, then "FALSE"
|
- * in "inMaxByteOutBuflen". If "outByteBuf" is not large enough or if data is malformed, then "FALSE"
|
||||||
@ -821,6 +811,10 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
- void alloc(int newsize);
|
- void alloc(int newsize);
|
||||||
-}XMLParserBase64Tool;
|
-}XMLParserBase64Tool;
|
||||||
-/** @} */
|
-/** @} */
|
||||||
|
-
|
||||||
|
-#undef XMLDLLENTRY
|
||||||
|
+class XMLAttribute
|
||||||
|
+{
|
||||||
+ public:
|
+ public:
|
||||||
+ bool isEmpty() const {
|
+ bool isEmpty() const {
|
||||||
+ return (mAttr == NULL);
|
+ return (mAttr == NULL);
|
||||||
@ -838,18 +832,18 @@ diff -up libmusicbrainz-5.0.1/include/musicbrainz5/xmlParser.h.xmlParser libmusi
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ friend const XMLAttribute XMLNode::getAttribute(const char *name) const;
|
+ friend const XMLAttribute XMLNode::getAttribute(const char *name) const;
|
||||||
|
+
|
||||||
-#undef XMLDLLENTRY
|
|
||||||
+ private:
|
+ private:
|
||||||
+ XMLAttribute(xmlAttrPtr attr): mAttr(attr) {};
|
+ XMLAttribute(xmlAttrPtr attr): mAttr(attr) {};
|
||||||
+ xmlAttrPtr mAttr;
|
+ xmlAttrPtr mAttr;
|
||||||
+};
|
+};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
diff -up libmusicbrainz-5.0.1/libmusicbrainz5.pc.cmake.xmlParser libmusicbrainz-5.0.1/libmusicbrainz5.pc.cmake
|
diff --git a/libmusicbrainz5.pc.cmake b/libmusicbrainz5.pc.cmake
|
||||||
--- libmusicbrainz-5.0.1/libmusicbrainz5.pc.cmake.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
index c2f45c9..fca0de1 100644
|
||||||
+++ libmusicbrainz-5.0.1/libmusicbrainz5.pc.cmake 2013-01-07 12:51:33.918020435 -0500
|
--- a/libmusicbrainz5.pc.cmake
|
||||||
@@ -8,6 +8,7 @@ Description: The Musicbrainz Client Libr
|
+++ b/libmusicbrainz5.pc.cmake
|
||||||
|
@@ -8,6 +8,7 @@ Description: The Musicbrainz Client Library.
|
||||||
URL: http://musicbrainz.org/doc/libmusicbrainz
|
URL: http://musicbrainz.org/doc/libmusicbrainz
|
||||||
Version: ${PROJECT_VERSION}
|
Version: ${PROJECT_VERSION}
|
||||||
Requires.private: neon >= 0.25
|
Requires.private: neon >= 0.25
|
||||||
@ -857,35 +851,10 @@ diff -up libmusicbrainz-5.0.1/libmusicbrainz5.pc.cmake.xmlParser libmusicbrainz-
|
|||||||
Libs: -L${LIB_INSTALL_DIR} -lmusicbrainz5
|
Libs: -L${LIB_INSTALL_DIR} -lmusicbrainz5
|
||||||
Cflags: -I${INCLUDE_INSTALL_DIR}
|
Cflags: -I${INCLUDE_INSTALL_DIR}
|
||||||
|
|
||||||
diff -up libmusicbrainz-5.0.1/src/cinterface.xml.xmlParser libmusicbrainz-5.0.1/src/cinterface.xml
|
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||||
--- libmusicbrainz-5.0.1/src/cinterface.xml.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
index 2ee102f..368dd93 100644
|
||||||
+++ libmusicbrainz-5.0.1/src/cinterface.xml 2013-01-07 12:52:21.992035823 -0500
|
--- a/src/CMakeLists.txt
|
||||||
@@ -1,5 +1,4 @@
|
+++ b/src/CMakeLists.txt
|
||||||
<!--
|
|
||||||
- --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
libmusicbrainz5 - Client library to access MusicBrainz
|
|
||||||
|
|
||||||
@@ -21,7 +20,6 @@
|
|
||||||
|
|
||||||
$Id$
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
-->
|
|
||||||
|
|
||||||
<cinterface>
|
|
||||||
@@ -218,7 +216,7 @@ extern "C"
|
|
||||||
<property name="artist" type="string"/>
|
|
||||||
<property name="length" type="integer"/>
|
|
||||||
</class>
|
|
||||||
- <class name="puid" uppername="PUID" uppername="PUID">
|
|
||||||
+ <class name="puid" uppername="PUID">
|
|
||||||
<property name="id" uppername="ID" type="string"/>
|
|
||||||
<property name="recordinglist" uppername="RecordingList" type="object"/>
|
|
||||||
</class>
|
|
||||||
diff -up libmusicbrainz-5.0.1/src/CMakeLists.txt.xmlParser libmusicbrainz-5.0.1/src/CMakeLists.txt
|
|
||||||
--- libmusicbrainz-5.0.1/src/CMakeLists.txt.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
|
||||||
+++ libmusicbrainz-5.0.1/src/CMakeLists.txt 2013-01-07 12:51:33.919020436 -0500
|
|
||||||
@@ -1,14 +1,15 @@
|
@@ -1,14 +1,15 @@
|
||||||
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
|
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/../include ${NEON_INCLUDE_DIR})
|
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/../include ${NEON_INCLUDE_DIR})
|
||||||
@ -923,10 +892,11 @@ diff -up libmusicbrainz-5.0.1/src/CMakeLists.txt.xmlParser libmusicbrainz-5.0.1/
|
|||||||
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
|
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
|
||||||
INSTALL(TARGETS musicbrainz5 DESTINATION ${LIB_INSTALL_DIR})
|
INSTALL(TARGETS musicbrainz5 DESTINATION ${LIB_INSTALL_DIR})
|
||||||
diff -up libmusicbrainz-5.0.1/src/Entity.cc.xmlParser libmusicbrainz-5.0.1/src/Entity.cc
|
diff --git a/src/Entity.cc b/src/Entity.cc
|
||||||
--- libmusicbrainz-5.0.1/src/Entity.cc.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
index 0644377..a1bb1ca 100644
|
||||||
+++ libmusicbrainz-5.0.1/src/Entity.cc 2013-01-07 12:51:33.919020436 -0500
|
--- a/src/Entity.cc
|
||||||
@@ -80,10 +80,12 @@ void MusicBrainz5::CEntity::Parse(const
|
+++ b/src/Entity.cc
|
||||||
|
@@ -80,10 +80,12 @@ void MusicBrainz5::CEntity::Parse(const XMLNode& Node)
|
||||||
{
|
{
|
||||||
if (!Node.isEmpty())
|
if (!Node.isEmpty())
|
||||||
{
|
{
|
||||||
@ -942,7 +912,7 @@ diff -up libmusicbrainz-5.0.1/src/Entity.cc.xmlParser libmusicbrainz-5.0.1/src/E
|
|||||||
|
|
||||||
if ("ext:"==Name.substr(0,4))
|
if ("ext:"==Name.substr(0,4))
|
||||||
m_d->m_ExtAttributes[Name.substr(4)]=Value;
|
m_d->m_ExtAttributes[Name.substr(4)]=Value;
|
||||||
@@ -93,10 +95,10 @@ void MusicBrainz5::CEntity::Parse(const
|
@@ -93,10 +95,10 @@ void MusicBrainz5::CEntity::Parse(const XMLNode& Node)
|
||||||
|
|
||||||
//std::cout << "Node: " << std::endl << Node.createXMLString(true) << std::endl;
|
//std::cout << "Node: " << std::endl << Node.createXMLString(true) << std::endl;
|
||||||
|
|
||||||
@ -956,29 +926,107 @@ diff -up libmusicbrainz-5.0.1/src/Entity.cc.xmlParser libmusicbrainz-5.0.1/src/E
|
|||||||
std::string Name=ChildNode.getName();
|
std::string Name=ChildNode.getName();
|
||||||
std::string Value;
|
std::string Value;
|
||||||
if (ChildNode.getText())
|
if (ChildNode.getText())
|
||||||
diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5.0.1/src/make-c-interface.cc
|
diff --git a/src/Query.cc b/src/Query.cc
|
||||||
--- libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
index d132ae7..a835c84 100644
|
||||||
+++ libmusicbrainz-5.0.1/src/make-c-interface.cc 2013-01-07 12:51:33.920020438 -0500
|
--- a/src/Query.cc
|
||||||
@@ -28,6 +28,7 @@
|
+++ b/src/Query.cc
|
||||||
|
@@ -158,15 +158,17 @@ MusicBrainz5::CMetadata MusicBrainz5::CQuery::PerformQuery(const std::string& Qu
|
||||||
|
#endif
|
||||||
|
|
||||||
|
XMLResults Results;
|
||||||
|
- XMLNode TopNode=XMLNode::parseString(strData.c_str(), 0, &Results);
|
||||||
|
- if (Results.error==eXMLErrorNone)
|
||||||
|
+ memset(&Results, 0, sizeof(Results));
|
||||||
|
+ XMLNode *TopNode = XMLRootNode::parseString(strData, &Results);
|
||||||
|
+ if (Results.code==eXMLErrorNone)
|
||||||
|
{
|
||||||
|
- XMLNode MetadataNode=TopNode.getChildNode("metadata");
|
||||||
|
+ XMLNode MetadataNode=*TopNode;
|
||||||
|
if (!MetadataNode.isEmpty())
|
||||||
|
{
|
||||||
|
Metadata=CMetadata(MetadataNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ delete TopNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -393,10 +395,11 @@ bool MusicBrainz5::CQuery::EditCollection(const std::string& CollectionID, const
|
||||||
|
#endif
|
||||||
|
|
||||||
|
XMLResults Results;
|
||||||
|
- XMLNode TopNode=XMLNode::parseString(strData.c_str(), 0, &Results);
|
||||||
|
- if (Results.error==eXMLErrorNone)
|
||||||
|
+ memset(&Results, 0, sizeof(Results));
|
||||||
|
+ XMLNode *TopNode = XMLRootNode::parseString(strData, &Results);
|
||||||
|
+ if (Results.code==eXMLErrorNone)
|
||||||
|
{
|
||||||
|
- XMLNode MetadataNode=TopNode.getChildNode("metadata");
|
||||||
|
+ XMLNode MetadataNode=*TopNode;
|
||||||
|
if (!MetadataNode.isEmpty())
|
||||||
|
{
|
||||||
|
CMetadata Metadata(MetadataNode);
|
||||||
|
@@ -405,6 +408,7 @@ bool MusicBrainz5::CQuery::EditCollection(const std::string& CollectionID, const
|
||||||
|
RetVal=RetVal && true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ delete TopNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/cinterface.xml b/src/cinterface.xml
|
||||||
|
index ae5cf92..f492fd1 100644
|
||||||
|
--- a/src/cinterface.xml
|
||||||
|
+++ b/src/cinterface.xml
|
||||||
|
@@ -1,5 +1,4 @@
|
||||||
|
<!--
|
||||||
|
- --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
libmusicbrainz5 - Client library to access MusicBrainz
|
||||||
|
|
||||||
|
@@ -21,7 +20,6 @@
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-->
|
||||||
|
|
||||||
|
<cinterface>
|
||||||
|
@@ -218,7 +216,7 @@ extern "C"
|
||||||
|
<property name="artist" type="string"/>
|
||||||
|
<property name="length" type="integer"/>
|
||||||
|
</class>
|
||||||
|
- <class name="puid" uppername="PUID" uppername="PUID">
|
||||||
|
+ <class name="puid" uppername="PUID">
|
||||||
|
<property name="id" uppername="ID" type="string"/>
|
||||||
|
<property name="recordinglist" uppername="RecordingList" type="object"/>
|
||||||
|
</class>
|
||||||
|
diff --git a/src/make-c-interface.cc b/src/make-c-interface.cc
|
||||||
|
index 652a65b..97af3d9 100644
|
||||||
|
--- a/src/make-c-interface.cc
|
||||||
|
+++ b/src/make-c-interface.cc
|
||||||
|
@@ -28,6 +28,8 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
+#include <cstring>
|
||||||
+#include <unistd.h>
|
+#include <unistd.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@@ -51,8 +52,8 @@ int main(int argc, const char *argv[])
|
@@ -51,8 +53,9 @@ int main(int argc, const char *argv[])
|
||||||
{
|
{
|
||||||
std::string XMLFile=std::string(argv[1])+"/"+argv[2];
|
std::string XMLFile=std::string(argv[1])+"/"+argv[2];
|
||||||
XMLResults Results;
|
XMLResults Results;
|
||||||
- XMLNode TopNode=XMLNode::parseFile(XMLFile.c_str(),"cinterface",&Results);
|
- XMLNode TopNode=XMLNode::parseFile(XMLFile.c_str(),"cinterface",&Results);
|
||||||
- if (!TopNode.isEmpty())
|
- if (!TopNode.isEmpty())
|
||||||
+ XMLNode *TopNode=XMLRootNode::parseFile(XMLFile.c_str(),&Results);
|
+ XMLNode *TopNode=XMLRootNode::parseFile(XMLFile.c_str(),&Results);
|
||||||
|
+ memset(&Results, 0, sizeof(Results));
|
||||||
+ if (!TopNode->isEmpty())
|
+ if (!TopNode->isEmpty())
|
||||||
{
|
{
|
||||||
std::cout << "Generating '" << argv[3] << "/" << argv[4] << "' and '" << argv[3] << "/" << argv[5] << "'" << std::endl;
|
std::cout << "Generating '" << argv[3] << "/" << argv[4] << "' and '" << argv[3] << "/" << argv[5] << "'" << std::endl;
|
||||||
|
|
||||||
@@ -74,9 +75,10 @@ int main(int argc, const char *argv[])
|
@@ -74,9 +77,10 @@ int main(int argc, const char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -991,7 +1039,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
std::string Name=Node.getName();
|
std::string Name=Node.getName();
|
||||||
|
|
||||||
if ("boilerplate"==Name)
|
if ("boilerplate"==Name)
|
||||||
@@ -84,7 +86,7 @@ int main(int argc, const char *argv[])
|
@@ -84,7 +88,7 @@ int main(int argc, const char *argv[])
|
||||||
else if ("header"==Name)
|
else if ("header"==Name)
|
||||||
ProcessHeader(Node,Source,Include);
|
ProcessHeader(Node,Source,Include);
|
||||||
else if ("declare"==Name)
|
else if ("declare"==Name)
|
||||||
@ -1000,7 +1048,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
else if ("entity"==Name)
|
else if ("entity"==Name)
|
||||||
ProcessEntity(Node,Source,Include);
|
ProcessEntity(Node,Source,Include);
|
||||||
else if ("class"==Name)
|
else if ("class"==Name)
|
||||||
@@ -100,9 +102,11 @@ int main(int argc, const char *argv[])
|
@@ -100,9 +104,11 @@ int main(int argc, const char *argv[])
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1013,7 +1061,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -114,7 +118,7 @@ std::ofstream *GetFile(const XMLNode& No
|
@@ -114,7 +120,7 @@ std::ofstream *GetFile(const XMLNode& Node, std::ofstream& Source, std::ofstream
|
||||||
|
|
||||||
if (Node.isAttributeSet("target"))
|
if (Node.isAttributeSet("target"))
|
||||||
{
|
{
|
||||||
@ -1022,7 +1070,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
if ("source"==Target)
|
if ("source"==Target)
|
||||||
File=&Source;
|
File=&Source;
|
||||||
else if ("include"==Target)
|
else if ("include"==Target)
|
||||||
@@ -162,7 +166,7 @@ void ProcessBoilerplate(const XMLNode& N
|
@@ -162,7 +168,7 @@ void ProcessBoilerplate(const XMLNode& Node, std::ofstream& Source, std::ofstrea
|
||||||
|
|
||||||
if (Node.isAttributeSet("file"))
|
if (Node.isAttributeSet("file"))
|
||||||
{
|
{
|
||||||
@ -1031,7 +1079,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
std::ifstream InFile(FileName.c_str());
|
std::ifstream InFile(FileName.c_str());
|
||||||
if (InFile.is_open())
|
if (InFile.is_open())
|
||||||
*File << InFile.rdbuf() << std::endl;
|
*File << InFile.rdbuf() << std::endl;
|
||||||
@@ -263,11 +267,11 @@ void ProcessClass(const XMLNode& Node, s
|
@@ -263,11 +269,11 @@ void ProcessClass(const XMLNode& Node, std::ofstream& Source, std::ofstream& Inc
|
||||||
{
|
{
|
||||||
if (Node.isAttributeSet("name"))
|
if (Node.isAttributeSet("name"))
|
||||||
{
|
{
|
||||||
@ -1045,7 +1093,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
else
|
else
|
||||||
UpperName[0]=toupper(UpperName[0]);
|
UpperName[0]=toupper(UpperName[0]);
|
||||||
|
|
||||||
@@ -294,24 +298,25 @@ void ProcessClass(const XMLNode& Node, s
|
@@ -294,24 +300,25 @@ void ProcessClass(const XMLNode& Node, std::ofstream& Source, std::ofstream& Inc
|
||||||
|
|
||||||
Source << " MB5_C_CLONE(" << UpperName << "," << LowerName << ")" << std::endl;
|
Source << " MB5_C_CLONE(" << UpperName << "," << LowerName << ")" << std::endl;
|
||||||
|
|
||||||
@ -1076,7 +1124,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
|
|
||||||
if ("string"==PropertyType)
|
if ("string"==PropertyType)
|
||||||
{
|
{
|
||||||
@@ -320,13 +325,13 @@ void ProcessClass(const XMLNode& Node, s
|
@@ -320,13 +327,13 @@ void ProcessClass(const XMLNode& Node, std::ofstream& Source, std::ofstream& Inc
|
||||||
|
|
||||||
if (ChildNode.isAttributeSet("deprecated"))
|
if (ChildNode.isAttributeSet("deprecated"))
|
||||||
{
|
{
|
||||||
@ -1092,7 +1140,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
}
|
}
|
||||||
|
|
||||||
Include << "/**" << std::endl;
|
Include << "/**" << std::endl;
|
||||||
@@ -470,11 +475,11 @@ void ProcessList(const XMLNode& Node, st
|
@@ -470,11 +477,11 @@ void ProcessList(const XMLNode& Node, std::ofstream& Source, std::ofstream& Incl
|
||||||
{
|
{
|
||||||
if (Node.isAttributeSet("name"))
|
if (Node.isAttributeSet("name"))
|
||||||
{
|
{
|
||||||
@ -1106,7 +1154,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
else
|
else
|
||||||
UpperName[0]=toupper(UpperName[0]);
|
UpperName[0]=toupper(UpperName[0]);
|
||||||
|
|
||||||
@@ -532,24 +537,25 @@ void ProcessList(const XMLNode& Node, st
|
@@ -532,24 +539,25 @@ void ProcessList(const XMLNode& Node, std::ofstream& Source, std::ofstream& Incl
|
||||||
|
|
||||||
Source << " MB5_C_CLONE(" << UpperName << "List," << LowerName << "_list)" << std::endl;
|
Source << " MB5_C_CLONE(" << UpperName << "List," << LowerName << "_list)" << std::endl;
|
||||||
|
|
||||||
@ -1137,7 +1185,7 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
|
|
||||||
if ("string"==PropertyType)
|
if ("string"==PropertyType)
|
||||||
{
|
{
|
||||||
@@ -637,18 +643,19 @@ void ProcessDeclare(const XMLNode& Node,
|
@@ -637,18 +645,19 @@ void ProcessDeclare(const XMLNode& Node, std::ofstream& /*Source*/, std::ofstrea
|
||||||
std::vector<std::string> Classes;
|
std::vector<std::string> Classes;
|
||||||
Classes.push_back("Entity");
|
Classes.push_back("Entity");
|
||||||
|
|
||||||
@ -1161,55 +1209,12 @@ diff -up libmusicbrainz-5.0.1/src/make-c-interface.cc.xmlParser libmusicbrainz-5
|
|||||||
else
|
else
|
||||||
UpperName[0]=toupper(UpperName[0]);
|
UpperName[0]=toupper(UpperName[0]);
|
||||||
|
|
||||||
diff -up libmusicbrainz-5.0.1/src/Query.cc.xmlParser libmusicbrainz-5.0.1/src/Query.cc
|
diff --git a/src/xmlParser.cc b/src/xmlParser.cc
|
||||||
--- libmusicbrainz-5.0.1/src/Query.cc.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
new file mode 100644
|
||||||
+++ libmusicbrainz-5.0.1/src/Query.cc 2013-01-07 12:51:33.921020440 -0500
|
index 0000000..41af44b
|
||||||
@@ -158,15 +158,16 @@ MusicBrainz5::CMetadata MusicBrainz5::CQ
|
--- /dev/null
|
||||||
#endif
|
+++ b/src/xmlParser.cc
|
||||||
|
@@ -0,0 +1,145 @@
|
||||||
XMLResults Results;
|
|
||||||
- XMLNode TopNode=XMLNode::parseString(strData.c_str(), 0, &Results);
|
|
||||||
- if (Results.error==eXMLErrorNone)
|
|
||||||
+ XMLNode *TopNode = XMLRootNode::parseString(strData, &Results);
|
|
||||||
+ if (Results.code==eXMLErrorNone)
|
|
||||||
{
|
|
||||||
- XMLNode MetadataNode=TopNode.getChildNode("metadata");
|
|
||||||
+ XMLNode MetadataNode=*TopNode;
|
|
||||||
if (!MetadataNode.isEmpty())
|
|
||||||
{
|
|
||||||
Metadata=CMetadata(MetadataNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ delete TopNode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -393,10 +394,10 @@ bool MusicBrainz5::CQuery::EditCollectio
|
|
||||||
#endif
|
|
||||||
|
|
||||||
XMLResults Results;
|
|
||||||
- XMLNode TopNode=XMLNode::parseString(strData.c_str(), 0, &Results);
|
|
||||||
- if (Results.error==eXMLErrorNone)
|
|
||||||
+ XMLNode *TopNode = XMLRootNode::parseString(strData, &Results);
|
|
||||||
+ if (Results.code==eXMLErrorNone)
|
|
||||||
{
|
|
||||||
- XMLNode MetadataNode=TopNode.getChildNode("metadata");
|
|
||||||
+ XMLNode MetadataNode=*TopNode;
|
|
||||||
if (!MetadataNode.isEmpty())
|
|
||||||
{
|
|
||||||
CMetadata Metadata(MetadataNode);
|
|
||||||
@@ -405,6 +406,7 @@ bool MusicBrainz5::CQuery::EditCollectio
|
|
||||||
RetVal=RetVal && true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ delete TopNode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -up libmusicbrainz-5.0.1/src/xmlParser.cc.xmlParser libmusicbrainz-5.0.1/src/xmlParser.cc
|
|
||||||
--- libmusicbrainz-5.0.1/src/xmlParser.cc.xmlParser 2013-01-07 12:51:33.921020440 -0500
|
|
||||||
+++ libmusicbrainz-5.0.1/src/xmlParser.cc 2013-01-07 12:51:33.921020440 -0500
|
|
||||||
@@ -0,0 +1,147 @@
|
|
||||||
+/* --------------------------------------------------------------------------
|
+/* --------------------------------------------------------------------------
|
||||||
+
|
+
|
||||||
+ libmusicbrainz5 - Client library to access MusicBrainz
|
+ libmusicbrainz5 - Client library to access MusicBrainz
|
||||||
@ -1355,11 +1360,10 @@ diff -up libmusicbrainz-5.0.1/src/xmlParser.cc.xmlParser libmusicbrainz-5.0.1/sr
|
|||||||
+{
|
+{
|
||||||
+ return mNode == NULL;
|
+ return mNode == NULL;
|
||||||
+}
|
+}
|
||||||
+
|
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
|
||||||
+
|
index 645f8ae..8dd569c 100644
|
||||||
diff -up libmusicbrainz-5.0.1/tests/CMakeLists.txt.xmlParser libmusicbrainz-5.0.1/tests/CMakeLists.txt
|
--- a/tests/CMakeLists.txt
|
||||||
--- libmusicbrainz-5.0.1/tests/CMakeLists.txt.xmlParser 2012-05-16 15:48:34.000000000 -0400
|
+++ b/tests/CMakeLists.txt
|
||||||
+++ libmusicbrainz-5.0.1/tests/CMakeLists.txt 2013-01-07 12:51:33.922020441 -0500
|
|
||||||
@@ -1,5 +1,5 @@
|
@@ -1,5 +1,5 @@
|
||||||
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
|
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
|
||||||
-LINK_LIBRARIES(musicbrainz5 ${NEON_LIBRARIES})
|
-LINK_LIBRARIES(musicbrainz5 ${NEON_LIBRARIES})
|
||||||
|
Loading…
Reference in New Issue
Block a user