Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
November 2018
- 75 participants
- 1979 messages
[PATCH] testbot/web: Remove unnecessary LastPage checks in Submit.
by Francois Gouget
Only Submit.pl can decide when to call Validate() because only it knows
whether this is appropriate for the current action. And this always
happens as a check before moving on to the next page which means
$self->{Page} is equal to $self->{LastPage}.
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
---
testbot/web/Submit.pl | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/testbot/web/Submit.pl b/testbot/web/Submit.pl
index 8a30110193..c73ff425c4 100644
--- a/testbot/web/Submit.pl
+++ b/testbot/web/Submit.pl
@@ -461,7 +461,7 @@ sub Validate($)
{
my ($self) = @_;
- if ($self->{Page} == 2 && $self->{LastPage} == 2)
+ if ($self->{Page} == 2)
{
my $VMSelected = !1;
my $VMs = CreateVMs();
@@ -481,7 +481,7 @@ sub Validate($)
return !1;
}
}
- elsif ($self->{Page} == 3 && $self->{LastPage} == 3)
+ elsif ($self->{Page} == 3)
{
if (($self->GetParam("FileType") eq "patch" &&
$self->GetParam("TestExecutable") !~ m/^[\w_.]+_test\.exe$/) ||
--
2.19.1
Nov. 30, 2018
Re: [PATCH 2/2] d3d9/tests: Use correct index variable in test_resource_access() (Coverity).
by Marvin
Hi,
While running your changed tests on Windows, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=45270
Your paranoid android.
=== w8 (32 bit report) ===
d3d9:
d3d9ex.c:4462: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w8adm (32 bit report) ===
d3d9:
d3d9ex.c:4462: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w864 (32 bit report) ===
d3d9:
d3d9ex.c:4462: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w1064 (32 bit report) ===
d3d9:
d3d9ex.c:4462: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w864 (64 bit report) ===
d3d9:
d3d9ex.c:4462: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w1064 (64 bit report) ===
d3d9:
d3d9ex.c:4462: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w8 (32 bit report) ===
d3d9:
device.c:12928: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w8adm (32 bit report) ===
d3d9:
device.c:12928: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w864 (32 bit report) ===
d3d9:
device.c:12928: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w1064 (32 bit report) ===
d3d9:
device.c:12928: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w864 (64 bit report) ===
d3d9:
device.c:12928: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== w1064 (64 bit report) ===
d3d9:
device.c:12928: Test failed: Test 29: Got unexpected hr 0x8876086c.
=== debian9 (build log) ===
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
=== debian9 (build log) ===
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
Nov. 30, 2018
Re: [PATCH 1/2] d3d8/tests: Use correct index variable in test_resource_access() (Coverity).
by Marvin
Hi,
While running your changed tests on Windows, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=45269
Your paranoid android.
=== w1064 (32 bit report) ===
d3d8:
device.c:1537: Test failed: Reset failed, hr 0x80070057.
device.c:1539: Test failed: TestCooperativeLevel failed, hr 0x88760869.
device.c:1551: Test failed: D3DVIEWPORT->Width = 400.
device.c:1552: Test failed: D3DVIEWPORT->Height = 300.
084c:device: unhandled exception c0000005 at 706FA86E
=== debian9 (build log) ===
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
=== debian9 (build log) ===
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
Nov. 30, 2018
[PATCH 2/2] d3d9/tests: Use correct index variable in test_resource_access() (Coverity).
by Józef Kucia
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
dlls/d3d9/tests/d3d9ex.c | 9 +++++----
dlls/d3d9/tests/device.c | 8 +++++---
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/d3d9/tests/d3d9ex.c b/dlls/d3d9/tests/d3d9ex.c
index 82acaf4d6a8e..eb6856f0ff76 100644
--- a/dlls/d3d9/tests/d3d9ex.c
+++ b/dlls/d3d9/tests/d3d9ex.c
@@ -4449,18 +4449,19 @@ static void test_resource_access(void)
HRESULT expected_hr;
D3DLOCKED_BOX lb;
- if (tests[j].format == FORMAT_DEPTH)
+ if (tests[i].format == FORMAT_DEPTH)
continue;
- if (tests[j].format == FORMAT_ATI2)
+ if (tests[i].format == FORMAT_ATI2)
format = MAKEFOURCC('A','T','I','2');
else
format = colour_format;
hr = IDirect3DDevice9Ex_CreateVolumeTexture(device, 16, 16, 1, 1,
tests[i].usage, format, tests[i].pool, &texture, NULL);
- ok(hr == (!(tests[i].usage & ~D3DUSAGE_DYNAMIC) && tests[i].pool != D3DPOOL_MANAGED
- ? D3D_OK : D3DERR_INVALIDCALL),
+ ok(hr == (!(tests[i].usage & ~D3DUSAGE_DYNAMIC)
+ && (tests[i].format != FORMAT_ATI2 || tests[i].pool == D3DPOOL_SCRATCH)
+ && tests[i].pool != D3DPOOL_MANAGED ? D3D_OK : D3DERR_INVALIDCALL),
"Test %u: Got unexpected hr %#x.\n", i, hr);
if (FAILED(hr))
continue;
diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c
index 6edf2b35b30d..79e2ca5a651c 100644
--- a/dlls/d3d9/tests/device.c
+++ b/dlls/d3d9/tests/device.c
@@ -12915,17 +12915,19 @@ static void test_resource_access(void)
HRESULT expected_hr;
D3DLOCKED_BOX lb;
- if (tests[j].format == FORMAT_DEPTH)
+ if (tests[i].format == FORMAT_DEPTH)
continue;
- if (tests[j].format == FORMAT_ATI2)
+ if (tests[i].format == FORMAT_ATI2)
format = MAKEFOURCC('A','T','I','2');
else
format = colour_format;
hr = IDirect3DDevice9_CreateVolumeTexture(device, 16, 16, 1, 1,
tests[i].usage, format, tests[i].pool, &texture, NULL);
- ok(hr == (!(tests[i].usage & ~D3DUSAGE_DYNAMIC) ? D3D_OK : D3DERR_INVALIDCALL),
+ ok(hr == (!(tests[i].usage & ~D3DUSAGE_DYNAMIC)
+ && (tests[i].format != FORMAT_ATI2 || tests[i].pool == D3DPOOL_SCRATCH)
+ ? D3D_OK : D3DERR_INVALIDCALL),
"Test %u: Got unexpected hr %#x.\n", i, hr);
if (FAILED(hr))
continue;
--
2.18.1
Nov. 30, 2018
[PATCH 1/2] d3d8/tests: Use correct index variable in test_resource_access() (Coverity).
by Józef Kucia
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
dlls/d3d8/tests/device.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c
index 49d2a9818cc4..a812f032a3d9 100644
--- a/dlls/d3d8/tests/device.c
+++ b/dlls/d3d8/tests/device.c
@@ -9081,17 +9081,19 @@ static void test_resource_access(void)
HRESULT expected_hr;
D3DLOCKED_BOX lb;
- if (tests[j].format == FORMAT_DEPTH)
+ if (tests[i].format == FORMAT_DEPTH)
continue;
- if (tests[j].format == FORMAT_ATI2)
+ if (tests[i].format == FORMAT_ATI2)
format = MAKEFOURCC('A','T','I','2');
else
format = colour_format;
hr = IDirect3DDevice8_CreateVolumeTexture(device, 16, 16, 1, 1,
tests[i].usage, format, tests[i].pool, &texture);
- ok(hr == (!(tests[i].usage & ~D3DUSAGE_DYNAMIC) ? D3D_OK : D3DERR_INVALIDCALL),
+ todo_wine_if(tests[i].pool == D3DPOOL_SCRATCH && tests[i].format == FORMAT_ATI2)
+ ok(hr == (!(tests[i].usage & ~D3DUSAGE_DYNAMIC) && tests[i].format != FORMAT_ATI2
+ ? D3D_OK : D3DERR_INVALIDCALL),
"Test %u: Got unexpected hr %#x.\n", i, hr);
if (FAILED(hr))
continue;
--
2.18.1
Nov. 30, 2018
Re: [PATCH 2/2] d3d8: Remove dead code from indexbuffer_init() (Coverity).
by Marvin
Hi,
While running your changed tests on Windows, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=45261
Your paranoid android.
=== debian9 (build log) ===
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
=== debian9 (build log) ===
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
Nov. 30, 2018
[PATCH 5/5] shlwapi: Forward IUnknown_* helpers to shcore.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/shlwapi/ordinal.c | 146 +++-----------------------------------
dlls/shlwapi/shlwapi.spec | 10 +--
2 files changed, 14 insertions(+), 142 deletions(-)
diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c
index 449b47b2f7..60e5761944 100644
--- a/dlls/shlwapi/ordinal.c
+++ b/dlls/shlwapi/ordinal.c
@@ -57,7 +57,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
extern HINSTANCE shlwapi_hInstance;
extern DWORD SHLWAPI_ThreadRef_index;
-HRESULT WINAPI IUnknown_QueryService(IUnknown*,REFGUID,REFIID,LPVOID*);
+static HRESULT iunknown_query_service(IUnknown*,REFGUID,REFIID,LPVOID*);
HRESULT WINAPI SHInvokeCommand(HWND,IShellFolder*,LPCITEMIDLIST,DWORD);
BOOL WINAPI SHAboutInfoW(LPWSTR,DWORD);
@@ -299,7 +299,7 @@ HRESULT WINAPI RegisterDefaultAcceptHeaders(LPBC lpBC, IUnknown *lpUnknown)
TRACE("(%p, %p)\n", lpBC, lpUnknown);
- hr = IUnknown_QueryService(lpUnknown, &IID_IWebBrowserApp, &IID_IWebBrowserApp, (void**)&pBrowser);
+ hr = iunknown_query_service(lpUnknown, &IID_IWebBrowserApp, &IID_IWebBrowserApp, (void**)&pBrowser);
if (FAILED(hr))
return hr;
@@ -1172,29 +1172,6 @@ HRESULT WINAPI ConnectToConnectionPoint(IUnknown* lpUnkSink, REFIID riid, BOOL f
return hRet;
}
-/*************************************************************************
- * @ [SHLWAPI.169]
- *
- * Release an interface and zero a supplied pointer.
- *
- * PARAMS
- * lpUnknown [I] Object to release
- *
- * RETURNS
- * Nothing.
- */
-void WINAPI IUnknown_AtomicRelease(IUnknown ** lpUnknown)
-{
- TRACE("(%p)\n", lpUnknown);
-
- if(!lpUnknown || !*lpUnknown) return;
-
- TRACE("doing Release\n");
-
- IUnknown_Release(*lpUnknown);
- *lpUnknown = NULL;
-}
-
/*************************************************************************
* @ [SHLWAPI.170]
*
@@ -1342,44 +1319,6 @@ HRESULT WINAPI IUnknown_SetOwner(IUnknown *iface, IUnknown *pUnk)
return hr;
}
-/*************************************************************************
- * @ [SHLWAPI.174]
- *
- * Call either IObjectWithSite_SetSite() or IInternetSecurityManager_SetSecuritySite() on
- * an object.
- *
- */
-HRESULT WINAPI IUnknown_SetSite(
- IUnknown *obj, /* [in] OLE object */
- IUnknown *site) /* [in] Site interface */
-{
- HRESULT hr;
- IObjectWithSite *iobjwithsite;
- IInternetSecurityManager *isecmgr;
-
- if (!obj) return E_FAIL;
-
- hr = IUnknown_QueryInterface(obj, &IID_IObjectWithSite, (LPVOID *)&iobjwithsite);
- TRACE("IID_IObjectWithSite QI ret=%08x, %p\n", hr, iobjwithsite);
- if (SUCCEEDED(hr))
- {
- hr = IObjectWithSite_SetSite(iobjwithsite, site);
- TRACE("done IObjectWithSite_SetSite ret=%08x\n", hr);
- IObjectWithSite_Release(iobjwithsite);
- }
- else
- {
- hr = IUnknown_QueryInterface(obj, &IID_IInternetSecurityManager, (LPVOID *)&isecmgr);
- TRACE("IID_IInternetSecurityManager QI ret=%08x, %p\n", hr, isecmgr);
- if (FAILED(hr)) return hr;
-
- hr = IInternetSecurityManager_SetSecuritySite(isecmgr, (IInternetSecurityMgrSite *)site);
- TRACE("done IInternetSecurityManager_SetSecuritySite ret=%08x\n", hr);
- IInternetSecurityManager_Release(isecmgr);
- }
- return hr;
-}
-
/*************************************************************************
* @ [SHLWAPI.175]
*
@@ -1421,26 +1360,7 @@ HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
return hr;
}
-/*************************************************************************
- * @ [SHLWAPI.176]
- *
- * Retrieve a Service Interface from an object.
- *
- * PARAMS
- * lpUnknown [I] Object to get an IServiceProvider interface from
- * sid [I] Service ID for IServiceProvider_QueryService() call
- * riid [I] Function requested for QueryService call
- * lppOut [O] Destination for the service interface pointer
- *
- * RETURNS
- * Success: S_OK. lppOut contains an object providing the requested service
- * Failure: An HRESULT error code
- *
- * NOTES
- * lpUnknown is expected to support the IServiceProvider interface.
- */
-HRESULT WINAPI IUnknown_QueryService(IUnknown* lpUnknown, REFGUID sid, REFIID riid,
- LPVOID *lppOut)
+static HRESULT iunknown_query_service(IUnknown* lpUnknown, REFGUID sid, REFIID riid, LPVOID *lppOut)
{
IServiceProvider* pService = NULL;
HRESULT hRet;
@@ -1500,7 +1420,7 @@ HRESULT WINAPI IUnknown_QueryServiceExec(IUnknown *lpUnknown, REFIID service,
TRACE("%p %s %s %d %08x %p %p\n", lpUnknown, debugstr_guid(service),
debugstr_guid(group), cmdId, cmdOpt, pIn, pOut);
- hr = IUnknown_QueryService(lpUnknown, service, &IID_IOleCommandTarget, (void**)&target);
+ hr = iunknown_query_service(lpUnknown, service, &IID_IOleCommandTarget, (void**)&target);
if (hr == S_OK)
{
hr = IOleCommandTarget_Exec(target, group, cmdId, cmdOpt, pIn, pOut);
@@ -1537,7 +1457,7 @@ HRESULT WINAPI IUnknown_ProfferService(IUnknown *lpUnknown, REFGUID service, ISe
TRACE("%p %s %p %p\n", lpUnknown, debugstr_guid(service), pService, pCookie);
- hr = IUnknown_QueryService(lpUnknown, &IID_IProfferService, &IID_IProfferService, (void**)&proffer);
+ hr = iunknown_query_service(lpUnknown, &IID_IProfferService, &IID_IProfferService, (void**)&proffer);
if (hr == S_OK)
{
if (pService)
@@ -1905,7 +1825,7 @@ HRESULT WINAPI IUnknown_HandleIRestrict(LPUNKNOWN lpUnknown, PVOID lpArg1,
if (lpUnknown && lpArg4)
{
- hRet = IUnknown_QueryService(lpUnknown, (REFGUID)service_id,
+ hRet = iunknown_query_service(lpUnknown, (REFGUID)service_id,
(REFGUID)function_id, (void**)&lpUnkInner);
if (SUCCEEDED(hRet) && lpUnkInner)
@@ -2115,32 +2035,6 @@ int WINAPI SHSearchMapInt(const int *lpKeys, const int *lpValues, int iLen, int
return -1; /* Not found */
}
-
-/*************************************************************************
- * @ [SHLWAPI.199]
- *
- * Copy an interface pointer
- *
- * PARAMS
- * lppDest [O] Destination for copy
- * lpUnknown [I] Source for copy
- *
- * RETURNS
- * Nothing.
- */
-VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown)
-{
- TRACE("(%p,%p)\n", lppDest, lpUnknown);
-
- IUnknown_AtomicRelease(lppDest);
-
- if (lpUnknown)
- {
- IUnknown_AddRef(lpUnknown);
- *lppDest = lpUnknown;
- }
-}
-
/*************************************************************************
* @ [SHLWAPI.200]
*
@@ -2535,29 +2429,6 @@ LRESULT CALLBACK SHDefWindowProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM
return DefWindowProcA(hWnd, uMessage, wParam, lParam);
}
-/*************************************************************************
- * @ [SHLWAPI.256]
- */
-HRESULT WINAPI IUnknown_GetSite(LPUNKNOWN lpUnknown, REFIID iid, PVOID *lppSite)
-{
- HRESULT hRet = E_INVALIDARG;
- LPOBJECTWITHSITE lpSite = NULL;
-
- TRACE("(%p,%s,%p)\n", lpUnknown, debugstr_guid(iid), lppSite);
-
- if (lpUnknown && iid && lppSite)
- {
- hRet = IUnknown_QueryInterface(lpUnknown, &IID_IObjectWithSite,
- (void**)&lpSite);
- if (SUCCEEDED(hRet) && lpSite)
- {
- hRet = IObjectWithSite_GetSite(lpSite, iid, lppSite);
- IObjectWithSite_Release(lpSite);
- }
- }
- return hRet;
-}
-
/*************************************************************************
* @ [SHLWAPI.257]
*
@@ -2758,7 +2629,8 @@ VOID WINAPI SHWeakReleaseInterface(IUnknown *lpDest, IUnknown **lppUnknown)
{
/* Copy Reference*/
IUnknown_AddRef(lpDest);
- IUnknown_AtomicRelease(lppUnknown); /* Release existing interface */
+ IUnknown_Release(*lppUnknown); /* Release existing interface */
+ *lppUnknown = NULL;
}
}
@@ -5174,7 +5046,7 @@ HRESULT WINAPI IUnknown_QueryServiceForWebBrowserApp(IUnknown* lpUnknown,
REFGUID riid, LPVOID *lppOut)
{
FIXME("%p %s %p semi-STUB\n", lpUnknown, debugstr_guid(riid), lppOut);
- return IUnknown_QueryService(lpUnknown,&IID_IWebBrowserApp,riid,lppOut);
+ return iunknown_query_service(lpUnknown,&IID_IWebBrowserApp,riid,lppOut);
}
/**************************************************************************
diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec
index 843c62b21e..62ebb85f46 100644
--- a/dlls/shlwapi/shlwapi.spec
+++ b/dlls/shlwapi/shlwapi.spec
@@ -166,14 +166,14 @@
166 stdcall -noname SHIsEmptyStream(ptr)
167 stdcall -noname SHSetParentHwnd(long ptr)
168 stdcall -ordinal ConnectToConnectionPoint(ptr ptr long ptr ptr ptr)
-169 stdcall -ordinal IUnknown_AtomicRelease(long)
+169 stdcall -ordinal IUnknown_AtomicRelease(ptr) shcore.IUnknown_AtomicRelease
170 stdcall -noname PathSkipLeadingSlashesA(str)
171 stdcall -noname SHIsSameObject(ptr ptr)
172 stdcall -ordinal IUnknown_GetWindow(ptr ptr)
173 stdcall -noname IUnknown_SetOwner(ptr ptr)
-174 stdcall -ordinal IUnknown_SetSite(ptr ptr)
+174 stdcall -ordinal IUnknown_SetSite(ptr ptr) shcore.IUnknown_SetSite
175 stdcall -noname IUnknown_GetClassID(ptr ptr)
-176 stdcall -ordinal IUnknown_QueryService(ptr ptr ptr ptr)
+176 stdcall -ordinal IUnknown_QueryService(ptr ptr ptr ptr) shcore.IUnknown_QueryService
177 stdcall -noname SHLoadMenuPopup(ptr wstr)
178 stdcall -noname SHPropagateMessage(ptr long long long long)
179 stdcall -noname SHMenuIndexFromID(long long)
@@ -196,7 +196,7 @@
196 stdcall -noname SHVerbExistsNA(str ptr ptr long)
197 stdcall -noname SHFillRectClr(long ptr long)
198 stdcall -noname SHSearchMapInt(ptr ptr long long)
-199 stdcall -ordinal IUnknown_Set(ptr ptr)
+199 stdcall -ordinal IUnknown_Set(ptr ptr) shcore.IUnknown_Set
200 stdcall -noname MayQSForward(ptr ptr ptr long ptr ptr)
201 stdcall -noname MayExecForward(ptr long ptr long long ptr ptr)
202 stdcall -noname IsQSForward(ptr long ptr)
@@ -253,7 +253,7 @@
253 stub -noname StopWatchExA
254 stub -noname StopWatchExW
255 stub -noname EventTraceHandler
-256 stdcall -ordinal IUnknown_GetSite(ptr ptr ptr)
+256 stdcall -ordinal IUnknown_GetSite(ptr ptr ptr) shcore.IUnknown_GetSite
257 stdcall -noname SHCreateWorkerWindowA(ptr ptr long long ptr long)
258 stub -noname SHRegisterWaitForSingleObject
259 stub -noname SHUnregisterWait
--
2.19.2
Nov. 30, 2018
[PATCH 4/5] shlwapi: Forward file-base stream calls to shcore.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/shcore/main.c | 1 +
dlls/shlwapi/istream.c | 497 --------------------------------------
dlls/shlwapi/shlwapi.spec | 6 +-
3 files changed, 4 insertions(+), 500 deletions(-)
diff --git a/dlls/shcore/main.c b/dlls/shcore/main.c
index 1e84c9c300..d1c850dc64 100644
--- a/dlls/shcore/main.c
+++ b/dlls/shcore/main.c
@@ -1,4 +1,5 @@
/*
+ * Copyright 2002 Jon Griffiths
* Copyright 2016 Sebastian Lackner
*
* This library is free software; you can redistribute it and/or
diff --git a/dlls/shlwapi/istream.c b/dlls/shlwapi/istream.c
index a77ed8ab1b..ba9874b75e 100644
--- a/dlls/shlwapi/istream.c
+++ b/dlls/shlwapi/istream.c
@@ -34,503 +34,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(shell);
-#define STGM_ACCESS_MODE(stgm) ((stgm)&0x0000f)
-#define STGM_SHARE_MODE(stgm) ((stgm)&0x000f0)
-#define STGM_CREATE_MODE(stgm) ((stgm)&0x0f000)
-
-/* Layout of ISHFileStream object */
-typedef struct
-{
- IStream IStream_iface;
- LONG ref;
- HANDLE hFile;
- DWORD dwMode;
- LPOLESTR lpszPath;
- DWORD type;
- DWORD grfStateBits;
-} ISHFileStream;
-
-static inline ISHFileStream *impl_from_IStream(IStream *iface)
-{
- return CONTAINING_RECORD(iface, ISHFileStream, IStream_iface);
-}
-
-/**************************************************************************
-* IStream_fnQueryInterface
-*/
-static HRESULT WINAPI IStream_fnQueryInterface(IStream *iface, REFIID riid, LPVOID *ppvObj)
-{
- ISHFileStream *This = impl_from_IStream(iface);
-
- TRACE("(%p,%s,%p)\n", This, debugstr_guid(riid), ppvObj);
-
- *ppvObj = NULL;
-
- if(IsEqualIID(riid, &IID_IUnknown) ||
- IsEqualIID(riid, &IID_IStream))
- {
- IStream_AddRef(iface);
- *ppvObj = iface;
- return S_OK;
- }
- return E_NOINTERFACE;
-}
-
-/**************************************************************************
-* IStream_fnAddRef
-*/
-static ULONG WINAPI IStream_fnAddRef(IStream *iface)
-{
- ISHFileStream *This = impl_from_IStream(iface);
- ULONG refCount = InterlockedIncrement(&This->ref);
-
- TRACE("(%p)->(ref before=%u)\n",This, refCount - 1);
-
- return refCount;
-}
-
-/**************************************************************************
-* IStream_fnRelease
-*/
-static ULONG WINAPI IStream_fnRelease(IStream *iface)
-{
- ISHFileStream *This = impl_from_IStream(iface);
- ULONG refCount = InterlockedDecrement(&This->ref);
-
- TRACE("(%p)->(ref before=%u)\n",This, refCount + 1);
-
- if (!refCount)
- {
- IStream_Commit(iface, 0); /* If ever buffered, this will be needed */
- LocalFree(This->lpszPath);
- CloseHandle(This->hFile);
- HeapFree(GetProcessHeap(), 0, This);
- }
-
- return refCount;
-}
-
-/**************************************************************************
- * IStream_fnRead
- */
-static HRESULT WINAPI IStream_fnRead(IStream *iface, void* pv, ULONG cb, ULONG* pcbRead)
-{
- ISHFileStream *This = impl_from_IStream(iface);
- DWORD dwRead = 0;
-
- TRACE("(%p,%p,%u,%p)\n", This, pv, cb, pcbRead);
-
- if (!ReadFile(This->hFile, pv, cb, &dwRead, NULL))
- {
- WARN("error %d reading file\n", GetLastError());
- return S_FALSE;
- }
- if (pcbRead)
- *pcbRead = dwRead;
- return dwRead == cb ? S_OK : S_FALSE;
-}
-
-/**************************************************************************
- * IStream_fnWrite
- */
-static HRESULT WINAPI IStream_fnWrite(IStream *iface, const void* pv, ULONG cb, ULONG* pcbWritten)
-{
- ISHFileStream *This = impl_from_IStream(iface);
- DWORD dwWritten = 0;
-
- TRACE("(%p,%p,%u,%p)\n", This, pv, cb, pcbWritten);
-
- switch (STGM_ACCESS_MODE(This->dwMode))
- {
- case STGM_WRITE:
- case STGM_READWRITE:
- break;
- default:
- return STG_E_ACCESSDENIED;
- }
-
- if (!WriteFile(This->hFile, pv, cb, &dwWritten, NULL))
- return HRESULT_FROM_WIN32(GetLastError());
-
- if (pcbWritten)
- *pcbWritten = dwWritten;
- return S_OK;
-}
-
-/**************************************************************************
- * IStream_fnSeek
- */
-static HRESULT WINAPI IStream_fnSeek(IStream *iface, LARGE_INTEGER dlibMove,
- DWORD dwOrigin, ULARGE_INTEGER* pNewPos)
-{
- ISHFileStream *This = impl_from_IStream(iface);
- DWORD dwPos;
-
- TRACE("(%p,%s,%d,%p)\n", This, wine_dbgstr_longlong(dlibMove.QuadPart), dwOrigin, pNewPos);
-
- IStream_Commit(iface, 0); /* If ever buffered, this will be needed */
- dwPos = SetFilePointer(This->hFile, dlibMove.u.LowPart, NULL, dwOrigin);
- if( dwPos == INVALID_SET_FILE_POINTER )
- return HRESULT_FROM_WIN32(GetLastError());
-
- if (pNewPos)
- {
- pNewPos->u.HighPart = 0;
- pNewPos->u.LowPart = dwPos;
- }
- return S_OK;
-}
-
-/**************************************************************************
- * IStream_fnSetSize
- */
-static HRESULT WINAPI IStream_fnSetSize(IStream *iface, ULARGE_INTEGER libNewSize)
-{
- ISHFileStream *This = impl_from_IStream(iface);
-
- TRACE("(%p,%s)\n", This, wine_dbgstr_longlong(libNewSize.QuadPart));
-
- IStream_Commit(iface, 0); /* If ever buffered, this will be needed */
- if( ! SetFilePointer( This->hFile, libNewSize.QuadPart, NULL, FILE_BEGIN ) )
- return E_FAIL;
-
- if( ! SetEndOfFile( This->hFile ) )
- return E_FAIL;
-
- return S_OK;
-}
-
-/**************************************************************************
- * IStream_fnCopyTo
- */
-static HRESULT WINAPI IStream_fnCopyTo(IStream *iface, IStream* pstm, ULARGE_INTEGER cb,
- ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten)
-{
- ISHFileStream *This = impl_from_IStream(iface);
- char copyBuff[1024];
- ULONGLONG ulSize;
- HRESULT hRet = S_OK;
-
- TRACE("(%p,%p,%s,%p,%p)\n", This, pstm, wine_dbgstr_longlong(cb.QuadPart), pcbRead, pcbWritten);
-
- if (pcbRead)
- pcbRead->QuadPart = 0;
- if (pcbWritten)
- pcbWritten->QuadPart = 0;
-
- if (!pstm)
- return S_OK;
-
- IStream_Commit(iface, 0); /* If ever buffered, this will be needed */
-
- /* Copy data */
- ulSize = cb.QuadPart;
- while (ulSize)
- {
- ULONG ulLeft, ulRead, ulWritten;
-
- ulLeft = ulSize > sizeof(copyBuff) ? sizeof(copyBuff) : ulSize;
-
- /* Read */
- hRet = IStream_Read(iface, copyBuff, ulLeft, &ulRead);
- if (FAILED(hRet) || ulRead == 0)
- break;
- if (pcbRead)
- pcbRead->QuadPart += ulRead;
-
- /* Write */
- hRet = IStream_Write(pstm, copyBuff, ulRead, &ulWritten);
- if (pcbWritten)
- pcbWritten->QuadPart += ulWritten;
- if (FAILED(hRet) || ulWritten != ulLeft)
- break;
-
- ulSize -= ulLeft;
- }
- return hRet;
-}
-
-/**************************************************************************
- * IStream_fnCommit
- */
-static HRESULT WINAPI IStream_fnCommit(IStream *iface, DWORD grfCommitFlags)
-{
- ISHFileStream *This = impl_from_IStream(iface);
-
- TRACE("(%p,%d)\n", This, grfCommitFlags);
- /* Currently unbuffered: This function is not needed */
- return S_OK;
-}
-
-/**************************************************************************
- * IStream_fnRevert
- */
-static HRESULT WINAPI IStream_fnRevert(IStream *iface)
-{
- ISHFileStream *This = impl_from_IStream(iface);
-
- TRACE("(%p)\n", This);
- return E_NOTIMPL;
-}
-
-/**************************************************************************
- * IStream_fnLockRegion
- */
-static HRESULT WINAPI IStream_fnLockRegion(IStream *iface, ULARGE_INTEGER libOffset,
- ULARGE_INTEGER cb, DWORD dwLockType)
-{
- ISHFileStream *This = impl_from_IStream(iface);
- TRACE("(%p,%s,%s,%d)\n", This, wine_dbgstr_longlong(libOffset.QuadPart), wine_dbgstr_longlong(cb.QuadPart), dwLockType);
- return E_NOTIMPL;
-}
-
-/**************************************************************************
- * IStream_fnUnlockRegion
- */
-static HRESULT WINAPI IStream_fnUnlockRegion(IStream *iface, ULARGE_INTEGER libOffset,
- ULARGE_INTEGER cb, DWORD dwLockType)
-{
- ISHFileStream *This = impl_from_IStream(iface);
- TRACE("(%p,%s,%s,%d)\n", This, wine_dbgstr_longlong(libOffset.QuadPart), wine_dbgstr_longlong(cb.QuadPart), dwLockType);
- return E_NOTIMPL;
-}
-
-/*************************************************************************
- * IStream_fnStat
- */
-static HRESULT WINAPI IStream_fnStat(IStream *iface, STATSTG* lpStat,
- DWORD grfStatFlag)
-{
- ISHFileStream *This = impl_from_IStream(iface);
- BY_HANDLE_FILE_INFORMATION fi;
-
- TRACE("(%p,%p,%d)\n", This, lpStat, grfStatFlag);
-
- if (!lpStat)
- return STG_E_INVALIDPOINTER;
-
- memset(&fi, 0, sizeof(fi));
- GetFileInformationByHandle(This->hFile, &fi);
-
- if (grfStatFlag & STATFLAG_NONAME)
- lpStat->pwcsName = NULL;
- else
- lpStat->pwcsName = StrDupW(This->lpszPath);
- lpStat->type = This->type;
- lpStat->cbSize.u.LowPart = fi.nFileSizeLow;
- lpStat->cbSize.u.HighPart = fi.nFileSizeHigh;
- lpStat->mtime = fi.ftLastWriteTime;
- lpStat->ctime = fi.ftCreationTime;
- lpStat->atime = fi.ftLastAccessTime;
- lpStat->grfMode = This->dwMode;
- lpStat->grfLocksSupported = 0;
- memcpy(&lpStat->clsid, &IID_IStream, sizeof(CLSID));
- lpStat->grfStateBits = This->grfStateBits;
- lpStat->reserved = 0;
-
- return S_OK;
-}
-
-/*************************************************************************
- * IStream_fnClone
- */
-static HRESULT WINAPI IStream_fnClone(IStream *iface, IStream** ppstm)
-{
- ISHFileStream *This = impl_from_IStream(iface);
-
- TRACE("(%p,%p)\n", This, ppstm);
- if (ppstm)
- *ppstm = NULL;
- return E_NOTIMPL;
-}
-
-static const IStreamVtbl SHLWAPI_fsVTable =
-{
- IStream_fnQueryInterface,
- IStream_fnAddRef,
- IStream_fnRelease,
- IStream_fnRead,
- IStream_fnWrite,
- IStream_fnSeek,
- IStream_fnSetSize,
- IStream_fnCopyTo,
- IStream_fnCommit,
- IStream_fnRevert,
- IStream_fnLockRegion,
- IStream_fnUnlockRegion,
- IStream_fnStat,
- IStream_fnClone
-};
-
-/**************************************************************************
- * IStream_Create
- *
- * Internal helper: Create and initialise a new file stream object.
- */
-static IStream *IStream_Create(LPCWSTR lpszPath, HANDLE hFile, DWORD dwMode)
-{
- ISHFileStream *fileStream;
-
- fileStream = HeapAlloc(GetProcessHeap(), 0, sizeof(ISHFileStream));
- if (!fileStream) return NULL;
-
- fileStream->IStream_iface.lpVtbl = &SHLWAPI_fsVTable;
- fileStream->ref = 1;
- fileStream->hFile = hFile;
- fileStream->dwMode = dwMode;
- fileStream->lpszPath = StrDupW(lpszPath);
- fileStream->type = 0; /* FIXME */
- fileStream->grfStateBits = 0; /* FIXME */
-
- TRACE ("Returning %p\n", fileStream);
- return &fileStream->IStream_iface;
-}
-
-/*************************************************************************
- * SHCreateStreamOnFileEx [SHLWAPI.@]
- *
- * Create a stream on a file.
- *
- * PARAMS
- * lpszPath [I] Path of file to create stream on
- * dwMode [I] Mode to create stream in
- * dwAttributes [I] Attributes of the file
- * bCreate [I] Whether to create the file if it doesn't exist
- * lpTemplate [I] Reserved, must be NULL
- * lppStream [O] Destination for created stream
- *
- * RETURNS
- * Success: S_OK. lppStream contains the new stream object
- * Failure: E_INVALIDARG if any parameter is invalid, or an HRESULT error code
- *
- * NOTES
- * This function is available in Unicode only.
- */
-HRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR lpszPath, DWORD dwMode,
- DWORD dwAttributes, BOOL bCreate,
- IStream *lpTemplate, IStream **lppStream)
-{
- DWORD dwAccess, dwShare, dwCreate;
- HANDLE hFile;
-
- TRACE("(%s,%d,0x%08X,%d,%p,%p)\n", debugstr_w(lpszPath), dwMode,
- dwAttributes, bCreate, lpTemplate, lppStream);
-
- if (!lpszPath || !lppStream || lpTemplate)
- return E_INVALIDARG;
-
- *lppStream = NULL;
-
- /* Access */
- switch (STGM_ACCESS_MODE(dwMode))
- {
- case STGM_WRITE:
- case STGM_READWRITE:
- dwAccess = GENERIC_READ|GENERIC_WRITE;
- break;
- case STGM_READ:
- dwAccess = GENERIC_READ;
- break;
- default:
- return E_INVALIDARG;
- }
-
- /* Sharing */
- switch (STGM_SHARE_MODE(dwMode))
- {
- case 0:
- case STGM_SHARE_DENY_NONE:
- dwShare = FILE_SHARE_READ|FILE_SHARE_WRITE;
- break;
- case STGM_SHARE_DENY_READ:
- dwShare = FILE_SHARE_WRITE;
- break;
- case STGM_SHARE_DENY_WRITE:
- dwShare = FILE_SHARE_READ;
- break;
- case STGM_SHARE_EXCLUSIVE:
- dwShare = 0;
- break;
- default:
- return E_INVALIDARG;
- }
-
- switch(STGM_CREATE_MODE(dwMode))
- {
- case STGM_FAILIFTHERE:
- dwCreate = bCreate ? CREATE_NEW : OPEN_EXISTING;
- break;
- case STGM_CREATE:
- dwCreate = CREATE_ALWAYS;
- break;
- default:
- return E_INVALIDARG;
- }
-
- /* Open HANDLE to file */
- hFile = CreateFileW(lpszPath, dwAccess, dwShare, NULL, dwCreate,
- dwAttributes, 0);
-
- if(hFile == INVALID_HANDLE_VALUE)
- return HRESULT_FROM_WIN32(GetLastError());
-
- *lppStream = IStream_Create(lpszPath, hFile, dwMode);
-
- if(!*lppStream)
- {
- CloseHandle(hFile);
- return E_OUTOFMEMORY;
- }
- return S_OK;
-}
-
-/*************************************************************************
- * SHCreateStreamOnFileW [SHLWAPI.@]
- *
- * See SHCreateStreamOnFileA.
- */
-HRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR lpszPath, DWORD dwMode,
- IStream **lppStream)
-{
- TRACE("(%s,%d,%p)\n", debugstr_w(lpszPath), dwMode, lppStream);
-
- if (!lpszPath || !lppStream)
- return E_INVALIDARG;
-
- if ((dwMode & (STGM_CONVERT|STGM_DELETEONRELEASE|STGM_TRANSACTED)) != 0)
- return E_INVALIDARG;
-
- return SHCreateStreamOnFileEx(lpszPath, dwMode, 0, FALSE, NULL, lppStream);
-}
-
-/*************************************************************************
- * SHCreateStreamOnFileA [SHLWAPI.@]
- *
- * Create a stream on a file.
- *
- * PARAMS
- * lpszPath [I] Path of file to create stream on
- * dwMode [I] Mode to create stream in
- * lppStream [O] Destination for created IStream object
- *
- * RETURNS
- * Success: S_OK. lppStream contains the new IStream object
- * Failure: E_INVALIDARG if any parameter is invalid, or an HRESULT error code
- */
-HRESULT WINAPI SHCreateStreamOnFileA(LPCSTR lpszPath, DWORD dwMode,
- IStream **lppStream)
-{
- WCHAR szPath[MAX_PATH];
-
- TRACE("(%s,%d,%p)\n", debugstr_a(lpszPath), dwMode, lppStream);
-
- if (!lpszPath)
- return HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND);
-
- MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, szPath, MAX_PATH);
- return SHCreateStreamOnFileW(szPath, dwMode, lppStream);
-}
-
/*************************************************************************
* @ [SHLWAPI.184]
*
diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec
index 134bb47177..843c62b21e 100644
--- a/dlls/shlwapi/shlwapi.spec
+++ b/dlls/shlwapi/shlwapi.spec
@@ -683,9 +683,9 @@
@ stdcall SHCopyKeyA(long str long long)
@ stdcall SHCopyKeyW(long wstr long long)
@ stdcall SHCreateShellPalette(long)
-@ stdcall SHCreateStreamOnFileA(str long ptr)
-@ stdcall SHCreateStreamOnFileEx(wstr long long long ptr ptr)
-@ stdcall SHCreateStreamOnFileW(wstr long ptr)
+@ stdcall SHCreateStreamOnFileA(str long ptr) shcore.SHCreateStreamOnFileA
+@ stdcall SHCreateStreamOnFileEx(wstr long long long ptr ptr) shcore.SHCreateStreamOnFileEx
+@ stdcall SHCreateStreamOnFileW(wstr long ptr) shcore.SHCreateStreamOnFileW
@ stdcall SHCreateStreamWrapper(ptr ptr long ptr)
@ stdcall SHCreateThreadRef(ptr ptr)
@ stdcall SHDeleteEmptyKeyA(long ptr)
--
2.19.2
Nov. 30, 2018
[PATCH 3/5] shcore: Fix return value for file-based Commit().
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/shcore/main.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/dlls/shcore/main.c b/dlls/shcore/main.c
index a53a9849e8..1e84c9c300 100644
--- a/dlls/shcore/main.c
+++ b/dlls/shcore/main.c
@@ -966,6 +966,15 @@ static HRESULT WINAPI filestream_CopyTo(IStream *iface, IStream *dest, ULARGE_IN
return hr;
}
+static HRESULT WINAPI filestream_Commit(IStream *iface, DWORD flags)
+{
+ struct shstream *stream = impl_from_IStream(iface);
+
+ TRACE("(%p, %#x)\n", stream, flags);
+
+ return S_OK;
+}
+
static HRESULT WINAPI filestream_Stat(IStream *iface, STATSTG *statstg, DWORD flags)
{
struct shstream *stream = impl_from_IStream(iface);
@@ -1012,7 +1021,7 @@ static const IStreamVtbl filestreamvtbl =
filestream_Seek,
filestream_SetSize,
filestream_CopyTo,
- shstream_Commit,
+ filestream_Commit,
shstream_Revert,
shstream_LockRegion,
shstream_UnlockRegion,
--
2.19.2
Nov. 30, 2018
[PATCH 2/5] shcore: Add IsOS().
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/shcore/main.c | 120 ++++++++++++++++++++++++++++++++++++++++
dlls/shcore/shcore.spec | 2 +-
2 files changed, 121 insertions(+), 1 deletion(-)
diff --git a/dlls/shcore/main.c b/dlls/shcore/main.c
index 45df1a8f45..a53a9849e8 100644
--- a/dlls/shcore/main.c
+++ b/dlls/shcore/main.c
@@ -2315,3 +2315,123 @@ LONG WINAPI SHQueryInfoKeyW(HKEY hkey, DWORD *subkeys, DWORD *subkey_max, DWORD
return RegQueryInfoKeyW(hkey, NULL, NULL, NULL, subkeys, subkey_max, NULL, values, value_max, NULL, NULL, NULL);
}
+
+/*************************************************************************
+ * IsOS [SHCORE.@]
+ */
+BOOL WINAPI IsOS(DWORD feature)
+{
+ DWORD platform, majorv, minorv;
+ OSVERSIONINFOA osvi;
+
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
+ if (!GetVersionExA(&osvi))
+ return FALSE;
+
+ majorv = osvi.dwMajorVersion;
+ minorv = osvi.dwMinorVersion;
+ platform = osvi.dwPlatformId;
+
+#define ISOS_RETURN(x) \
+ TRACE("(0x%x) ret=%d\n",feature,(x)); \
+ return (x);
+
+ switch(feature) {
+ case OS_WIN32SORGREATER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32s
+ || platform == VER_PLATFORM_WIN32_WINDOWS)
+ case OS_NT:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+ case OS_WIN95ORGREATER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS)
+ case OS_NT4ORGREATER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 4)
+ case OS_WIN2000ORGREATER_ALT:
+ case OS_WIN2000ORGREATER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5)
+ case OS_WIN98ORGREATER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS && minorv >= 10)
+ case OS_WIN98_GOLD:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS && minorv == 10)
+ case OS_WIN2000PRO:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5)
+ case OS_WIN2000SERVER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && (minorv == 0 || minorv == 1))
+ case OS_WIN2000ADVSERVER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && (minorv == 0 || minorv == 1))
+ case OS_WIN2000DATACENTER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && (minorv == 0 || minorv == 1))
+ case OS_WIN2000TERMINAL:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && (minorv == 0 || minorv == 1))
+ case OS_EMBEDDED:
+ FIXME("(OS_EMBEDDED) What should we return here?\n");
+ return FALSE;
+ case OS_TERMINALCLIENT:
+ FIXME("(OS_TERMINALCLIENT) What should we return here?\n");
+ return FALSE;
+ case OS_TERMINALREMOTEADMIN:
+ FIXME("(OS_TERMINALREMOTEADMIN) What should we return here?\n");
+ return FALSE;
+ case OS_WIN95_GOLD:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS && minorv == 0)
+ case OS_MEORGREATER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS && minorv >= 90)
+ case OS_XPORGREATER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5 && minorv >= 1)
+ case OS_HOME:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5 && minorv >= 1)
+ case OS_PROFESSIONAL:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+ case OS_DATACENTER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+ case OS_ADVSERVER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5)
+ case OS_SERVER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+ case OS_TERMINALSERVER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+ case OS_PERSONALTERMINALSERVER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && minorv >= 1 && majorv >= 5)
+ case OS_FASTUSERSWITCHING:
+ FIXME("(OS_FASTUSERSWITCHING) What should we return here?\n");
+ return TRUE;
+ case OS_WELCOMELOGONUI:
+ FIXME("(OS_WELCOMELOGONUI) What should we return here?\n");
+ return FALSE;
+ case OS_DOMAINMEMBER:
+ FIXME("(OS_DOMAINMEMBER) What should we return here?\n");
+ return TRUE;
+ case OS_ANYSERVER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+ case OS_WOW6432:
+ {
+ BOOL is_wow64;
+ IsWow64Process(GetCurrentProcess(), &is_wow64);
+ return is_wow64;
+ }
+ case OS_WEBSERVER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+ case OS_SMALLBUSINESSSERVER:
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+ case OS_TABLETPC:
+ FIXME("(OS_TABLETPC) What should we return here?\n");
+ return FALSE;
+ case OS_SERVERADMINUI:
+ FIXME("(OS_SERVERADMINUI) What should we return here?\n");
+ return FALSE;
+ case OS_MEDIACENTER:
+ FIXME("(OS_MEDIACENTER) What should we return here?\n");
+ return FALSE;
+ case OS_APPLIANCE:
+ FIXME("(OS_APPLIANCE) What should we return here?\n");
+ return FALSE;
+ case 0x25: /*OS_VISTAORGREATER*/
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 6)
+ }
+
+#undef ISOS_RETURN
+
+ WARN("(0x%x) unknown parameter\n", feature);
+
+ return FALSE;
+}
diff --git a/dlls/shcore/shcore.spec b/dlls/shcore/shcore.spec
index c0150cbc90..6ad1297989 100644
--- a/dlls/shcore/shcore.spec
+++ b/dlls/shcore/shcore.spec
@@ -25,7 +25,7 @@
@ stdcall IUnknown_QueryService(ptr ptr ptr ptr)
@ stdcall IUnknown_Set(ptr ptr)
@ stdcall IUnknown_SetSite(ptr ptr)
-@ stdcall IsOS(long) shlwapi.IsOS
+@ stdcall IsOS(long)
@ stub RegisterScaleChangeEvent
@ stub RegisterScaleChangeNotifications
@ stub RevokeScaleChangeNotifications
--
2.19.2
Nov. 30, 2018