mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-02 22:55:43 +00:00
windows.networking.hostname: Duplicate passed HSTRING in IHostNameFactory::CreateHostName().
This commit is contained in:
parent
95bfbdc87f
commit
ce3ccccb2c
|
@ -120,7 +120,7 @@ struct hostname
|
||||||
IHostName IHostName_iface;
|
IHostName IHostName_iface;
|
||||||
LONG ref;
|
LONG ref;
|
||||||
|
|
||||||
HSTRING rawname;
|
HSTRING raw_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct hostname *impl_from_IHostName( IHostName *iface )
|
static inline struct hostname *impl_from_IHostName( IHostName *iface )
|
||||||
|
@ -161,7 +161,15 @@ static ULONG WINAPI hostname_Release( IHostName *iface )
|
||||||
{
|
{
|
||||||
struct hostname *impl = impl_from_IHostName( iface );
|
struct hostname *impl = impl_from_IHostName( iface );
|
||||||
ULONG ref = InterlockedDecrement( &impl->ref );
|
ULONG ref = InterlockedDecrement( &impl->ref );
|
||||||
|
|
||||||
TRACE( "iface %p decreasing refcount to %lu.\n", iface, ref );
|
TRACE( "iface %p decreasing refcount to %lu.\n", iface, ref );
|
||||||
|
|
||||||
|
if (!ref)
|
||||||
|
{
|
||||||
|
WindowsDeleteString( impl->raw_name );
|
||||||
|
free( impl );
|
||||||
|
}
|
||||||
|
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,7 +204,7 @@ static HRESULT WINAPI hostname_get_RawName( IHostName *iface, HSTRING *value )
|
||||||
TRACE( "iface %p, value %p.\n", iface, value );
|
TRACE( "iface %p, value %p.\n", iface, value );
|
||||||
|
|
||||||
if (!value) return E_INVALIDARG;
|
if (!value) return E_INVALIDARG;
|
||||||
return WindowsDuplicateString( impl->rawname, value );
|
return WindowsDuplicateString( impl->raw_name, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI hostname_get_DisplayName( IHostName *iface, HSTRING *value )
|
static HRESULT WINAPI hostname_get_DisplayName( IHostName *iface, HSTRING *value )
|
||||||
|
@ -255,7 +263,7 @@ static HRESULT WINAPI hostname_factory_CreateHostName( IHostNameFactory *iface,
|
||||||
|
|
||||||
impl->IHostName_iface.lpVtbl = &hostname_vtbl;
|
impl->IHostName_iface.lpVtbl = &hostname_vtbl;
|
||||||
impl->ref = 1;
|
impl->ref = 1;
|
||||||
impl->rawname = name;
|
WindowsDuplicateString( name, &impl->raw_name );
|
||||||
|
|
||||||
*value = &impl->IHostName_iface;
|
*value = &impl->IHostName_iface;
|
||||||
TRACE( "created IHostName %p.\n", *value );
|
TRACE( "created IHostName %p.\n", *value );
|
||||||
|
|
|
@ -101,7 +101,7 @@ static void test_HostnameStatics(void)
|
||||||
hr = WindowsCompareStringOrdinal( str, rawname, &res );
|
hr = WindowsCompareStringOrdinal( str, rawname, &res );
|
||||||
ok( hr == S_OK, "got hr %#lx.\n", hr );
|
ok( hr == S_OK, "got hr %#lx.\n", hr );
|
||||||
ok( !res, "got unexpected string %s.\n", debugstr_hstring(rawname) );
|
ok( !res, "got unexpected string %s.\n", debugstr_hstring(rawname) );
|
||||||
todo_wine ok( str != rawname, "got same HSTRINGs %p, %p.\n", str, rawname );
|
ok( str != rawname, "got same HSTRINGs %p, %p.\n", str, rawname );
|
||||||
|
|
||||||
WindowsDeleteString( str );
|
WindowsDeleteString( str );
|
||||||
WindowsDeleteString( rawname );
|
WindowsDeleteString( rawname );
|
||||||
|
|
Loading…
Reference in a new issue