From 75f1d09ba8c3ee99d86e3dc58161127aa4cb9661 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Wed, 4 Feb 2009 18:09:03 +0000 Subject: [PATCH] allow to use a local copy of wine_gecko.cab instead of having to download it every time http://www.winehq.org/pipermail/wine-patches/2009-February/068889.html http://www.winehq.org/pipermail/wine-patches/2009-February/068891.html http://www.winehq.org/pipermail/wine-patches/2009-February/068890.html http://www.winehq.org/pipermail/wine-patches/2009-February/068892.html svn path=/trunk/; revision=39393 --- reactos/boot/bootdata/hivedef_i386.inf | 1 + reactos/boot/bootdata/packages/reactos.dff | 3 ++ reactos/dll/win32/mshtml/install.c | 43 ++++++++++++---------- reactos/dll/win32/mshtml/mshtml.rbuild | 1 + 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/reactos/boot/bootdata/hivedef_i386.inf b/reactos/boot/bootdata/hivedef_i386.inf index d412445ae98..92b284468a4 100644 --- a/reactos/boot/bootdata/hivedef_i386.inf +++ b/reactos/boot/bootdata/hivedef_i386.inf @@ -279,6 +279,7 @@ HKCU,"Software\Microsoft\Internet Explorer\Main","Start Page",,"http://www.react HKCU,"Software\Microsoft\Internet Explorer\Main","Search Page",,"http://www.google.com" HKCU,Software\Wine\MSHTML,"GeckoUrl",,"http://links.reactos.org/links/winegecko.php" +HKCU,Software\Wine\MSHTML,"GeckoCabDir",0x00020000,"%SystemRoot%\" ; EOF diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index 5e6518d29fc..e53594a5306 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -705,3 +705,6 @@ modules\windows\vmx_svga.inf 6 o modules\windows\kvmnet.sys 2 optional modules\windows\kvmnet.inf 6 optional +; Gecko +modules\windows\wine_gecko-0.9.0.cab 4 optional + diff --git a/reactos/dll/win32/mshtml/install.c b/reactos/dll/win32/mshtml/install.c index fbdcd235366..9f1330ddcb1 100644 --- a/reactos/dll/win32/mshtml/install.c +++ b/reactos/dll/win32/mshtml/install.c @@ -54,6 +54,11 @@ static const WCHAR mshtml_keyW[] = '\\','W','i','n','e', '\\','M','S','H','T','M','L',0}; +static const CHAR mshtml_keyA[] = + {'S','o','f','t','w','a','r','e', + '\\','W','i','n','e', + '\\','M','S','H','T','M','L',0}; + static HWND install_dialog = NULL; static LPWSTR tmp_file_name = NULL; static HANDLE tmp_file = INVALID_HANDLE_VALUE; @@ -193,18 +198,21 @@ static BOOL install_from_unix_file(const char *file_name) close(fd); - if(!wine_get_dos_file_name) { + if(!wine_get_dos_file_name) wine_get_dos_file_name = (void*)GetProcAddress(GetModuleHandleW(kernel32W), "wine_get_dos_file_name"); - if(!wine_get_dos_file_name) { - ERR("Could not get wine_get_dos_file_name function.\n"); + + if(wine_get_dos_file_name) { /* Wine UNIX mode */ + dos_file_name = wine_get_dos_file_name(file_name); + if(!dos_file_name) { + ERR("Could not get dos file name of %s\n", debugstr_a(file_name)); return FALSE; } - } - - dos_file_name = wine_get_dos_file_name(file_name); - if(!dos_file_name) { - ERR("Could not get dos file name of %s\n", debugstr_a(file_name)); - return FALSE; + } else { /* ReactOS mode. */ + UINT res; + WARN("Could not get wine_get_dos_file_name function, calling install_cab directly.\n"); + res = MultiByteToWideChar( CP_ACP, 0, file_name, -1, 0, 0); + dos_file_name = heap_alloc (res*sizeof(WCHAR)); + MultiByteToWideChar( CP_ACP, 0, file_name, -1, dos_file_name, res); } ret = install_cab(dos_file_name); @@ -216,23 +224,18 @@ static BOOL install_from_unix_file(const char *file_name) static BOOL install_from_registered_dir(void) { char *file_name; - HKEY hkey; DWORD res, type, size = MAX_PATH; BOOL ret; - /* @@ Wine registry key: HKCU\Software\Wine\MSHTML */ - res = RegOpenKeyW(HKEY_CURRENT_USER, mshtml_keyW, &hkey); - if(res != ERROR_SUCCESS) - return FALSE; - file_name = heap_alloc(size+sizeof(GECKO_FILE_NAME)); - res = RegQueryValueExA(hkey, "GeckoCabDir", NULL, &type, (PBYTE)file_name, &size); + /* @@ Wine registry key: HKCU\Software\Wine\MSHTML */ + res = RegGetValueA(HKEY_CURRENT_USER, mshtml_keyA, "GeckoCabDir", RRF_RT_ANY, &type, (PBYTE)file_name, &size); if(res == ERROR_MORE_DATA) { file_name = heap_realloc(file_name, size+sizeof(GECKO_FILE_NAME)); - res = RegQueryValueExA(hkey, "GeckoCabDir", NULL, &type, (PBYTE)file_name, &size); + res = RegGetValueA(HKEY_CURRENT_USER, mshtml_keyA, "GeckoCabDir", RRF_RT_ANY, &type, (PBYTE)file_name, &size); } - RegCloseKey(hkey); - if(res != ERROR_SUCCESS || type != REG_SZ) { + + if(res != ERROR_SUCCESS || (type != REG_SZ && type != REG_EXPAND_SZ)) { heap_free(file_name); return FALSE; } @@ -443,7 +446,7 @@ static LPWSTR get_url(void) if(size > sizeof(httpW) && !memcmp(url, httpW, sizeof(httpW))) { strcatW(url, v_formatW); - MultiByteToWideChar(CP_ACP, 0, GECKO_VERSION, -1, url+strlenW(url), -1); + MultiByteToWideChar(CP_ACP, 0, GECKO_VERSION, -1, url+strlenW(url), (size-strlenW(url)) / sizeof(WCHAR)); } TRACE("Got URL %s\n", debugstr_w(url)); diff --git a/reactos/dll/win32/mshtml/mshtml.rbuild b/reactos/dll/win32/mshtml/mshtml.rbuild index dd950e8950c..e2fb0b9d930 100644 --- a/reactos/dll/win32/mshtml/mshtml.rbuild +++ b/reactos/dll/win32/mshtml/mshtml.rbuild @@ -7,6 +7,7 @@ . include/reactos/wine + 0x600 conpoint.c dispex.c editor.c