diff options
author | Simon McVittie <smcv@collabora.com> | 2021-04-13 12:47:57 +0100 |
---|---|---|
committer | Alexander Larsson <alexander.larsson@gmail.com> | 2021-04-15 18:00:47 +0200 |
commit | 5d50b77c37b021219cd9c5262bef166e42018f79 (patch) | |
tree | 51f877aeb8c518b69f3441cc67ca8e1c1600dc0f | |
parent | 6a5bd592f494f9e7a84a8860618062917f2f04a8 (diff) | |
download | flatpak-5d50b77c37b021219cd9c5262bef166e42018f79.tar.gz |
context: Build xdg_dirs_conf as an "out" argument
flatpak_context_get_exports_full() previously copied the interface of
flatpak_context_export(), which appended entries to a caller-supplied
GString, but it's a more GLib-style API if we use an "out" argument.
Signed-off-by: Simon McVittie <smcv@collabora.com>
-rw-r--r-- | common/flatpak-context-private.h | 2 | ||||
-rw-r--r-- | common/flatpak-context.c | 24 |
2 files changed, 18 insertions, 8 deletions
diff --git a/common/flatpak-context-private.h b/common/flatpak-context-private.h index 37c864c2..420393b4 100644 --- a/common/flatpak-context-private.h +++ b/common/flatpak-context-private.h @@ -138,7 +138,7 @@ FlatpakExports *flatpak_context_get_exports_full (FlatpakContext *context, GPtrArray *extra_app_id_dirs, gboolean do_create, gboolean include_default_dirs, - GString *xdg_dirs_conf, + gchar **xdg_dirs_conf, gboolean *home_access_out); void flatpak_context_append_bwrap_filesystem (FlatpakContext *context, diff --git a/common/flatpak-context.c b/common/flatpak-context.c index ca5928bf..66a6d0ae 100644 --- a/common/flatpak-context.c +++ b/common/flatpak-context.c @@ -2270,14 +2270,18 @@ flatpak_context_export (FlatpakContext *context, GFile *app_id_dir, GPtrArray *extra_app_id_dirs, gboolean do_create, - GString *xdg_dirs_conf, + gchar **xdg_dirs_conf_out, gboolean *home_access_out) { gboolean home_access = FALSE; + g_autoptr(GString) xdg_dirs_conf = NULL; FlatpakFilesystemMode fs_mode, os_mode, etc_mode, home_mode; GHashTableIter iter; gpointer key, value; + if (xdg_dirs_conf_out != NULL) + xdg_dirs_conf = g_string_new (""); + fs_mode = GPOINTER_TO_INT (g_hash_table_lookup (context->filesystems, "host")); if (fs_mode != FLATPAK_FILESYSTEM_MODE_NONE) { @@ -2423,6 +2427,12 @@ flatpak_context_export (FlatpakContext *context, if (home_access_out != NULL) *home_access_out = home_access; + + if (xdg_dirs_conf_out != NULL) + { + g_assert (xdg_dirs_conf != NULL); + *xdg_dirs_conf_out = g_string_free (g_steal_pointer (&xdg_dirs_conf), FALSE); + } } FlatpakExports * @@ -2462,14 +2472,14 @@ flatpak_context_get_exports_full (FlatpakContext *context, GPtrArray *extra_app_id_dirs, gboolean do_create, gboolean include_default_dirs, - GString *xdg_dirs_conf, + gchar **xdg_dirs_conf_out, gboolean *home_access_out) { g_autoptr(FlatpakExports) exports = flatpak_exports_new (); flatpak_context_export (context, exports, app_id_dir, extra_app_id_dirs, - do_create, xdg_dirs_conf, home_access_out); + do_create, xdg_dirs_conf_out, home_access_out); if (include_default_dirs) { @@ -2495,7 +2505,7 @@ flatpak_context_append_bwrap_filesystem (FlatpakContext *context, FlatpakExports **exports_out) { g_autoptr(FlatpakExports) exports = NULL; - g_autoptr(GString) xdg_dirs_conf = g_string_new (""); + g_autofree char *xdg_dirs_conf = NULL; gboolean home_access = FALSE; GHashTableIter iter; gpointer key, value; @@ -2503,7 +2513,7 @@ flatpak_context_append_bwrap_filesystem (FlatpakContext *context, exports = flatpak_context_get_exports_full (context, app_id_dir, extra_app_id_dirs, TRUE, TRUE, - xdg_dirs_conf, &home_access); + &xdg_dirs_conf, &home_access); if (app_id_dir != NULL) flatpak_run_apply_env_appid (bwrap, app_id_dir); @@ -2591,14 +2601,14 @@ flatpak_context_append_bwrap_filesystem (FlatpakContext *context, if (g_file_test (src_path, G_FILE_TEST_EXISTS)) flatpak_bwrap_add_bind_arg (bwrap, "--ro-bind", src_path, path); } - else if (xdg_dirs_conf->len > 0 && app_id_dir != NULL) + else if (xdg_dirs_conf != NULL && xdg_dirs_conf[0] != '\0' && app_id_dir != NULL) { g_autofree char *path = g_build_filename (flatpak_file_get_path_cached (app_id_dir), "config/user-dirs.dirs", NULL); flatpak_bwrap_add_args_data (bwrap, "xdg-config-dirs", - xdg_dirs_conf->str, xdg_dirs_conf->len, path, NULL); + xdg_dirs_conf, strlen (xdg_dirs_conf), path, NULL); } if (exports_out) |