Huw Davies : gdi32: Update both winnt and win9x font keys and factor out the cleanup code.
Alexandre Julliard
julliard at winehq.org
Mon Mar 10 07:16:49 CDT 2008
Module: wine
Branch: master
Commit: 025d84e644cffbb1b38e67cd11cbb2cedae88e88
URL: http://source.winehq.org/git/wine.git/?a=commit;h=025d84e644cffbb1b38e67cd11cbb2cedae88e88
Author: Huw Davies <huw at codeweavers.com>
Date: Fri Mar 7 17:02:32 2008 +0000
gdi32: Update both winnt and win9x font keys and factor out the cleanup code.
---
dlls/gdi32/freetype.c | 115 ++++++++++++++++++++++++++++++------------------
1 files changed, 72 insertions(+), 43 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index d011cd8..ab7760d 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -1760,10 +1760,9 @@ static void load_system_fonts(void)
*/
static void update_reg_entries(void)
{
- HKEY winkey = 0, externalkey = 0;
+ HKEY winnt_key = 0, win9x_key = 0, external_key = 0;
LPWSTR valueW;
- LPVOID data;
- DWORD dlen, vlen, datalen, valuelen, i, type, len, len_fam;
+ DWORD len, len_fam;
Family *family;
Face *face;
struct list *family_elem_ptr, *face_elem_ptr;
@@ -1772,47 +1771,20 @@ static void update_reg_entries(void)
static const WCHAR spaceW[] = {' ', '\0'};
char *path;
- if(RegCreateKeyExW(HKEY_LOCAL_MACHINE, is_win9x() ? win9x_font_reg_key : winnt_font_reg_key,
- 0, NULL, 0, KEY_ALL_ACCESS, NULL, &winkey, NULL) != ERROR_SUCCESS) {
+ if(RegCreateKeyExW(HKEY_LOCAL_MACHINE, winnt_font_reg_key,
+ 0, NULL, 0, KEY_ALL_ACCESS, NULL, &winnt_key, NULL) != ERROR_SUCCESS) {
ERR("Can't create Windows font reg key\n");
goto end;
}
- /* @@ Wine registry key: HKCU\Software\Wine\Fonts\ExternalFonts */
- if(RegCreateKeyW(HKEY_CURRENT_USER, external_fonts_reg_key, &externalkey) != ERROR_SUCCESS) {
- ERR("Can't create external font reg key\n");
- goto end;
- }
- /* Delete all external fonts added last time */
-
- RegQueryInfoKeyW(externalkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- &valuelen, &datalen, NULL, NULL);
- valuelen++; /* returned value doesn't include room for '\0' */
- valueW = HeapAlloc(GetProcessHeap(), 0, valuelen * sizeof(WCHAR));
- data = HeapAlloc(GetProcessHeap(), 0, datalen * sizeof(WCHAR));
-
- dlen = datalen * sizeof(WCHAR);
- vlen = valuelen;
- i = 0;
- while(RegEnumValueW(externalkey, i++, valueW, &vlen, NULL, &type, data,
- &dlen) == ERROR_SUCCESS) {
-
- RegDeleteValueW(winkey, valueW);
- /* reset dlen and vlen */
- dlen = datalen;
- vlen = valuelen;
+ if(RegCreateKeyExW(HKEY_LOCAL_MACHINE, win9x_font_reg_key,
+ 0, NULL, 0, KEY_ALL_ACCESS, NULL, &win9x_key, NULL) != ERROR_SUCCESS) {
+ ERR("Can't create Windows font reg key\n");
+ goto end;
}
- HeapFree(GetProcessHeap(), 0, data);
- HeapFree(GetProcessHeap(), 0, valueW);
-
- /* Delete the old external fonts key */
- RegCloseKey(externalkey);
- externalkey = 0;
- RegDeleteKeyW(HKEY_CURRENT_USER, external_fonts_reg_key);
- /* @@ Wine registry key: HKCU\Software\Wine\Fonts\ExternalFonts */
if(RegCreateKeyExW(HKEY_CURRENT_USER, external_fonts_reg_key,
- 0, NULL, 0, KEY_ALL_ACCESS, NULL, &externalkey, NULL) != ERROR_SUCCESS) {
+ 0, NULL, 0, KEY_ALL_ACCESS, NULL, &external_key, NULL) != ERROR_SUCCESS) {
ERR("Can't create external font reg key\n");
goto end;
}
@@ -1843,21 +1815,76 @@ static void update_reg_entries(void)
file = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
MultiByteToWideChar(CP_ACP, 0, path, -1, file, len);
- RegSetValueExW(winkey, valueW, 0, REG_SZ, (BYTE*)file, len * sizeof(WCHAR));
- RegSetValueExW(externalkey, valueW, 0, REG_SZ, (BYTE*)file, len * sizeof(WCHAR));
+ RegSetValueExW(winnt_key, valueW, 0, REG_SZ, (BYTE*)file, len * sizeof(WCHAR));
+ RegSetValueExW(win9x_key, valueW, 0, REG_SZ, (BYTE*)file, len * sizeof(WCHAR));
+ RegSetValueExW(external_key, valueW, 0, REG_SZ, (BYTE*)file, len * sizeof(WCHAR));
HeapFree(GetProcessHeap(), 0, file);
HeapFree(GetProcessHeap(), 0, valueW);
}
}
end:
- if(externalkey)
- RegCloseKey(externalkey);
- if(winkey)
- RegCloseKey(winkey);
+ if(external_key) RegCloseKey(external_key);
+ if(win9x_key) RegCloseKey(win9x_key);
+ if(winnt_key) RegCloseKey(winnt_key);
return;
}
+static void delete_external_font_keys(void)
+{
+ HKEY winnt_key = 0, win9x_key = 0, external_key = 0;
+ DWORD dlen, vlen, datalen, valuelen, i, type;
+ LPWSTR valueW;
+ LPVOID data;
+
+ if(RegCreateKeyExW(HKEY_LOCAL_MACHINE, winnt_font_reg_key,
+ 0, NULL, 0, KEY_ALL_ACCESS, NULL, &winnt_key, NULL) != ERROR_SUCCESS) {
+ ERR("Can't create Windows font reg key\n");
+ goto end;
+ }
+
+ if(RegCreateKeyExW(HKEY_LOCAL_MACHINE, win9x_font_reg_key,
+ 0, NULL, 0, KEY_ALL_ACCESS, NULL, &win9x_key, NULL) != ERROR_SUCCESS) {
+ ERR("Can't create Windows font reg key\n");
+ goto end;
+ }
+
+ if(RegCreateKeyW(HKEY_CURRENT_USER, external_fonts_reg_key, &external_key) != ERROR_SUCCESS) {
+ ERR("Can't create external font reg key\n");
+ goto end;
+ }
+
+ /* Delete all external fonts added last time */
+
+ RegQueryInfoKeyW(external_key, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ &valuelen, &datalen, NULL, NULL);
+ valuelen++; /* returned value doesn't include room for '\0' */
+ valueW = HeapAlloc(GetProcessHeap(), 0, valuelen * sizeof(WCHAR));
+ data = HeapAlloc(GetProcessHeap(), 0, datalen * sizeof(WCHAR));
+
+ dlen = datalen * sizeof(WCHAR);
+ vlen = valuelen;
+ i = 0;
+ while(RegEnumValueW(external_key, i++, valueW, &vlen, NULL, &type, data,
+ &dlen) == ERROR_SUCCESS) {
+
+ RegDeleteValueW(winnt_key, valueW);
+ RegDeleteValueW(win9x_key, valueW);
+ /* reset dlen and vlen */
+ dlen = datalen;
+ vlen = valuelen;
+ }
+ HeapFree(GetProcessHeap(), 0, data);
+ HeapFree(GetProcessHeap(), 0, valueW);
+
+ /* Delete the old external fonts key */
+ RegCloseKey(external_key);
+ RegDeleteKeyW(HKEY_CURRENT_USER, external_fonts_reg_key);
+
+ end:
+ if(win9x_key) RegCloseKey(win9x_key);
+ if(winnt_key) RegCloseKey(winnt_key);
+}
/*************************************************************
* WineEngAddFontResourceEx
@@ -2229,6 +2256,8 @@ BOOL WineEngInit(void)
}
WaitForSingleObject(font_mutex, INFINITE);
+ delete_external_font_keys();
+
/* load the system bitmap fonts */
load_system_fonts();
More information about the wine-cvs
mailing list