summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--unit-tests/Makefile30
-rw-r--r--unit-tests/POCDemo.py12
-rw-r--r--unit-tests/demo.c99
-rw-r--r--unit-tests/demo.h14
-rw-r--r--unit-tests/dmixml.c248
-rw-r--r--unit-tests/dmixml.h43
-rw-r--r--unit-tests/libxml_wrap.h249
7 files changed, 1 insertions, 694 deletions
diff --git a/unit-tests/Makefile b/unit-tests/Makefile
index 01706a3..be2fcf9 100644
--- a/unit-tests/Makefile
+++ b/unit-tests/Makefile
@@ -1,33 +1,5 @@
-## This one is important to get right ...
-## We need to link in the libxml2mod.so file from here
-PYLIBDIR := /usr/lib64/python2.5/site-packages
-PYLIBDIR := /usr/lib/python-support/python-libxml2/python2.5
-
-# Defaults, should be fine
-CFLAGS=-I. $(shell xml2-config --cflags) -g -Wall $(shell python-config --cflags)
-
-LIBS=$(shell xml2-config --libs) -lxml2mod $(shell python-config --libs)
-LIBDIR=-L $(PYLIBDIR)
-
-.SUFFIX=.c .o .so
-
-all : test
-
-demomodule.so : demo.o dmixml.o
- @echo "Linking: $@"
- @gcc -fPIC --shared -o $@ $^ $(LIBS) $(LIBDIR)
-
-.c.o :
- @echo "Compiling $<"
- @gcc -fPIC -c $< $(CFLAGS)
-
-#test : demomodule.so
test :
- @echo "=========================================="
- @echo " Running proof-of-concept code"
- @echo "=========================================="
- @echo ""
- @python unit
+ python unit
clean :
rm -f *.{py[oc],o,so} *~
diff --git a/unit-tests/POCDemo.py b/unit-tests/POCDemo.py
deleted file mode 100644
index 475a62b..0000000
--- a/unit-tests/POCDemo.py
+++ /dev/null
@@ -1,12 +0,0 @@
-import libxml2
-import demomodule # This is our core module
-
-class POCDemo:
- """Demo of a wrapper class to return proper python libxml2 objects"""
-
- def GetXMLdoc(self):
- return libxml2.xmlDoc( _obj = demomodule.dump_doc() )
-
- def GetXMLnode(self):
- return libxml2.xmlNode( _obj = demomodule.dump_node() )
-
diff --git a/unit-tests/demo.c b/unit-tests/demo.c
deleted file mode 100644
index 265f3cb..0000000
--- a/unit-tests/demo.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * For the avoidance of doubt the "preferred form" of this code is one which
- * is in an open unpatent encumbered format. Where cryptographic key signing
- * forms part of the process of creating an executable the information
- * including keys needed to generate an equivalently functional executable
- * are deemed to be part of the source code.
- */
-
-#include "demo.h"
-
-xmlNode *gen_nodes(const char *entry ) {
- xmlNode *c_xmlNode_root = NULL;
- xmlNode *c_xmlNode_tag = NULL;
-
- // Prepare a root node
- c_xmlNode_root = xmlNewNode(NULL, (xmlChar *) "dmixml_demo");
- assert( c_xmlNode_root != NULL );
-
- dmixml_AddAttribute(c_xmlNode_root, "entrypoint", "%s", entry);
-
- // Populate XML
- dmixml_AddTextChild(c_xmlNode_root, "Test", "Yes, just testing");
-
- c_xmlNode_tag = dmixml_AddTextChild(c_xmlNode_root, "tag1", "Another test");
- dmixml_AddAttribute(c_xmlNode_tag, "TestTagID", "%i", 1);
-
- c_xmlNode_tag = c_xmlNode_root;
- int i;
- for(i = 0; i <= 3; ++i) {
- c_xmlNode_tag = xmlNewChild(c_xmlNode_tag, NULL, (xmlChar *) "subtag", NULL);
- dmixml_AddAttribute(c_xmlNode_tag, "SubLevel", "%i", i);
- }
- dmixml_AddTextContent(c_xmlNode_tag, "%s - Adding data to the tag at sublevel %i", "TEST", i-1);
-
- return c_xmlNode_root;
-}
-
-
-
-
-PyObject* demo_dump_doc() {
- PyObject *py_xmlDoc = NULL;
- xmlDoc *c_xmlDoc = NULL;
-
- // Create an XML document
- c_xmlDoc = xmlNewDoc((xmlChar *) "1.0");
- assert( c_xmlDoc != NULL );
-
- // Generate XML nodes and assign the root node to the document
- xmlDocSetRootElement( c_xmlDoc, gen_nodes("demo_dump_doc") );
-
- py_xmlDoc = libxml_xmlDocPtrWrap((xmlDocPtr) c_xmlDoc);
- Py_INCREF(py_xmlDoc);
-
- return py_xmlDoc;
-}
-
-PyObject* demo_dump_node() {
- PyObject *py_xmlNode = NULL;
- xmlNode *nodes = NULL;
-
- nodes = gen_nodes("demo_dump_node");
- py_xmlNode = libxml_xmlNodePtrWrap((xmlNodePtr) nodes);
- Py_INCREF(py_xmlNode);
-
- return py_xmlNode;
-}
-
-
-
-static PyMethodDef DemoMethods[] = {
- { "dump_doc", demo_dump_doc, METH_NOARGS, (char *)"Return an XML document" },
- { "dump_node", demo_dump_node, METH_NOARGS, (char *)"Retuen an XML node" },
- { NULL, NULL, 0, NULL }
-};
-
-PyMODINIT_FUNC initdemomodule(void) {
- PyObject *module =
- Py_InitModule3((char *)"demomodule", DemoMethods,
- "LibXML2 DMIDecode Proof-of-Concept Python Module");
-
- PyObject *version = PyString_FromString("0.10");
- Py_INCREF(version);
- PyModule_AddObject(module, "version", version);
-}
diff --git a/unit-tests/demo.h b/unit-tests/demo.h
deleted file mode 100644
index 21a5468..0000000
--- a/unit-tests/demo.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <Python.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-#include <libxml/tree.h>
-#include "libxml_wrap.h"
-
-#include "dmixml.h"
-
-extern PyObject* demo_dump(void);
-PyMODINIT_FUNC initdemomodule(void);
-PyObject* demo_dump_doc(void);
-PyObject* demo_dump_node(void);
diff --git a/unit-tests/dmixml.c b/unit-tests/dmixml.c
deleted file mode 100644
index dbca0c3..0000000
--- a/unit-tests/dmixml.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/* Simplified XML API for dmidecode
- *
- * Copyright 2009 David Sommerseth <davids@redhat.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * For the avoidance of doubt the "preferred form" of this code is one which
- * is in an open unpatent encumbered format. Where cryptographic key signing
- * forms part of the process of creating an executable the information
- * including keys needed to generate an equivalently functional executable
- * are deemed to be part of the source code.
- */
-
-#include <string.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include <libxml/tree.h>
-#include <libxml/xpath.h>
-#include <libxml/xmlstring.h>
-
-// Internal function for dmixml_* functions ... builds up a variable xmlChar* string
-xmlChar *dmixml_buildstr(size_t len, const char *fmt, va_list ap) {
- xmlChar *ret = NULL, *xmlfmt = NULL;
- xmlChar *ptr = NULL;
-
- ret = (xmlChar *) malloc(len+2);
- assert( ret != NULL );
- memset(ret, 0, len+2);
-
- xmlfmt = xmlCharStrdup(fmt);
- assert( xmlfmt != NULL );
-
- xmlStrVPrintf(ret, len, xmlfmt, ap);
- free(xmlfmt);
-
- // Right trim the string
- ptr = ret + xmlStrlen(ret)-1;
- while( (ptr >= ret) && (*ptr == ' ') ) {
- *ptr = 0;
- ptr--;
- }
- return ret;
-}
-
-
-// Adds an XML property/attribute to the given XML node
-//
-// xmldata_n = "<test/>";
-// dmixml_AddAttribute(xmldata_n, "value", "1234");
-// gives: xmldata_n = "<test value="1234/>"
-//
-
-xmlAttr *dmixml_AddAttribute(xmlNode *node, const char *atrname, const char *fmt, ...)
-{
- xmlChar *val_s = NULL, *atrname_s = NULL;
- xmlAttr *res = NULL;
- va_list ap;
-
- if( (node == NULL) || (atrname == NULL) || (fmt == NULL) ) {
- return NULL;
- }
-
- atrname_s = xmlCharStrdup(atrname);
- assert( atrname_s != NULL );
-
- va_start(ap, fmt);
- val_s = dmixml_buildstr(2048, fmt, ap);
- va_end(ap);
-
- res = xmlNewProp(node, atrname_s,
- (xmlStrcmp(val_s, (xmlChar *) "(null)") == 0 ? NULL : val_s));
-
- free(atrname_s);
- free(val_s);
-
- assert( res != NULL );
- return res;
-}
-
-
-// Adds a new XML tag to the current node with the given tag name and value.
-//
-// xmldata_n = "<test>";
-// dmixml_AddTextChild(xmldata_n, "sublevel1", "value");
-// gives: xmldata_n = "<test><sublevel1>value</sublevel1></test>"
-//
-xmlNode *dmixml_AddTextChild(xmlNode *node, const char *tagname, const char *fmt, ...)
-{
- xmlChar *val_s = NULL, *tagname_s = NULL;
- xmlNode *res = NULL;
- va_list ap;
-
- if( (node == NULL) || (tagname == NULL) || (fmt == NULL) ) {
- return NULL;
- }
-
- tagname_s = xmlCharStrdup(tagname);
- assert( tagname_s != NULL );
-
- va_start(ap, fmt);
- val_s = dmixml_buildstr(2048, fmt, ap);
- va_end(ap);
-
- // Do not add any contents if the string contents is "(null)"
- res = xmlNewTextChild(node, NULL, tagname_s,
- (xmlStrcmp(val_s, (xmlChar *) "(null)") == 0 ? NULL : val_s));
-
- free(tagname_s);
- free(val_s);
-
- assert( res != NULL );
- return res;
-}
-
-// Adds a text node child to the current XML node
-//
-// xmldata_n = "<testdata/>;
-// dmixml_AddTextContent(xmldata_n, "some data value");
-// gives: xmldata_n = "<testdata>some data value</testdata>"
-//
-xmlNode *dmixml_AddTextContent(xmlNode *node, const char *fmt, ...)
-{
- xmlChar *val_s = NULL;
- xmlNode *res = NULL;
- va_list ap;
-
- if( (node == NULL) || (fmt == NULL) ) {
- return NULL;
- }
-
- va_start(ap, fmt);
- val_s = dmixml_buildstr(2048, fmt, ap);
- va_end(ap);
-
- if( xmlStrcmp(val_s, (xmlChar *) "(null)") != 0 ) {
- res = xmlAddChild(node, xmlNewText(val_s));
- } else {
- res = node;
- }
- free(val_s);
-
- assert( res != NULL );
- return res;
-}
-
-
-char *dmixml_GetAttrValue(xmlNode *node, const char *key) {
- xmlAttr *aptr = NULL;
- xmlChar *key_s = NULL;
-
- if( node == NULL ) {
- return NULL;
- }
-
- key_s = xmlCharStrdup(key);
- assert( key_s != NULL );
-
- for( aptr = node->properties; aptr != NULL; aptr = aptr->next ) {
- if( xmlStrcmp(aptr->name, key_s) == 0 ) {
- free(key_s); key_s = NULL;
- // FIXME: Should find better way how to return UTF-8 data
- return (char *)(aptr->children != NULL ? aptr->children->content : NULL);
- }
- }
- free(key_s); key_s = NULL;
- return NULL;
-}
-
-xmlNode *dmixml_FindNode(xmlNode *node, const char *key) {
- xmlNode *ptr_n = NULL;
- xmlChar *key_s = NULL;
-
- if( node->children == NULL ) {
- return NULL;
- }
-
- key_s = xmlCharStrdup(key);
- assert( key_s != NULL );
-
- for( ptr_n = node->children; ptr_n != NULL; ptr_n = ptr_n->next ) {
- if( (ptr_n->type == XML_ELEMENT_NODE)
- && (xmlStrcmp(ptr_n->name, key_s) == 0) ) {
- free(key_s); key_s = NULL;
- return ptr_n;
- }
- }
- free(key_s); key_s = NULL;
- return NULL;
-}
-
-inline char *dmixml_GetContent(xmlNode *node) {
- // FIXME: Should find better way how to return UTF-8 data
- return (((node != NULL) && (node->children != NULL)) ? (char *) node->children->content : NULL);
-}
-
-inline char *dmixml_GetNodeContent(xmlNode *node, const char *key) {
- return dmixml_GetContent(dmixml_FindNode(node, key));
-}
-
-char *dmixml_GetXPathContent(char *buf, size_t buflen, xmlXPathObject *xpo, int idx) {
- memset(buf, 0, buflen);
-
- if( xpo == NULL ) {
- return NULL;
- }
-
- switch( xpo->type ) {
- case XPATH_STRING:
- strncpy(buf, (char *)xpo->stringval, buflen-1);
- break;
-
- case XPATH_NUMBER:
- snprintf(buf, buflen-1, "%f", xpo->floatval);
- break;
-
- case XPATH_NODESET:
- if( (xpo->nodesetval != NULL) && (xpo->nodesetval->nodeNr >= (idx+1)) ) {
- char *str = dmixml_GetContent(xpo->nodesetval->nodeTab[idx]);
- if( str != NULL ) {
- strncpy(buf, str, buflen-1);
- } else {
- memset(buf, 0, buflen);
- }
- }
- break;
-
- default:
- fprintf(stderr, "dmixml_GetXPathContent(...):: "
- "Do not know how to handle XPath type %i\n",
- xpo->type);
- return NULL;
- }
- return buf;
-}
-
diff --git a/unit-tests/dmixml.h b/unit-tests/dmixml.h
deleted file mode 100644
index b1d86c6..0000000
--- a/unit-tests/dmixml.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Simplified XML API for dmidecode
- *
- * Copyright 2009 David Sommerseth <davids@redhat.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * For the avoidance of doubt the "preferred form" of this code is one which
- * is in an open unpatent encumbered format. Where cryptographic key signing
- * forms part of the process of creating an executable the information
- * including keys needed to generate an equivalently functional executable
- * are deemed to be part of the source code.
- */
-
-#ifndef _XMLHELPER_H
-#define _XMLHELPER_H
-
-#include <stdarg.h>
-#include <libxml/tree.h>
-#include <libxml/xpath.h>
-
-xmlAttr *dmixml_AddAttribute(xmlNode *node, const char *atrname, const char *fmt, ...);
-xmlNode *dmixml_AddTextChild(xmlNode *node, const char *tagname, const char *fmt, ...);
-xmlNode *dmixml_AddTextContent(xmlNode *node, const char *fmt, ...);
-
-char *dmixml_GetAttrValue(xmlNode *node, const char *key);
-xmlNode *dmixml_FindNode(xmlNode *, const char *key);
-inline char *dmixml_GetContent(xmlNode *node);
-inline char *dmixml_GetNodeContent(xmlNode *node, const char *key);
-char *dmixml_GetXPathContent(char *buf, size_t buflen, xmlXPathObject *xpo, int idx);
-
-#endif
diff --git a/unit-tests/libxml_wrap.h b/unit-tests/libxml_wrap.h
deleted file mode 100644
index eaa5e96..0000000
--- a/unit-tests/libxml_wrap.h
+++ /dev/null
@@ -1,249 +0,0 @@
-#include <Python.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/catalog.h>
-#include <libxml/threads.h>
-#include <libxml/nanoftp.h>
-#include <libxml/nanohttp.h>
-#include <libxml/uri.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/debugXML.h>
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/xinclude.h>
-#include <libxml/xpointer.h>
-#include <libxml/xmlunicode.h>
-#include <libxml/xmlregexp.h>
-#include <libxml/xmlautomata.h>
-#include <libxml/xmlreader.h>
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/relaxng.h>
-#include <libxml/xmlschemas.h>
-#endif
-
-/**
- * ATTRIBUTE_UNUSED:
- *
- * Macro used to signal to GCC unused function parameters
- * Repeated here since the definition is not available when
- * compiled outside the libxml2 build tree.
- */
-#ifdef __GNUC__
-#ifdef ATTRIBUTE_UNUSED
-#undef ATTRIBUTE_UNUSED
-#endif
-#ifndef ATTRIBUTE_UNUSED
-#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#endif /* ATTRIBUTE_UNUSED */
-#else
-#define ATTRIBUTE_UNUSED
-#endif
-
-#define PyxmlNode_Get(v) (((v) == Py_None) ? NULL : \
- (((PyxmlNode_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlNodePtr obj;
-} PyxmlNode_Object;
-
-#define PyxmlXPathContext_Get(v) (((v) == Py_None) ? NULL : \
- (((PyxmlXPathContext_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlXPathContextPtr obj;
-} PyxmlXPathContext_Object;
-
-#define PyxmlXPathParserContext_Get(v) (((v) == Py_None) ? NULL : \
- (((PyxmlXPathParserContext_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlXPathParserContextPtr obj;
-} PyxmlXPathParserContext_Object;
-
-#define PyparserCtxt_Get(v) (((v) == Py_None) ? NULL : \
- (((PyparserCtxt_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlParserCtxtPtr obj;
-} PyparserCtxt_Object;
-
-#define PyValidCtxt_Get(v) (((v) == Py_None) ? NULL : \
- (((PyValidCtxt_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlValidCtxtPtr obj;
-} PyValidCtxt_Object;
-
-#define Pycatalog_Get(v) (((v) == Py_None) ? NULL : \
- (((Pycatalog_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlCatalogPtr obj;
-} Pycatalog_Object;
-
-#ifdef LIBXML_REGEXP_ENABLED
-#define PyxmlReg_Get(v) (((v) == Py_None) ? NULL : \
- (((PyxmlReg_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlRegexpPtr obj;
-} PyxmlReg_Object;
-#endif /* LIBXML_REGEXP_ENABLED */
-
-#ifdef LIBXML_READER_ENABLED
-#define PyxmlTextReader_Get(v) (((v) == Py_None) ? NULL : \
- (((PyxmlTextReader_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlTextReaderPtr obj;
-} PyxmlTextReader_Object;
-
-#define PyxmlTextReaderLocator_Get(v) (((v) == Py_None) ? NULL : \
- (((PyxmlTextReaderLocator_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlTextReaderLocatorPtr obj;
-} PyxmlTextReaderLocator_Object;
-#endif
-
-#define PyURI_Get(v) (((v) == Py_None) ? NULL : \
- (((PyURI_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlErrorPtr obj;
-} PyError_Object;
-
-#define PyError_Get(v) (((v) == Py_None) ? NULL : \
- (((PyError_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlOutputBufferPtr obj;
-} PyoutputBuffer_Object;
-
-#define PyoutputBuffer_Get(v) (((v) == Py_None) ? NULL : \
- (((PyoutputBuffer_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlParserInputBufferPtr obj;
-} PyinputBuffer_Object;
-
-#define PyinputBuffer_Get(v) (((v) == Py_None) ? NULL : \
- (((PyinputBuffer_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlURIPtr obj;
-} PyURI_Object;
-
-/* FILE * have their own internal representation */
-#define PyFile_Get(v) (((v) == Py_None) ? NULL : \
- (PyFile_Check(v) ? (PyFile_AsFile(v)) : stdout))
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-typedef struct {
- PyObject_HEAD
- xmlRelaxNGPtr obj;
-} PyrelaxNgSchema_Object;
-
-#define PyrelaxNgSchema_Get(v) (((v) == Py_None) ? NULL : \
- (((PyrelaxNgSchema_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlRelaxNGParserCtxtPtr obj;
-} PyrelaxNgParserCtxt_Object;
-
-#define PyrelaxNgParserCtxt_Get(v) (((v) == Py_None) ? NULL : \
- (((PyrelaxNgParserCtxt_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlRelaxNGValidCtxtPtr obj;
-} PyrelaxNgValidCtxt_Object;
-
-#define PyrelaxNgValidCtxt_Get(v) (((v) == Py_None) ? NULL : \
- (((PyrelaxNgValidCtxt_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlSchemaPtr obj;
-} PySchema_Object;
-
-#define PySchema_Get(v) (((v) == Py_None) ? NULL : \
- (((PySchema_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlSchemaParserCtxtPtr obj;
-} PySchemaParserCtxt_Object;
-
-#define PySchemaParserCtxt_Get(v) (((v) == Py_None) ? NULL : \
- (((PySchemaParserCtxt_Object *)(v))->obj))
-
-typedef struct {
- PyObject_HEAD
- xmlSchemaValidCtxtPtr obj;
-} PySchemaValidCtxt_Object;
-
-#define PySchemaValidCtxt_Get(v) (((v) == Py_None) ? NULL : \
- (((PySchemaValidCtxt_Object *)(v))->obj))
-
-#endif /* LIBXML_SCHEMAS_ENABLED */
-
-PyObject * libxml_intWrap(int val);
-PyObject * libxml_longWrap(long val);
-PyObject * libxml_xmlCharPtrWrap(xmlChar *str);
-PyObject * libxml_constxmlCharPtrWrap(const xmlChar *str);
-PyObject * libxml_charPtrWrap(char *str);
-PyObject * libxml_constcharPtrWrap(const char *str);
-PyObject * libxml_charPtrConstWrap(const char *str);
-PyObject * libxml_xmlCharPtrConstWrap(const xmlChar *str);
-PyObject * libxml_xmlDocPtrWrap(xmlDocPtr doc);
-PyObject * libxml_xmlNodePtrWrap(xmlNodePtr node);
-PyObject * libxml_xmlAttrPtrWrap(xmlAttrPtr attr);
-PyObject * libxml_xmlNsPtrWrap(xmlNsPtr ns);
-PyObject * libxml_xmlAttributePtrWrap(xmlAttributePtr ns);
-PyObject * libxml_xmlElementPtrWrap(xmlElementPtr ns);
-PyObject * libxml_doubleWrap(double val);
-PyObject * libxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt);
-PyObject * libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt);
-PyObject * libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt);
-PyObject * libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj);
-PyObject * libxml_xmlValidCtxtPtrWrap(xmlValidCtxtPtr valid);
-PyObject * libxml_xmlCatalogPtrWrap(xmlCatalogPtr obj);
-PyObject * libxml_xmlURIPtrWrap(xmlURIPtr uri);
-PyObject * libxml_xmlOutputBufferPtrWrap(xmlOutputBufferPtr buffer);
-PyObject * libxml_xmlParserInputBufferPtrWrap(xmlParserInputBufferPtr buffer);
-#ifdef LIBXML_REGEXP_ENABLED
-PyObject * libxml_xmlRegexpPtrWrap(xmlRegexpPtr regexp);
-#endif /* LIBXML_REGEXP_ENABLED */
-#ifdef LIBXML_READER_ENABLED
-PyObject * libxml_xmlTextReaderPtrWrap(xmlTextReaderPtr reader);
-PyObject * libxml_xmlTextReaderLocatorPtrWrap(xmlTextReaderLocatorPtr locator);
-#endif
-
-xmlXPathObjectPtr libxml_xmlXPathObjectPtrConvert(PyObject * obj);
-#ifdef LIBXML_SCHEMAS_ENABLED
-PyObject * libxml_xmlRelaxNGPtrWrap(xmlRelaxNGPtr ctxt);
-PyObject * libxml_xmlRelaxNGParserCtxtPtrWrap(xmlRelaxNGParserCtxtPtr ctxt);
-PyObject * libxml_xmlRelaxNGValidCtxtPtrWrap(xmlRelaxNGValidCtxtPtr valid);
-PyObject * libxml_xmlSchemaPtrWrap(xmlSchemaPtr ctxt);
-PyObject * libxml_xmlSchemaParserCtxtPtrWrap(xmlSchemaParserCtxtPtr ctxt);
-PyObject * libxml_xmlSchemaValidCtxtPtrWrap(xmlSchemaValidCtxtPtr valid);
-#endif /* LIBXML_SCHEMAS_ENABLED */
-PyObject * libxml_xmlErrorPtrWrap(xmlErrorPtr error);
-PyObject * libxml_xmlSchemaSetValidErrors(PyObject * self, PyObject * args);