Commit 119501fe authored by Bernhard Übelacker's avatar Bernhard Übelacker Committed by Alexandre Julliard

dwrite: Call RegEnumValueW with value and val_count parameters.

parent f9105eac
...@@ -1853,8 +1853,8 @@ static ULONG WINAPI systemfontfileenumerator_Release(IDWriteFontFileEnumerator * ...@@ -1853,8 +1853,8 @@ static ULONG WINAPI systemfontfileenumerator_Release(IDWriteFontFileEnumerator *
static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFileEnumerator *iface, IDWriteFontFile **file) static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFileEnumerator *iface, IDWriteFontFile **file)
{ {
struct system_fontfile_enumerator *enumerator = impl_from_IDWriteFontFileEnumerator(iface); struct system_fontfile_enumerator *enumerator = impl_from_IDWriteFontFileEnumerator(iface);
DWORD ret, type, count; DWORD ret, type, val_count, count;
WCHAR *filename; WCHAR *value, *filename;
HRESULT hr; HRESULT hr;
*file = NULL; *file = NULL;
...@@ -1862,14 +1862,22 @@ static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFil ...@@ -1862,14 +1862,22 @@ static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFil
if (enumerator->index < 0) if (enumerator->index < 0)
return E_FAIL; return E_FAIL;
if (RegEnumValueW(enumerator->hkey, enumerator->index, NULL, NULL, NULL, &type, NULL, &count)) ret = RegQueryInfoKeyW(enumerator->hkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &val_count, &count, NULL, NULL);
if (ret != ERROR_SUCCESS)
return E_FAIL; return E_FAIL;
if (!(filename = heap_alloc(count))) val_count++;
value = heap_alloc( val_count * sizeof(value[0]) );
filename = heap_alloc(count);
if (!value || !filename) {
heap_free(value);
heap_free(filename);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
}
ret = RegEnumValueW(enumerator->hkey, enumerator->index, NULL, NULL, NULL, &type, (BYTE*)filename, &count); ret = RegEnumValueW(enumerator->hkey, enumerator->index, value, &val_count, NULL, &type, (BYTE*)filename, &count);
if (ret) { if (ret) {
heap_free(value);
heap_free(filename); heap_free(filename);
return E_FAIL; return E_FAIL;
} }
...@@ -1888,6 +1896,7 @@ static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFil ...@@ -1888,6 +1896,7 @@ static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFil
else else
hr = IDWriteFactory2_CreateFontFileReference(enumerator->factory, filename, NULL, file); hr = IDWriteFactory2_CreateFontFileReference(enumerator->factory, filename, NULL, file);
heap_free(value);
heap_free(filename); heap_free(filename);
return hr; return hr;
} }
...@@ -1895,14 +1904,25 @@ static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFil ...@@ -1895,14 +1904,25 @@ static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFil
static HRESULT WINAPI systemfontfileenumerator_MoveNext(IDWriteFontFileEnumerator *iface, BOOL *current) static HRESULT WINAPI systemfontfileenumerator_MoveNext(IDWriteFontFileEnumerator *iface, BOOL *current)
{ {
struct system_fontfile_enumerator *enumerator = impl_from_IDWriteFontFileEnumerator(iface); struct system_fontfile_enumerator *enumerator = impl_from_IDWriteFontFileEnumerator(iface);
DWORD ret, max_val_count;
WCHAR *value;
*current = FALSE; *current = FALSE;
enumerator->index++; enumerator->index++;
ret = RegQueryInfoKeyW(enumerator->hkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &max_val_count, NULL, NULL, NULL);
if (ret != ERROR_SUCCESS)
return E_FAIL;
max_val_count++;
if (!(value = heap_alloc( max_val_count * sizeof(value[0]) )))
return E_OUTOFMEMORY;
/* iterate until we find next string value */ /* iterate until we find next string value */
while (1) { while (1) {
DWORD type = 0, count; DWORD type = 0, count, val_count;
if (RegEnumValueW(enumerator->hkey, enumerator->index, NULL, NULL, NULL, &type, NULL, &count)) val_count = max_val_count;
if (RegEnumValueW(enumerator->hkey, enumerator->index, value, &val_count, NULL, &type, NULL, &count))
break; break;
if (type == REG_SZ) { if (type == REG_SZ) {
*current = TRUE; *current = TRUE;
...@@ -1912,6 +1932,7 @@ static HRESULT WINAPI systemfontfileenumerator_MoveNext(IDWriteFontFileEnumerato ...@@ -1912,6 +1932,7 @@ static HRESULT WINAPI systemfontfileenumerator_MoveNext(IDWriteFontFileEnumerato
} }
TRACE("index = %d, current = %d\n", enumerator->index, *current); TRACE("index = %d, current = %d\n", enumerator->index, *current);
heap_free(value);
return S_OK; return S_OK;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment