gdi32: Directly use ntdll in load_face_from_cache.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
3eeb37f86a
commit
9f94f2e247
|
@ -1136,19 +1136,21 @@ struct cached_face
|
||||||
static void load_face_from_cache( HKEY hkey_family, struct gdi_font_family *family,
|
static void load_face_from_cache( HKEY hkey_family, struct gdi_font_family *family,
|
||||||
void *buffer, DWORD buffer_size, BOOL scalable )
|
void *buffer, DWORD buffer_size, BOOL scalable )
|
||||||
{
|
{
|
||||||
DWORD type, size, needed, index = 0;
|
KEY_VALUE_FULL_INFORMATION *info = (KEY_VALUE_FULL_INFORMATION *)buffer;
|
||||||
|
KEY_NODE_INFORMATION *node_info = (KEY_NODE_INFORMATION *)buffer;
|
||||||
|
DWORD index = 0, total_size;
|
||||||
struct gdi_font_face *face;
|
struct gdi_font_face *face;
|
||||||
HKEY hkey_strike;
|
HKEY hkey_strike;
|
||||||
WCHAR name[256];
|
WCHAR name[256];
|
||||||
struct cached_face *cached = (struct cached_face *)buffer;
|
struct cached_face *cached;
|
||||||
|
|
||||||
size = sizeof(name);
|
while (reg_enum_value( hkey_family, index++, info,
|
||||||
needed = buffer_size - sizeof(DWORD);
|
buffer_size - sizeof(DWORD), name, sizeof(name) ))
|
||||||
while (!RegEnumValueW( hkey_family, index++, name, &size, NULL, &type, buffer, &needed ))
|
|
||||||
{
|
{
|
||||||
if (type == REG_BINARY && needed > sizeof(*cached))
|
cached = (struct cached_face *)((char *)info + info->DataOffset);
|
||||||
|
if (info->Type == REG_BINARY && info->DataLength > sizeof(*cached))
|
||||||
{
|
{
|
||||||
((DWORD *)buffer)[needed / sizeof(DWORD)] = 0;
|
((DWORD *)cached)[info->DataLength / sizeof(DWORD)] = 0;
|
||||||
if ((face = create_face( family, name, cached->full_name,
|
if ((face = create_face( family, name, cached->full_name,
|
||||||
cached->full_name + lstrlenW(cached->full_name) + 1,
|
cached->full_name + lstrlenW(cached->full_name) + 1,
|
||||||
NULL, 0, cached->index, cached->fs, cached->ntmflags, cached->version,
|
NULL, 0, cached->index, cached->fs, cached->ntmflags, cached->version,
|
||||||
|
@ -1167,22 +1169,19 @@ static void load_face_from_cache( HKEY hkey_family, struct gdi_font_family *fami
|
||||||
release_face( face );
|
release_face( face );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
size = sizeof(name);
|
|
||||||
needed = buffer_size - sizeof(DWORD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* load bitmap strikes */
|
/* load bitmap strikes */
|
||||||
|
|
||||||
index = 0;
|
index = 0;
|
||||||
needed = buffer_size;
|
while (!NtEnumerateKey( hkey_family, index++, KeyNodeInformation, node_info,
|
||||||
while (!RegEnumKeyExW( hkey_family, index++, buffer, &needed, NULL, NULL, NULL, NULL ))
|
buffer_size, &total_size ))
|
||||||
{
|
{
|
||||||
if (!RegOpenKeyExW( hkey_family, buffer, 0, KEY_ALL_ACCESS, &hkey_strike ))
|
if ((hkey_strike = reg_open_key( hkey_family, node_info->Name, node_info->NameLength )))
|
||||||
{
|
{
|
||||||
load_face_from_cache( hkey_strike, family, buffer, buffer_size, FALSE );
|
load_face_from_cache( hkey_strike, family, buffer, buffer_size, FALSE );
|
||||||
RegCloseKey( hkey_strike );
|
NtClose( hkey_strike );
|
||||||
}
|
}
|
||||||
needed = buffer_size;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue