From: Esme Povirk esme@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57338 --- dlls/appwiz.cpl/addons.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c index 7b2c43472ff..fdf2b1c917e 100644 --- a/dlls/appwiz.cpl/addons.c +++ b/dlls/appwiz.cpl/addons.c @@ -317,15 +317,29 @@ static enum install_res install_from_default_dir(void)
static WCHAR *get_cache_file_name(BOOL ensure_exists) { - const char *xdg_dir; + const WCHAR *xdg_dir; const WCHAR *home_dir; - WCHAR *cache_dir, *ret; + WCHAR *cache_dir=NULL, *ret; size_t len, size;
- xdg_dir = getenv( "XDG_CACHE_HOME" ); + xdg_dir = _wgetenv( L"XDG_CACHE_HOME" ); if (xdg_dir && *xdg_dir && p_wine_get_dos_file_name) { - if (!(cache_dir = p_wine_get_dos_file_name( xdg_dir ))) return NULL; + char *xdg_dir_mb; + int xdg_dir_len; + + xdg_dir_len = WideCharToMultiByte( CP_UNIXCP, 0, xdg_dir, -1, NULL, 0, NULL, NULL ); + xdg_dir_mb = malloc(xdg_dir_len); + if (xdg_dir_mb) + { + WideCharToMultiByte( CP_UNIXCP, 0, xdg_dir, -1, xdg_dir_mb, xdg_dir_len, NULL, NULL ); + + cache_dir = p_wine_get_dos_file_name( xdg_dir_mb ); + + free(xdg_dir_mb); + } + + if (!cache_dir) return NULL; } else if ((home_dir = _wgetenv( L"WINEHOMEDIR" ))) {