aboutsummaryrefslogtreecommitdiffstats
path: root/python/libxml.c
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@src.gnome.org>2003-01-14 14:40:25 +0000
committerDaniel Veillard <veillard@src.gnome.org>2003-01-14 14:40:25 +0000
commite4a07e7b77b191d61291d44dffa19b65387e04e4 (patch)
treede97a23ae539d852a74f1a13a4680953d8eafed1 /python/libxml.c
parent81601f9834667bb47b4b2c9d15b52579ffbe4088 (diff)
downloadandroid_external_libxml2-e4a07e7b77b191d61291d44dffa19b65387e04e4.tar.gz
android_external_libxml2-e4a07e7b77b191d61291d44dffa19b65387e04e4.tar.bz2
android_external_libxml2-e4a07e7b77b191d61291d44dffa19b65387e04e4.zip
cleanup patch from Stéphane Bidoul Daniel
* python/libxml.c: cleanup patch from Stéphane Bidoul Daniel
Diffstat (limited to 'python/libxml.c')
-rw-r--r--python/libxml.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/python/libxml.c b/python/libxml.c
index 15a30b5a..f1b0d6a2 100644
--- a/python/libxml.c
+++ b/python/libxml.c
@@ -439,6 +439,7 @@ pythonExternalEntityLoader(const char *URL, const char *ID,
ret = PyObject_CallFunction(pythonExternalEntityLoaderObjext,
(char *) "(ssO)", URL, ID, ctxtobj);
+ Py_XDECREF(ctxtobj);
#ifdef DEBUG_LOADER
printf("pythonExternalEntityLoader: result ");
PyObject_Print(ret, stdout, 0);
@@ -1372,6 +1373,7 @@ libxml_xmlSetParserCtxtErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *a
{
PyObject *py_retval;
xmlParserCtxtPtr ctxt;
+ xmlParserCtxtPyCtxtPtr pyCtxt;
PyObject *pyobj_ctxt;
PyObject *pyobj_f;
PyObject *pyobj_arg;
@@ -1381,8 +1383,6 @@ libxml_xmlSetParserCtxtErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *a
return(NULL);
ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
if (ctxt->_private == NULL) {
- xmlParserCtxtPyCtxt *pyCtxt;
-
pyCtxt = xmlMalloc(sizeof(xmlParserCtxtPyCtxt));
if (pyCtxt == NULL) {
py_retval = libxml_intWrap(-1);
@@ -1391,11 +1391,16 @@ libxml_xmlSetParserCtxtErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *a
memset(pyCtxt,0,sizeof(xmlParserCtxtPyCtxt));
ctxt->_private = pyCtxt;
}
+ else {
+ pyCtxt = ctxt->_private;
+ }
/* TODO: check f is a function ! */
+ Py_XDECREF(pyCtxt->errorFunc);
Py_XINCREF(pyobj_f);
- ((xmlParserCtxtPyCtxt *)ctxt->_private)->errorFunc = pyobj_f;
+ pyCtxt->errorFunc = pyobj_f;
+ Py_XDECREF(pyCtxt->errorFuncArg);
Py_XINCREF(pyobj_arg);
- ((xmlParserCtxtPyCtxt *)ctxt->_private)->errorFuncArg = pyobj_arg;
+ pyCtxt->errorFuncArg = pyobj_arg;
ctxt->sax->error = libxml_xmlParserCtxtErrorFuncHandler;
ctxt->vctxt.error = libxml_xmlParserCtxtErrorFuncHandler;
@@ -1445,6 +1450,7 @@ libxml_xmlSetParserCtxtWarningHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject
{
PyObject *py_retval;
xmlParserCtxtPtr ctxt;
+ xmlParserCtxtPyCtxtPtr pyCtxt;
PyObject *pyobj_ctxt;
PyObject *pyobj_f;
PyObject *pyobj_arg;
@@ -1452,11 +1458,25 @@ libxml_xmlSetParserCtxtWarningHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject
if (!PyArg_ParseTuple(args, (char *)"OOO:xmlSetParserCtxtWarningHandler", &pyobj_ctxt, &pyobj_f, &pyobj_arg))
return(NULL);
ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+ if (ctxt->_private == NULL) {
+ pyCtxt = xmlMalloc(sizeof(xmlParserCtxtPyCtxt));
+ if (pyCtxt == NULL) {
+ py_retval = libxml_intWrap(-1);
+ return(py_retval);
+ }
+ memset(pyCtxt,0,sizeof(xmlParserCtxtPyCtxt));
+ ctxt->_private = pyCtxt;
+ }
+ else {
+ pyCtxt = ctxt->_private;
+ }
/* TODO: check f is a function ! */
+ Py_XDECREF(pyCtxt->warningFunc);
Py_XINCREF(pyobj_f);
- ((xmlParserCtxtPyCtxt *)ctxt->_private)->warningFunc = pyobj_f;
+ pyCtxt->warningFunc = pyobj_f;
+ Py_XDECREF(pyCtxt->warningFuncArg);
Py_XINCREF(pyobj_arg);
- ((xmlParserCtxtPyCtxt *)ctxt->_private)->warningFuncArg = pyobj_arg;
+ pyCtxt->warningFuncArg = pyobj_arg;
ctxt->sax->warning = libxml_xmlParserCtxtWarningFuncHandler;
ctxt->vctxt.warning = libxml_xmlParserCtxtWarningFuncHandler;