[PATCH 4/4] sapi: Implement ISpObjectToken::GetId.

Myah Caron qsniyg at protonmail.com
Tue Sep 15 23:36:33 CDT 2020


Signed-off-by: Myah Caron <qsniyg at protonmail.com>
---
This function is not strictly necessary for the bug, but it was simple
enough to implement.

 dlls/sapi/tests/token.c | 14 +++++++-------
 dlls/sapi/token.c       | 18 ++++++++++++++++--
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/dlls/sapi/tests/token.c b/dlls/sapi/tests/token.c
index db41de3d53a..3bbecf67e44 100644
--- a/dlls/sapi/tests/token.c
+++ b/dlls/sapi/tests/token.c
@@ -186,11 +186,11 @@ static void test_object_token(void)
     ok( hr == S_OK, "got %08x\n", hr );

     hr = ISpObjectToken_GetId( token, NULL );
-    todo_wine ok( hr == SPERR_UNINITIALIZED, "got %08x\n", hr );
+    ok( hr == SPERR_UNINITIALIZED, "got %08x\n", hr );

     tempW = (LPWSTR)0xdeadbeef;
     hr = ISpObjectToken_GetId( token, &tempW );
-    todo_wine ok( hr == SPERR_UNINITIALIZED, "got %08x\n", hr );
+    ok( hr == SPERR_UNINITIALIZED, "got %08x\n", hr );
     ok( tempW == (LPWSTR)0xdeadbeef, "got %s\n", wine_dbgstr_w(tempW) );

     hr = ISpObjectToken_GetCategory( token, NULL );
@@ -221,15 +221,15 @@ static void test_object_token(void)
     ok( hr == SPERR_ALREADY_INITIALIZED, "got %08x\n", hr );

     hr = ISpObjectToken_GetId( token, NULL );
-    todo_wine ok( hr == E_POINTER, "got %08x\n", hr );
+    ok( hr == E_POINTER, "got %08x\n", hr );

     hr = ISpObjectToken_GetCategory( token, NULL );
     todo_wine ok( hr == E_POINTER, "got %08x\n", hr );

     tempW = NULL;
     hr = ISpObjectToken_GetId( token, &tempW );
-    todo_wine ok( hr == S_OK, "got %08x\n", hr );
-    todo_wine ok( tempW != NULL, "got %p\n", tempW );
+    ok( hr == S_OK, "got %08x\n", hr );
+    ok( tempW != NULL, "got %p\n", tempW );
     if (tempW) {
         ok( !wcscmp(tempW, L"HKEY_LOCAL_MACHINE\\SOFTWARE"), "got %s\n",
             wine_dbgstr_w(tempW) );
@@ -269,8 +269,8 @@ static void test_object_token(void)

     tempW = NULL;
     hr = ISpObjectToken_GetId( token, &tempW );
-    todo_wine ok( hr == S_OK, "got %08x\n", hr );
-    todo_wine ok( tempW != NULL, "got %p\n", tempW );
+    ok( hr == S_OK, "got %08x\n", hr );
+    ok( tempW != NULL, "got %p\n", tempW );
     if (tempW) {
         ok( !wcscmp(tempW, token_id), "got %s\n", wine_dbgstr_w(tempW) );
         CoTaskMemFree( tempW );
diff --git a/dlls/sapi/token.c b/dlls/sapi/token.c
index b4a318b4ade..955ee738f71 100644
--- a/dlls/sapi/token.c
+++ b/dlls/sapi/token.c
@@ -783,6 +783,7 @@ struct object_token
     LONG ref;

     HKEY token_key;
+    LPWSTR token_id;
 };

 static struct object_token *impl_from_ISpObjectToken( ISpObjectToken *iface )
@@ -830,6 +831,7 @@ static ULONG WINAPI token_Release( ISpObjectToken *iface )
     if (!ref)
     {
         if (This->token_key) RegCloseKey( This->token_key );
+        if (This->token_id) heap_free( This->token_id );
         heap_free( This );
     }

@@ -946,6 +948,7 @@ static HRESULT WINAPI token_SetId( ISpObjectToken *iface,
     if (res) return SPERR_NOT_FOUND;

     This->token_key = key;
+    This->token_id = heap_strdupW( token_id );

     return S_OK;
 }
@@ -953,8 +956,18 @@ static HRESULT WINAPI token_SetId( ISpObjectToken *iface,
 static HRESULT WINAPI token_GetId( ISpObjectToken *iface,
                                    LPWSTR *token_id )
 {
-    FIXME( "stub\n" );
-    return E_NOTIMPL;
+    struct object_token *This = impl_from_ISpObjectToken( iface );
+
+    TRACE( "(%p)->(%p)\n", This, token_id );
+
+    if (!This->token_id) return SPERR_UNINITIALIZED;
+
+    if (!token_id) return E_POINTER;
+
+    *token_id = CoTaskMemAlloc( lstrlenW( This->token_id ) * sizeof( WCHAR ) );
+    wcscpy( *token_id, This->token_id );
+
+    return S_OK;
 }

 static HRESULT WINAPI token_GetCategory( ISpObjectToken *iface,
@@ -1071,6 +1084,7 @@ HRESULT token_create( IUnknown *outer, REFIID iid, void **obj )
     This->ref = 1;

     This->token_key = NULL;
+    This->token_id = NULL;

     hr = ISpObjectToken_QueryInterface( &This->ISpObjectToken_iface, iid, obj );

--
2.28.0





More information about the wine-devel mailing list