From 2f2871653762cf8f08e984bc438fab671aa4fc57 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Sun, 20 Oct 2002 21:21:26 +0000 Subject: [PATCH] fixed bugs when passing result value tree to Python functions. Daniel * python/types.c: fixed bugs when passing result value tree to Python functions. Daniel --- ChangeLog | 5 ++++ python/types.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 87 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 21232f6..36df0b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun Oct 20 23:20:37 CEST 2002 Daniel Veillard + + * python/types.c: fixed bugs when passing result value tree + to Python functions. + Sun Oct 20 15:23:28 CEST 2002 Igor Zlatkovic * libxslt/win32config.h: mapped vsnprintf to _vsnprintf for the diff --git a/python/types.c b/python/types.c index 2eff1a3..3f49028 100644 --- a/python/types.c +++ b/python/types.c @@ -342,13 +342,37 @@ libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj) return (Py_None); } switch (obj->type) { - case XPATH_XSLT_TREE: - /* TODO !!!! Allocation problems */ + case XPATH_XSLT_TREE: { + if ((obj->nodesetval == NULL) || + (obj->nodesetval->nodeNr == 0) || + (obj->nodesetval->nodeTab == NULL)) { + ret = PyList_New(0); + } else { + int i, len = 0; + xmlNodePtr node; + + node = obj->nodesetval->nodeTab[0]->children; + while (node != NULL) { + len++; + node = node->next; + } + ret = PyList_New(len); + node = obj->nodesetval->nodeTab[0]->children; + for (i = 0;i < len;i++) { + PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node)); + node = node->next; + } + } + /* + * Return now, do not free the object passed down + */ + return (ret); + } case XPATH_NODESET: if ((obj->nodesetval == NULL) - || (obj->nodesetval->nodeNr == 0)) + || (obj->nodesetval->nodeNr == 0)) { ret = PyList_New(0); - else { + } else { int i; xmlNodePtr node; @@ -469,3 +493,57 @@ libxml_xmlCatalogPtrWrap(xmlCatalogPtr catal) (char *) "xmlCatalogPtr", NULL); return (ret); } + +PyObject * +libxml_xmlOutputBufferPtrWrap(xmlOutputBufferPtr buffer) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libxml_xmlOutputBufferPtrWrap: buffer = %p\n", buffer); +#endif + if (buffer == NULL) { + Py_INCREF(Py_None); + return (Py_None); + } + ret = + PyCObject_FromVoidPtrAndDesc((void *) buffer, + (char *) "xmlOutputBufferPtr", NULL); + return (ret); +} + +PyObject * +libxml_xmlParserInputBufferPtrWrap(xmlParserInputBufferPtr buffer) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libxml_xmlParserInputBufferPtrWrap: buffer = %p\n", buffer); +#endif + if (buffer == NULL) { + Py_INCREF(Py_None); + return (Py_None); + } + ret = + PyCObject_FromVoidPtrAndDesc((void *) buffer, + (char *) "xmlParserInputBufferPtr", NULL); + return (ret); +} + +PyObject * +libxml_xmlRegexpPtrWrap(xmlRegexpPtr regexp) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libxml_xmlRegexpPtrWrap: regexp = %p\n", regexp); +#endif + if (regexp == NULL) { + Py_INCREF(Py_None); + return (Py_None); + } + ret = + PyCObject_FromVoidPtrAndDesc((void *) regexp, + (char *) "xmlRegexpPtr", NULL); + return (ret); +} -- 2.7.4