[PATCH v2 07/10] gdi32: Directly use ntdll in remove_face_from_cache.

Huw Davies huw at codeweavers.com
Thu Sep 23 07:44:08 CDT 2021


From: Jacek Caban <jacek at codeweavers.com>

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/gdi32/font.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index a02e5b4207a..3419b18a242 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -523,6 +523,13 @@ static BOOL reg_enum_value( HKEY hkey, unsigned int index, KEY_VALUE_FULL_INFORM
     return TRUE;
 }
 
+static void reg_delete_value( HKEY hkey, const WCHAR *name )
+{
+    unsigned int name_size = lstrlenW( name ) * sizeof(WCHAR);
+    UNICODE_STRING nameW = { name_size, name_size, (WCHAR *)name };
+    NtDeleteValueKey( hkey, &nameW );
+}
+
 static BOOL reg_delete_tree( HKEY parent, const WCHAR *name, ULONG name_len )
 {
     char buffer[4096];
@@ -1273,20 +1280,25 @@ static void add_face_to_cache( struct gdi_font_face *face )
 
 static void remove_face_from_cache( struct gdi_font_face *face )
 {
-    HKEY hkey_family;
+    HKEY hkey_family, hkey;
 
-    if (RegOpenKeyExW( wine_fonts_cache_key, face->family->family_name, 0, KEY_ALL_ACCESS, &hkey_family ))
+    if (!(hkey_family = reg_open_key( wine_fonts_cache_key, face->family->family_name,
+                                      lstrlenW( face->family->family_name ) * sizeof(WCHAR) )))
         return;
 
     if (!face->scalable)
     {
         WCHAR name[10];
         swprintf( name, ARRAY_SIZE(name), L"%d", face->size.y_ppem );
-        RegDeleteKeyW( hkey_family, name );
+        if ((hkey = reg_open_key( hkey_family, name, lstrlenW( name ) * sizeof(WCHAR) )))
+        {
+            NtDeleteKey( hkey );
+            NtClose( hkey );
+        }
     }
-    else RegDeleteValueW( hkey_family, face->style_name );
+    else reg_delete_value( hkey_family, face->style_name );
 
-    RegCloseKey( hkey_family );
+    NtClose( hkey_family );
 }
 
 /* font links */
-- 
2.23.0




More information about the wine-devel mailing list