diff --git a/common/flatpak-run.c b/common/flatpak-run.c index b1226728..41a91ade 100644 --- a/common/flatpak-run.c +++ b/common/flatpak-run.c @@ -1842,13 +1842,16 @@ 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_state = 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, ".local/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); @@ -1856,6 +1859,8 @@ flatpak_run_apply_env_appid (FlatpakBwrap *bwrap, 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 diff --git a/doc/flatpak-run.xml b/doc/flatpak-run.xml index a9c2c947..87918252 100644 --- a/doc/flatpak-run.xml +++ b/doc/flatpak-run.xml @@ -98,6 +98,7 @@ XDG_DATA_HOME XDG_CONFIG_HOME XDG_CACHE_HOME + XDG_STATE_HOME The host values of these variables are made available inside the sandbox via these @@ -107,6 +108,7 @@ HOST_XDG_DATA_HOME HOST_XDG_CONFIG_HOME HOST_XDG_CACHE_HOME + HOST_XDG_STATE_HOME Flatpak sets the environment variable FLATPAK_ID to the application diff --git a/tests/libtest.sh b/tests/libtest.sh index e12907f8..44f196b8 100644 --- a/tests/libtest.sh +++ b/tests/libtest.sh @@ -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 diff --git a/tests/testlib.c b/tests/testlib.c index 28c97a4d..1e5d9428 100644 --- a/tests/testlib.c +++ b/tests/testlib.c @@ -44,6 +44,7 @@ isolated_test_dir_global_setup (void) g_autofree char *cachedir = NULL; g_autofree char *configdir = NULL; g_autofree char *datadir = NULL; + g_autofree char *statedir = NULL; g_autofree char *homedir = NULL; g_autofree char *runtimedir = NULL; @@ -72,6 +73,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 (statedir, S_IRWXU | S_IRWXG | S_IRWXO)); + g_setenv ("XDG_STATE_HOME", statedir, TRUE); + g_test_message ("setting XDG_STATE_HOME=%s", statedir); + 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); @@ -82,6 +88,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_getenv ("XDG_STATE_HOME"), ==, statedir); g_assert_cmpstr (g_get_user_runtime_dir (), ==, runtimedir); } diff --git a/tests/testlibrary.c b/tests/testlibrary.c index cac8a893..a52892db 100644 --- a/tests/testlibrary.c +++ b/tests/testlibrary.c @@ -2705,6 +2705,7 @@ global_setup (void) g_autofree char *cachedir = NULL; g_autofree char *configdir = NULL; g_autofree char *datadir = NULL; + g_autofree char *statedir = NULL; g_autofree char *homedir = NULL; g_autofree char *services_dir = NULL; @@ -2733,6 +2734,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 (statedir, S_IRWXU | S_IRWXG | S_IRWXO); + g_setenv ("XDG_STATE_HOME", statedir, TRUE); + g_test_message ("setting XDG_STATE_HOME=%s", statedir); + 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);