sapi: Implement SpObjectTokenEnum::SetAttribs().

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
oldstable
Huw Davies 2017-09-28 08:40:49 +01:00 committed by Alexandre Julliard
parent 07e5593067
commit 77b7bd19c5
2 changed files with 51 additions and 2 deletions

View File

@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "wine/unicode.h"
HRESULT data_key_create( IUnknown *outer, REFIID iid, void **obj ) DECLSPEC_HIDDEN;
HRESULT token_enum_create( IUnknown *outer, REFIID iid, void **obj ) DECLSPEC_HIDDEN;
@ -30,3 +32,18 @@ static inline BOOL heap_free(void *mem)
{
return HeapFree(GetProcessHeap(), 0, mem);
}
static inline LPWSTR heap_strdupW(LPCWSTR str)
{
LPWSTR ret = NULL;
DWORD size;
if (str)
{
size = (strlenW( str ) + 1) * sizeof(WCHAR);
ret = heap_alloc( size );
if (ret) memcpy( ret, str, size );
}
return ret;
}

View File

@ -231,6 +231,9 @@ struct token_enum
{
ISpObjectTokenEnumBuilder ISpObjectTokenEnumBuilder_iface;
LONG ref;
BOOL init;
WCHAR *req, *opt;
};
struct token_enum *impl_from_ISpObjectTokenEnumBuilder( ISpObjectTokenEnumBuilder *iface )
@ -276,7 +279,11 @@ static ULONG WINAPI token_enum_Release( ISpObjectTokenEnumBuilder *iface )
TRACE( "(%p) ref = %u\n", This, ref );
if (!ref)
{
heap_free( This->req );
heap_free( This->opt );
heap_free( This );
}
return ref;
}
@ -326,8 +333,30 @@ static HRESULT WINAPI token_enum_GetCount( ISpObjectTokenEnumBuilder *iface,
static HRESULT WINAPI token_enum_SetAttribs( ISpObjectTokenEnumBuilder *iface,
LPCWSTR req, LPCWSTR opt)
{
FIXME( "stub\n" );
return E_NOTIMPL;
struct token_enum *This = impl_from_ISpObjectTokenEnumBuilder( iface );
TRACE( "(%p)->(%s %s)\n", This, debugstr_w( req ), debugstr_w( opt ) );
if (This->init) return SPERR_ALREADY_INITIALIZED;
if (req)
{
This->req = heap_strdupW( req );
if (!This->req) goto out_of_mem;
}
if (opt)
{
This->opt = heap_strdupW( opt );
if (!This->opt) goto out_of_mem;
}
This->init = TRUE;
return S_OK;
out_of_mem:
heap_free( This->req );
return E_OUTOFMEMORY;
}
static HRESULT WINAPI token_enum_AddTokens( ISpObjectTokenEnumBuilder *iface,
@ -385,6 +414,9 @@ HRESULT token_enum_create( IUnknown *outer, REFIID iid, void **obj )
if (!This) return E_OUTOFMEMORY;
This->ISpObjectTokenEnumBuilder_iface.lpVtbl = &token_enum_vtbl;
This->ref = 1;
This->req = NULL;
This->opt = NULL;
This->init = FALSE;
hr = ISpObjectTokenEnumBuilder_QueryInterface( &This->ISpObjectTokenEnumBuilder_iface, iid, obj );