From e4a07e7b77b191d61291d44dffa19b65387e04e4 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Tue, 14 Jan 2003 14:40:25 +0000 Subject: =?UTF-8?q?cleanup=20patch=20from=20St=E9phane=20Bidoul=20Daniel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * python/libxml.c: cleanup patch from Stéphane Bidoul Daniel --- python/libxml.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'python/libxml.c') 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; -- cgit v1.2.3