Module: wine Branch: master Commit: 176fa9ad27ffbfcafa937cc84733841aa1ae7fbf URL: https://gitlab.winehq.org/wine/wine/-/commit/176fa9ad27ffbfcafa937cc84733841...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Sun Mar 27 16:26:47 2016 +0800
oleaut32: Factor out stream creation from OleLoadPicturePath.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru
---
dlls/oleaut32/olepicture.c | 75 +++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 34 deletions(-)
diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c index f6bf36c414c..33d2a12f88b 100644 --- a/dlls/oleaut32/olepicture.c +++ b/dlls/oleaut32/olepicture.c @@ -2306,6 +2306,45 @@ HRESULT WINAPI OleLoadPictureFile(VARIANT file, LPDISPATCH *picture) return E_NOTIMPL; }
+static HRESULT create_stream(const WCHAR *filename, IStream **stream) +{ + HANDLE hFile; + DWORD dwFileSize; + HGLOBAL hGlobal = NULL; + DWORD dwBytesRead; + HRESULT hr = S_OK; + + hFile = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); + if (hFile == INVALID_HANDLE_VALUE) + return HRESULT_FROM_WIN32(GetLastError()); + + dwFileSize = GetFileSize(hFile, NULL); + if (dwFileSize != INVALID_FILE_SIZE) + { + hGlobal = GlobalAlloc(GMEM_FIXED, dwFileSize); + if (!hGlobal) + hr = E_OUTOFMEMORY; + else + { + if (!ReadFile(hFile, hGlobal, dwFileSize, &dwBytesRead, NULL)) + { + GlobalFree(hGlobal); + hr = HRESULT_FROM_WIN32(GetLastError()); + } + } + } + + CloseHandle(hFile); + + if (FAILED(hr)) return hr; + + hr = CreateStreamOnHGlobal(hGlobal, TRUE, stream); + if (FAILED(hr)) + GlobalFree(hGlobal); + + return hr; +} + /*********************************************************************** * OleSavePictureFile (OLEAUT32.423) */ @@ -2322,12 +2361,7 @@ HRESULT WINAPI OleLoadPicturePath( LPOLESTR szURLorPath, LPUNKNOWN punkCaller, DWORD dwReserved, OLE_COLOR clrReserved, REFIID riid, LPVOID *ppvRet ) { - HANDLE hFile; - DWORD dwFileSize; - HGLOBAL hGlobal = NULL; - DWORD dwBytesRead; IStream *stream; - BOOL bRead; HRESULT hRes; WCHAR *file_candidate; WCHAR path_buf[MAX_PATH]; @@ -2355,36 +2389,9 @@ HRESULT WINAPI OleLoadPicturePath( LPOLESTR szURLorPath, LPUNKNOWN punkCaller,
/* Handle candidate DOS paths separately. */ if (file_candidate[1] == ':') { - hFile = CreateFileW(file_candidate, GENERIC_READ, 0, NULL, OPEN_EXISTING, - 0, NULL); - if (hFile == INVALID_HANDLE_VALUE) - return INET_E_RESOURCE_NOT_FOUND; - - dwFileSize = GetFileSize(hFile, NULL); - if (dwFileSize != INVALID_FILE_SIZE ) - { - hGlobal = GlobalAlloc(GMEM_FIXED,dwFileSize); - if ( hGlobal) - { - bRead = ReadFile(hFile, hGlobal, dwFileSize, &dwBytesRead, NULL) && dwBytesRead == dwFileSize; - if (!bRead) - { - GlobalFree(hGlobal); - hGlobal = 0; - } - } - } - CloseHandle(hFile); - - if (!hGlobal) + hRes = create_stream(file_candidate, &stream); + if (FAILED(hRes)) return INET_E_RESOURCE_NOT_FOUND; - - hRes = CreateStreamOnHGlobal(hGlobal, TRUE, &stream); - if (FAILED(hRes)) - { - GlobalFree(hGlobal); - return hRes; - } } else { IMoniker *pmnk; IBindCtx *pbc;