Jacek Caban : gdi32: Directly use ntdll in remove_face_from_cache.

Alexandre Julliard julliard at winehq.org
Thu Sep 23 15:35:05 CDT 2021


Module: wine
Branch: master
Commit: 4ad71bb1b991d66742ed1df26c796be8e64497bb
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4ad71bb1b991d66742ed1df26c796be8e64497bb

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Sep 23 13:44:08 2021 +0100

gdi32: Directly use ntdll in remove_face_from_cache.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 */




More information about the wine-cvs mailing list