Module: wine Branch: master Commit: 0344f3aa855073f204e32992ca874f93cb0cd359 URL: https://gitlab.winehq.org/wine/wine/-/commit/0344f3aa855073f204e32992ca874f9...
Author: Zebediah Figura zfigura@codeweavers.com Date: Mon Mar 4 23:44:45 2024 -0600
shell32: Do not interpret the direction in IDataObject::EnumFormatEtc().
---
dlls/shell32/dataobject.c | 18 ++++++------------ dlls/shell32/tests/shlfolder.c | 5 +---- 2 files changed, 7 insertions(+), 16 deletions(-)
diff --git a/dlls/shell32/dataobject.c b/dlls/shell32/dataobject.c index 96b9a0ad5dd..2b4ee6bb55b 100644 --- a/dlls/shell32/dataobject.c +++ b/dlls/shell32/dataobject.c @@ -368,21 +368,15 @@ static HRESULT WINAPI IDataObject_fnSetData(IDataObject *iface, LPFORMATETC pfor return E_NOTIMPL; }
-static HRESULT WINAPI IDataObject_fnEnumFormatEtc(IDataObject *iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc) +static HRESULT WINAPI IDataObject_fnEnumFormatEtc(IDataObject *iface, DWORD direction, IEnumFORMATETC **out) { - IDataObjectImpl *This = impl_from_IDataObject(iface); - - TRACE("(%p)->()\n", This); - *ppenumFormatEtc=NULL; + IDataObjectImpl *obj = impl_from_IDataObject(iface);
- /* only get data */ - if (DATADIR_GET == dwDirection) - { - *ppenumFormatEtc = IEnumFORMATETC_Constructor(MAX_FORMATS, This->pFormatEtc); - return (*ppenumFormatEtc) ? S_OK : E_FAIL; - } + TRACE("iface %p, direction %#lx, out %p.\n", iface, direction, out);
- return E_NOTIMPL; + if (!(*out = IEnumFORMATETC_Constructor(MAX_FORMATS, obj->pFormatEtc))) + return E_OUTOFMEMORY; + return S_OK; }
static HRESULT WINAPI IDataObject_fnDAdvise(IDataObject *iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection) diff --git a/dlls/shell32/tests/shlfolder.c b/dlls/shell32/tests/shlfolder.c index eb77e2113f3..7e85ced8ded 100644 --- a/dlls/shell32/tests/shlfolder.c +++ b/dlls/shell32/tests/shlfolder.c @@ -5478,10 +5478,7 @@ static void test_DataObject(void) for (unsigned int i = 0; i < ARRAY_SIZE(enum_directions); ++i) { hr = IDataObject_EnumFormatEtc(data_obj, enum_directions[i], &enum_format); - todo_wine_if (enum_directions[i] == DATADIR_SET) - ok(hr == S_OK, "Got hr %#lx.\n", hr); - if (hr != S_OK) - continue; + ok(hr == S_OK, "Got hr %#lx.\n", hr);
memset(&fmt, 0xcc, sizeof(fmt)); hr = IEnumFORMATETC_Next(enum_format, 1, &fmt, NULL);