summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2021-04-13 12:47:57 +0100
committerAlexander Larsson <alexander.larsson@gmail.com>2021-04-15 18:00:47 +0200
commit5d50b77c37b021219cd9c5262bef166e42018f79 (patch)
tree51f877aeb8c518b69f3441cc67ca8e1c1600dc0f
parent6a5bd592f494f9e7a84a8860618062917f2f04a8 (diff)
downloadflatpak-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.h2
-rw-r--r--common/flatpak-context.c24
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)