[PATCH 0/1] MR7901: ntdll: Treat XDG_DATA_DIRS as special env variable.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49987 GTK apps seem to use this env var to find path to schemas, like Meld: https://download.gnome.org/binaries/win32/meld/3.22/Meld-3.22.2-mingw.msi which doesn't start at all without this patch. More info in https://bugs.winehq.org/show_bug.cgi?id=49987. v2: add WINEXDG_DATA_DIRS and use that in winemenubuilder. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7901
From: Louis Lenders <xerox.xerox2000x(a)gmail.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49987 GTK apps seem to use this env var to find path to schemas, like Meld: https://download.gnome.org/binaries/win32/meld/3.22/Meld-3.22.2-mingw.msi which doesn't start at all without this patch. More info in https://bugs.winehq.org/show_bug.cgi?id=49987. v2: add WINEXDG_DATA_DIRS and use that in winemenubuilder. --- dlls/ntdll/unix/env.c | 6 ++++-- dlls/ntdll/unix/loader.c | 9 +++++++++ dlls/ntdll/unix/unix_private.h | 1 + programs/winemenubuilder/winemenubuilder.c | 5 +---- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/dlls/ntdll/unix/env.c b/dlls/ntdll/unix/env.c index 7193cceb87e..9c7742e572b 100644 --- a/dlls/ntdll/unix/env.c +++ b/dlls/ntdll/unix/env.c @@ -346,6 +346,7 @@ static BOOL is_special_env_var( const char *var ) STARTS_WITH( var, "TMP=" ) || STARTS_WITH( var, "QT_" ) || STARTS_WITH( var, "VK_" ) || + STARTS_WITH( var, "XDG_DATA_DIRS=" ) || STARTS_WITH( var, "XDG_SESSION_TYPE=" )); } @@ -364,7 +365,8 @@ static BOOL is_dynamic_env_var( const char *var ) STARTS_WITH( var, "WINEUSERNAME=" ) || STARTS_WITH( var, "WINEPRELOADRESERVE=" ) || STARTS_WITH( var, "WINELOADERNOEXEC=" ) || - STARTS_WITH( var, "WINESERVERSOCKET=" )); + STARTS_WITH( var, "WINESERVERSOCKET=" ) || + STARTS_WITH( var, "WINEXDG_DATA_DIRS=" )); } /****************************************************************** @@ -1110,11 +1112,11 @@ static void add_dynamic_environment( WCHAR **env, SIZE_T *pos, SIZE_T *size ) } else append_envW( env, pos, size, "WINEUNIXCP", NULL ); append_envA( env, pos, size, "WINEUSERLOCALE", user_locale ); + append_envA( env, pos, size, "WINEXDG_DATA_DIRS", xdg_data_dirs ); append_envA( env, pos, size, "SystemDrive", "C:" ); append_envA( env, pos, size, "SystemRoot", "C:\\windows" ); } - static WCHAR *expand_value( WCHAR *env, SIZE_T size, const WCHAR *src, SIZE_T src_len ) { SIZE_T len, retlen = src_len + 1, count = 0; diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index ecbcd439ee7..81f6807e229 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -156,6 +156,8 @@ const char *wineloader = NULL; const char **dll_paths = NULL; const char **system_dll_paths = NULL; const char *user_name = NULL; +const char *xdg_data_dirs = NULL; + SECTION_IMAGE_INFORMATION main_image_info = { NULL }; /* die on a fatal error; use only during initialization */ @@ -434,6 +436,12 @@ static void set_config_dir(void) } } +static void set_xdg_dirs(void) +{ + xdg_data_dirs = getenv( "XDG_DATA_DIRS" ); + if (!xdg_data_dirs) xdg_data_dirs = strdup( "/usr/local/share/:/usr/share/" ); +} + static void init_paths(void) { Dl_info info; @@ -458,6 +466,7 @@ static void init_paths(void) set_system_dll_path(); set_home_dir(); set_config_dir(); + set_xdg_dirs(); } diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h index 2e80c8bd02b..030198ef57d 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h @@ -164,6 +164,7 @@ extern const char *build_dir; extern const char *config_dir; extern const char *wineloader; extern const char *user_name; +extern const char *xdg_data_dirs; extern const char **dll_paths; extern const char **system_dll_paths; extern pthread_key_t teb_key; diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c index f3ed125cccc..6b0f37e7128 100644 --- a/programs/winemenubuilder/winemenubuilder.c +++ b/programs/winemenubuilder/winemenubuilder.c @@ -1721,10 +1721,7 @@ static BOOL build_native_mime_types(struct list *mime_types) WCHAR *dirs, *dir, *dos_name, *ctx, *p; BOOL ret; - if (_wgetenv( L"XDG_DATA_DIRS" )) - dirs = xwcsdup( _wgetenv( L"XDG_DATA_DIRS" )); - else - dirs = xwcsdup( L"/usr/local/share/:/usr/share/" ); + dirs = xwcsdup( _wgetenv( L"WINEXDG_DATA_DIRS" )); ret = add_mimes(xdg_data_dir, mime_types); if (ret) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/7901
@julliard please take a look -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7901#note_108356
This merge request was closed by Alexandre Julliard. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7901
Superseded by 2dcd49a7c9e04da84936079d878cdd6a0db95a18. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7901#note_121289
participants (4)
-
Alexandre Julliard (@julliard) -
Louis Lenders -
Louis Lenders (@xe) -
Mike Kozelkov (@augenzi)