Module: wine Branch: master Commit: 9d3e458c55391141971217ec0088931d598236aa URL: https://gitlab.winehq.org/wine/wine/-/commit/9d3e458c55391141971217ec0088931...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Mar 15 19:27:06 2024 +0100
wshom/network: Implement UserDomain property.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56434 Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
---
dlls/wshom.ocx/network.c | 7 +++++-- dlls/wshom.ocx/shell.c | 20 +++++++++++++------- dlls/wshom.ocx/tests/wshom.c | 8 ++++++++ dlls/wshom.ocx/wshom_private.h | 1 + 4 files changed, 27 insertions(+), 9 deletions(-)
diff --git a/dlls/wshom.ocx/network.c b/dlls/wshom.ocx/network.c index f2a88c2117f..1f7996d2952 100644 --- a/dlls/wshom.ocx/network.c +++ b/dlls/wshom.ocx/network.c @@ -114,9 +114,12 @@ static HRESULT WINAPI WshNetwork2_Invoke(IWshNetwork2 *iface, DISPID dispIdMembe
static HRESULT WINAPI WshNetwork2_get_UserDomain(IWshNetwork2 *iface, BSTR *user_domain) { - FIXME("%p stub\n", user_domain); + TRACE("%p, %p.\n", iface, user_domain);
- return E_NOTIMPL; + if (!user_domain) + return E_POINTER; + + return get_env_var(L"USERDOMAIN", user_domain); }
static HRESULT WINAPI WshNetwork2_get_UserName(IWshNetwork2 *iface, BSTR *user_name) diff --git a/dlls/wshom.ocx/shell.c b/dlls/wshom.ocx/shell.c index 69db995cd0d..dd21e03b898 100644 --- a/dlls/wshom.ocx/shell.c +++ b/dlls/wshom.ocx/shell.c @@ -538,16 +538,10 @@ static HRESULT WINAPI WshEnvironment_Invoke(IWshEnvironment *iface, DISPID dispI return hr; }
-static HRESULT WINAPI WshEnvironment_get_Item(IWshEnvironment *iface, BSTR name, BSTR *value) +HRESULT get_env_var(const WCHAR *name, BSTR *value) { - WshEnvironment *This = impl_from_IWshEnvironment(iface); DWORD len;
- TRACE("(%p)->(%s %p)\n", This, debugstr_w(name), value); - - if (!value) - return E_POINTER; - len = GetEnvironmentVariableW(name, NULL, 0); if (len) { @@ -561,6 +555,18 @@ static HRESULT WINAPI WshEnvironment_get_Item(IWshEnvironment *iface, BSTR name, return *value ? S_OK : E_OUTOFMEMORY; }
+static HRESULT WINAPI WshEnvironment_get_Item(IWshEnvironment *iface, BSTR name, BSTR *value) +{ + WshEnvironment *This = impl_from_IWshEnvironment(iface); + + TRACE("(%p)->(%s %p)\n", This, debugstr_w(name), value); + + if (!value) + return E_POINTER; + + return get_env_var(name, value); +} + static HRESULT WINAPI WshEnvironment_put_Item(IWshEnvironment *iface, BSTR name, BSTR value) { WshEnvironment *This = impl_from_IWshEnvironment(iface); diff --git a/dlls/wshom.ocx/tests/wshom.c b/dlls/wshom.ocx/tests/wshom.c index ed0f4e186a3..58736ff601f 100644 --- a/dlls/wshom.ocx/tests/wshom.c +++ b/dlls/wshom.ocx/tests/wshom.c @@ -745,6 +745,14 @@ static void test_wshnetwork(void) SysFreeString(name); SysFreeString(str);
+ str = NULL; + hr = IWshNetwork2_get_UserDomain(nw2, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + hr = IWshNetwork2_get_UserDomain(nw2, &str); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!!str, "Unexpected pointer.\n"); + SysFreeString(str); + IWshNetwork2_Release(nw2); IDispatch_Release(disp); } diff --git a/dlls/wshom.ocx/wshom_private.h b/dlls/wshom.ocx/wshom_private.h index 8e7792c871c..19e3fff5b2c 100644 --- a/dlls/wshom.ocx/wshom_private.h +++ b/dlls/wshom.ocx/wshom_private.h @@ -46,6 +46,7 @@ struct provideclassinfo { };
extern void init_classinfo(const GUID *guid, IUnknown *outer, struct provideclassinfo *classinfo); +HRESULT get_env_var(const WCHAR *name, BSTR *value);
HRESULT WINAPI WshShellFactory_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**); HRESULT WINAPI WshNetworkFactory_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**);