Module: wine Branch: master Commit: fc4dab4c3ba8007f1ab6e1e2e986a8d95c633e90 URL: http://source.winehq.org/git/wine.git/?a=commit;h=fc4dab4c3ba8007f1ab6e1e2e9...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Tue May 8 15:56:20 2012 +0400
msxml3: Add a helper to check that lexical handler is set.
---
dlls/msxml3/saxreader.c | 33 ++++++++++++++++++++++----------- 1 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index 0d46c4f..b3b6fc4 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -319,7 +319,13 @@ static inline int has_content_handler(const saxlocator *locator) (!locator->vbInterface && locator->saxreader->contentHandler); }
-static inline BOOL has_error_handler(const saxlocator *locator) +static inline int has_lexical_handler(const saxlocator *locator) +{ + return (locator->vbInterface && locator->saxreader->vblexicalHandler) || + (!locator->vbInterface && locator->saxreader->lexicalHandler); +} + +static inline int has_error_handler(const saxlocator *locator) { return (locator->vbInterface && locator->saxreader->vberrorHandler) || (!locator->vbInterface && locator->saxreader->errorHandler); @@ -1587,8 +1593,7 @@ static void libxmlComment(void *ctx, const xmlChar *value) for(; p>=This->pParserCtxt->input->base && *p!='\n' && *p!='\r'; p--) This->column++;
- if(!This->vbInterface && !This->saxreader->lexicalHandler) return; - if(This->vbInterface && !This->saxreader->vblexicalHandler) return; + if (!has_lexical_handler(This)) return;
bValue = pooled_bstr_from_xmlChar(&This->saxreader->pool, value);
@@ -1678,10 +1683,13 @@ static void libxmlCDataBlock(void *ctx, const xmlChar *value, int len) for(; beg>=This->pParserCtxt->input->base && *beg!='\n' && *beg!='\r'; beg--) This->column++;
- if(This->vbInterface && This->saxreader->vblexicalHandler) - hr = IVBSAXLexicalHandler_startCDATA(This->saxreader->vblexicalHandler); - if(!This->vbInterface && This->saxreader->lexicalHandler) - hr = ISAXLexicalHandler_startCDATA(This->saxreader->lexicalHandler); + if (has_lexical_handler(This)) + { + if (This->vbInterface) + hr = IVBSAXLexicalHandler_startCDATA(This->saxreader->vblexicalHandler); + else + hr = ISAXLexicalHandler_startCDATA(This->saxreader->lexicalHandler); + }
if(FAILED(hr)) { @@ -1731,10 +1739,13 @@ static void libxmlCDataBlock(void *ctx, const xmlChar *value, int len) cur = end; }
- if(This->vbInterface && This->saxreader->vblexicalHandler) - hr = IVBSAXLexicalHandler_endCDATA(This->saxreader->vblexicalHandler); - if(!This->vbInterface && This->saxreader->lexicalHandler) - hr = ISAXLexicalHandler_endCDATA(This->saxreader->lexicalHandler); + if (has_lexical_handler(This)) + { + if (This->vbInterface) + hr = IVBSAXLexicalHandler_endCDATA(This->saxreader->vblexicalHandler); + else + hr = ISAXLexicalHandler_endCDATA(This->saxreader->lexicalHandler); + }
if(FAILED(hr)) format_error_message_from_id(This, hr);