windowscodecs: Implement IWICStream_InitializeFromFilename.

This commit is contained in:
Vincent Povirk 2010-04-27 10:20:42 -05:00 committed by Alexandre Julliard
parent d57247ce39
commit 2f41a3ad21
2 changed files with 31 additions and 3 deletions

View File

@ -4,7 +4,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = windowscodecs.dll
IMPORTLIB = windowscodecs
IMPORTS = uuid ole32 advapi32 kernel32
IMPORTS = uuid ole32 shlwapi advapi32 kernel32
EXTRAINCL = @PNGINCL@
C_SRCS = \

View File

@ -23,6 +23,7 @@
#include "winbase.h"
#include "winreg.h"
#include "objbase.h"
#include "shlwapi.h"
#include "wincodec.h"
#include "wincodecs_private.h"
@ -434,8 +435,35 @@ static HRESULT WINAPI IWICStreamImpl_InitializeFromIStream(IWICStream *iface,
static HRESULT WINAPI IWICStreamImpl_InitializeFromFilename(IWICStream *iface,
LPCWSTR wzFileName, DWORD dwDesiredAccess)
{
FIXME("(%p): stub\n", iface);
return E_NOTIMPL;
IWICStreamImpl *This = (IWICStreamImpl*)iface;
HRESULT hr;
DWORD dwMode;
IStream *stream;
TRACE("(%p, %s, %u)\n", iface, debugstr_w(wzFileName), dwDesiredAccess);
if (This->pStream) return WINCODEC_ERR_WRONGSTATE;
if(dwDesiredAccess & GENERIC_WRITE)
dwMode = STGM_SHARE_DENY_WRITE | STGM_WRITE | STGM_CREATE;
else if(dwDesiredAccess & GENERIC_READ)
dwMode = STGM_SHARE_DENY_WRITE | STGM_READ | STGM_FAILIFTHERE;
else
return E_INVALIDARG;
hr = SHCreateStreamOnFileW(wzFileName, dwMode, &stream);
if (SUCCEEDED(hr))
{
if (InterlockedCompareExchangePointer((void**)&This->pStream, stream, NULL))
{
/* Some other thread set the stream first. */
IStream_Release(stream);
hr = WINCODEC_ERR_WRONGSTATE;
}
}
return hr;
}
/******************************************