static enum install_res install_from_default_dir(void) { const char *data_dir, *package_dir; char *dir_buf = NULL; int len; enum install_res ret; if((data_dir = wine_get_data_dir())) { package_dir = data_dir; }else if((data_dir = wine_get_build_dir())) { len = strlen(data_dir); dir_buf = heap_alloc(len + sizeof("/../")); memcpy(dir_buf, data_dir, len); strcpy(dir_buf+len, "/../"); package_dir = dir_buf; }else { return INSTALL_NEXT; } ret = install_from_unix_file(package_dir, addon->subdir_name, addon->file_name); heap_free(dir_buf); if (ret == INSTALL_NEXT) ret = install_from_unix_file(INSTALL_DATADIR "/wine/", addon->subdir_name, addon->file_name); if (ret == INSTALL_NEXT && strcmp(INSTALL_DATADIR, "/usr/share")) ret = install_from_unix_file("/usr/share/wine/", addon->subdir_name, addon->file_name); return ret; }
static BOOL install_from_default_dir(void) { const char *data_dir, *subdir; char *file_name; int len, len2; BOOL ret; if((data_dir = wine_get_data_dir())) subdir = "/gecko/"; else if((data_dir = wine_get_build_dir())) subdir = "/../gecko/"; else return FALSE; len = strlen(data_dir); len2 = strlen(subdir); file_name = heap_alloc(len+len2+sizeof(GECKO_FILE_NAME)); memcpy(file_name, data_dir, len); memcpy(file_name+len, subdir, len2); memcpy(file_name+len+len2, GECKO_FILE_NAME, sizeof(GECKO_FILE_NAME)); ret = install_from_unix_file(file_name); heap_free(file_name); if (!ret) ret = install_from_unix_file(INSTALL_DATADIR "/wine/gecko/" GECKO_FILE_NAME); if (!ret && strcmp(INSTALL_DATADIR, "/usr/share")) ret = install_from_unix_file("/usr/share/wine/gecko/" GECKO_FILE_NAME); return ret; }
static enum install_res install_from_registered_dir(void) { char *package_dir; HKEY hkey; DWORD res, type, size = MAX_PATH; enum install_res ret; hkey = open_config_key(); if(!hkey) return INSTALL_NEXT; package_dir = heap_alloc(size); res = RegGetValueA(hkey, NULL, addon->dir_config_key, RRF_RT_ANY, &type, (PBYTE)package_dir, &size); if(res == ERROR_MORE_DATA) { package_dir = heap_realloc(package_dir, size); res = RegGetValueA(hkey, NULL, addon->dir_config_key, RRF_RT_ANY, &type, (PBYTE)package_dir, &size); } RegCloseKey(hkey); if(res == ERROR_FILE_NOT_FOUND) { heap_free(package_dir); return INSTALL_NEXT; } else if(res != ERROR_SUCCESS || (type != REG_SZ && type != REG_EXPAND_SZ)) { heap_free(package_dir); return INSTALL_FAILED; } TRACE("Trying %s/%s\n", debugstr_a(package_dir), debugstr_a(addon->file_name)); ret = install_from_unix_file(package_dir, "", addon->file_name); heap_free(package_dir); return ret; }
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 = RegGetValueA(hkey, NULL, "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 = RegGetValueA(hkey, NULL, "GeckoCabDir", RRF_RT_ANY, &type, (PBYTE)file_name, &size); } RegCloseKey(hkey); if(res != ERROR_SUCCESS || (type != REG_SZ && type != REG_EXPAND_SZ)) { heap_free(file_name); return FALSE; } strcat(file_name, GECKO_FILE_NAME); TRACE("Trying %s\n", debugstr_a(file_name)); ret = install_from_unix_file(file_name); heap_free(file_name); return ret; }
static enum install_res install_from_registered_dir(void) { char *package_dir; DWORD res, type, size = MAX_PATH; enum install_res ret; package_dir = heap_alloc(size + sizeof(addon->file_name)); res = RegGetValueA(HKEY_CURRENT_USER, mshtml_keyA, "GeckoCabDir", RRF_RT_ANY, &type, (PBYTE)package_dir, &size); if(res == ERROR_MORE_DATA) { package_dir = heap_realloc(package_dir, size + sizeof(addon->file_name)); res = RegGetValueA(HKEY_CURRENT_USER, mshtml_keyA, "GeckoCabDir", RRF_RT_ANY, &type, (PBYTE)package_dir, &size); } if(res != ERROR_SUCCESS || (type != REG_SZ && type != REG_EXPAND_SZ)) { heap_free(package_dir); return INSTALL_FAILED; } TRACE("Trying %s/%s\n", debugstr_a(package_dir), debugstr_a(addon->file_name)); ret = install_from_unix_file(package_dir, "", addon->file_name); heap_free(package_dir); return ret; }