Skip to content

Commit

Permalink
Add XDG_STATE_HOME and HOME_XDG_STATE_HOME env variables
Browse files Browse the repository at this point in the history
This gives new support for the new XDG_STATE_HOME addition to XDG_BASE_DIRS
which allows applications to use this without breaking because they would
assume $HOME/.local/state which may be unavailable to the flatpak

This fixes #4477
  • Loading branch information
lionirdeadman committed Oct 12, 2021
1 parent 23d60d2 commit 24196ca
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 0 deletions.
5 changes: 5 additions & 0 deletions common/flatpak-run.c
Expand Up @@ -1828,20 +1828,25 @@ flatpak_run_apply_env_appid (FlatpakBwrap *bwrap,
g_autoptr(GFile) app_dir_data = NULL;
g_autoptr(GFile) app_dir_config = NULL;
g_autoptr(GFile) app_dir_cache = NULL;
g_autoptr(GFile) app_dir_local = NULL;

app_dir_data = g_file_get_child (app_dir, "data");
app_dir_config = g_file_get_child (app_dir, "config");
app_dir_cache = g_file_get_child (app_dir, "cache");
app_dir_state = g_file_get_child (app_dir, "state");
flatpak_bwrap_set_env (bwrap, "XDG_DATA_HOME", flatpak_file_get_path_cached (app_dir_data), TRUE);
flatpak_bwrap_set_env (bwrap, "XDG_CONFIG_HOME", flatpak_file_get_path_cached (app_dir_config), TRUE);
flatpak_bwrap_set_env (bwrap, "XDG_CACHE_HOME", flatpak_file_get_path_cached (app_dir_cache), TRUE);
flatpak_bwrap_set_env (bwrap, "XDG_STATE_HOME", flatpak_file_get_path_cached (app_dir_state), TRUE);

if (g_getenv ("XDG_DATA_HOME"))
flatpak_bwrap_set_env (bwrap, "HOST_XDG_DATA_HOME", g_getenv ("XDG_DATA_HOME"), TRUE);
if (g_getenv ("XDG_CONFIG_HOME"))
flatpak_bwrap_set_env (bwrap, "HOST_XDG_CONFIG_HOME", g_getenv ("XDG_CONFIG_HOME"), TRUE);
if (g_getenv ("XDG_CACHE_HOME"))
flatpak_bwrap_set_env (bwrap, "HOST_XDG_CACHE_HOME", g_getenv ("XDG_CACHE_HOME"), TRUE);
if (g_getenv ("XDG_STATE_HOME"))
flatpak_bwrap_set_env (bwrap, "HOST_XDG_STATE_HOME", g_getenv ("XDG_STATE_HOME"), TRUE);
}

void
Expand Down
2 changes: 2 additions & 0 deletions doc/flatpak-run.xml
Expand Up @@ -98,6 +98,7 @@
<member>XDG_DATA_HOME</member>
<member>XDG_CONFIG_HOME</member>
<member>XDG_CACHE_HOME</member>
<member>XDG_STATE_HOME</member>
</simplelist>
<para>
The host values of these variables are made available inside the sandbox via these
Expand All @@ -107,6 +108,7 @@
<member>HOST_XDG_DATA_HOME</member>
<member>HOST_XDG_CONFIG_HOME</member>
<member>HOST_XDG_CACHE_HOME</member>
<member>HOST_XDG_STATE_HOME</member>
</simplelist>
<para>
Flatpak sets the environment variable <envar>FLATPAK_ID</envar> to the application
Expand Down
1 change: 1 addition & 0 deletions tests/libtest.sh
Expand Up @@ -100,6 +100,7 @@ export HOME=${TEST_DATA_DIR}/home
export XDG_CACHE_HOME=${TEST_DATA_DIR}/home/cache
export XDG_CONFIG_HOME=${TEST_DATA_DIR}/home/config
export XDG_DATA_HOME=${TEST_DATA_DIR}/home/share
export XDG_STATE_HOME=${TEST_DATA_DIR}/home/state
export XDG_RUNTIME_DIR=${TEST_DATA_DIR}/runtime

export XDG_DESKTOP_PORTAL_DIR=${test_builddir}/share/xdg-desktop-portal/portals
Expand Down
6 changes: 6 additions & 0 deletions tests/testlib.c
Expand Up @@ -72,6 +72,11 @@ isolated_test_dir_global_setup (void)
g_setenv ("XDG_DATA_HOME", datadir, TRUE);
g_test_message ("setting XDG_DATA_HOME=%s", datadir);

statedir = g_strconcat (isolated_test_dir, "/home/state", NULL);
g_assert_no_errno (g_mkdir_with_parents (datadir, S_IRWXU | S_IRWXG | S_IRWXO));
g_setenv ("XDG_STATE_HOME", datadir, TRUE);
g_test_message ("setting XDG_STATE_HOME=%s", datadir);

runtimedir = g_strconcat (isolated_test_dir, "/runtime", NULL);
g_assert_no_errno (g_mkdir_with_parents (runtimedir, S_IRWXU));
g_setenv ("XDG_RUNTIME_DIR", runtimedir, TRUE);
Expand All @@ -82,6 +87,7 @@ isolated_test_dir_global_setup (void)
g_assert_cmpstr (g_get_user_cache_dir (), ==, cachedir);
g_assert_cmpstr (g_get_user_config_dir (), ==, configdir);
g_assert_cmpstr (g_get_user_data_dir (), ==, datadir);
g_assert_cmpstr (g_get_user_state_dir (), ==, datadir);
g_assert_cmpstr (g_get_user_runtime_dir (), ==, runtimedir);
}

Expand Down
5 changes: 5 additions & 0 deletions tests/testlibrary.c
Expand Up @@ -2674,6 +2674,11 @@ global_setup (void)
g_setenv ("XDG_DATA_HOME", datadir, TRUE);
g_test_message ("setting XDG_DATA_HOME=%s", datadir);

statedir = g_strconcat (testdir, "/home/state", NULL);
g_mkdir_with_parents (datadir, S_IRWXU | S_IRWXG | S_IRWXO);
g_setenv ("XDG_STATE_HOME", datadir, TRUE);
g_test_message ("setting XDG_DATA_HOME=%s", datadir);

flatpak_runtimedir = g_strconcat (testdir, "/runtime", NULL);
g_mkdir_with_parents (flatpak_runtimedir, S_IRWXU | S_IRWXG | S_IRWXO);
g_setenv ("XDG_RUNTIME_DIR", flatpak_runtimedir, TRUE);
Expand Down

0 comments on commit 24196ca

Please sign in to comment.