Nikolay Sivov : msxml3: It's not a failure to get S_FALSE from IStream:: Read().
Alexandre Julliard
julliard at winehq.org
Wed Sep 21 13:35:15 CDT 2011
Module: wine
Branch: master
Commit: 809959de2c90929282c41b03a516cf3d71240411
URL: http://source.winehq.org/git/wine.git/?a=commit;h=809959de2c90929282c41b03a516cf3d71240411
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Sep 21 13:48:17 2011 +0400
msxml3: It's not a failure to get S_FALSE from IStream::Read().
---
dlls/msxml3/saxreader.c | 43 ++++++++++++++++++++++++++-----------------
1 files changed, 26 insertions(+), 17 deletions(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index 5bf6eda..f5ec672 100644
--- a/dlls/msxml3/saxreader.c
+++ b/dlls/msxml3/saxreader.c
@@ -1873,14 +1873,14 @@ static HRESULT internal_parseStream(saxreader *This, IStream *stream, BOOL vbInt
HRESULT hr;
ULONG dataRead;
char data[1024];
+ int ret;
+ dataRead = 0;
hr = IStream_Read(stream, data, sizeof(data), &dataRead);
- if(hr != S_OK)
- return hr;
+ if(FAILED(hr)) return hr;
hr = SAXLocator_create(This, &locator, vbInterface);
- if(FAILED(hr))
- return hr;
+ if(FAILED(hr)) return hr;
locator->pParserCtxt = xmlCreatePushParserCtxt(
&locator->saxreader->sax, locator,
@@ -1892,25 +1892,34 @@ static HRESULT internal_parseStream(saxreader *This, IStream *stream, BOOL vbInt
}
This->isParsing = TRUE;
- while(1)
- {
- hr = IStream_Read(stream, data, sizeof(data), &dataRead);
- if(hr != S_OK)
- break;
- if(xmlParseChunk(locator->pParserCtxt, data, dataRead, 0) != XML_ERR_OK) hr = E_FAIL;
- else hr = locator->ret;
+ if(dataRead != sizeof(data))
+ {
+ ret = xmlParseChunk(locator->pParserCtxt, data, 0, 1);
+ hr = ret != XML_ERR_OK ? E_FAIL : locator->ret;
+ }
+ else
+ {
+ while(1)
+ {
+ dataRead = 0;
+ hr = IStream_Read(stream, data, sizeof(data), &dataRead);
+ if (FAILED(hr)) break;
- if(hr != S_OK) break;
+ ret = xmlParseChunk(locator->pParserCtxt, data, dataRead, 0);
+ hr = ret != XML_ERR_OK ? E_FAIL : locator->ret;
- if(dataRead != sizeof(data))
- {
- if(xmlParseChunk(locator->pParserCtxt, data, 0, 1) != XML_ERR_OK) hr = E_FAIL;
- else hr = locator->ret;
+ if (hr != S_OK) break;
- break;
+ if (dataRead != sizeof(data))
+ {
+ ret = xmlParseChunk(locator->pParserCtxt, data, 0, 1);
+ hr = ret != XML_ERR_OK ? E_FAIL : locator->ret;
+ break;
+ }
}
}
+
This->isParsing = FALSE;
xmlFreeParserCtxt(locator->pParserCtxt);
More information about the wine-cvs
mailing list