diff options
Diffstat (limited to 'common/xdg-app-run.c')
-rw-r--r-- | common/xdg-app-run.c | 666 |
1 files changed, 355 insertions, 311 deletions
diff --git a/common/xdg-app-run.c b/common/xdg-app-run.c index 38c4126..44d5a14 100644 --- a/common/xdg-app-run.c +++ b/common/xdg-app-run.c @@ -98,18 +98,19 @@ static const char *xdg_app_context_devices[] = { NULL }; -struct XdgAppContext { - XdgAppContextShares shares; - XdgAppContextShares shares_valid; +struct XdgAppContext +{ + XdgAppContextShares shares; + XdgAppContextShares shares_valid; XdgAppContextSockets sockets; XdgAppContextSockets sockets_valid; XdgAppContextDevices devices; XdgAppContextDevices devices_valid; - GHashTable *env_vars; - GHashTable *persistent; - GHashTable *filesystems; - GHashTable *session_bus_policy; - GHashTable *system_bus_policy; + GHashTable *env_vars; + GHashTable *persistent; + GHashTable *filesystems; + GHashTable *session_bus_policy; + GHashTable *system_bus_policy; }; XdgAppContext * @@ -174,7 +175,7 @@ xdg_app_context_bitmask_to_string (guint32 enabled, guint32 valid, const char ** } g_ptr_array_add (array, NULL); - return (char **)g_ptr_array_free (array, FALSE); + return (char **) g_ptr_array_free (array, FALSE); } static XdgAppContextShares @@ -236,7 +237,9 @@ xdg_app_verify_dbus_name (const char *name, GError **error) name_part = tmp; } else - name_part = name; + { + name_part = name; + } if (g_dbus_is_name (name_part) && !g_dbus_is_unique_name (name_part)) return TRUE; @@ -280,86 +283,86 @@ xdg_app_context_devices_to_string (XdgAppContextDevices devices, XdgAppContextDe } static void -xdg_app_context_add_shares (XdgAppContext *context, - XdgAppContextShares shares) +xdg_app_context_add_shares (XdgAppContext *context, + XdgAppContextShares shares) { context->shares_valid |= shares; context->shares |= shares; } static void -xdg_app_context_remove_shares (XdgAppContext *context, - XdgAppContextShares shares) +xdg_app_context_remove_shares (XdgAppContext *context, + XdgAppContextShares shares) { context->shares_valid |= shares; context->shares &= ~shares; } static void -xdg_app_context_add_sockets (XdgAppContext *context, - XdgAppContextSockets sockets) +xdg_app_context_add_sockets (XdgAppContext *context, + XdgAppContextSockets sockets) { context->sockets_valid |= sockets; context->sockets |= sockets; } static void -xdg_app_context_remove_sockets (XdgAppContext *context, - XdgAppContextSockets sockets) +xdg_app_context_remove_sockets (XdgAppContext *context, + XdgAppContextSockets sockets) { context->sockets_valid |= sockets; context->sockets &= ~sockets; } static void -xdg_app_context_add_devices (XdgAppContext *context, - XdgAppContextDevices devices) +xdg_app_context_add_devices (XdgAppContext *context, + XdgAppContextDevices devices) { context->devices_valid |= devices; context->devices |= devices; } static void -xdg_app_context_remove_devices (XdgAppContext *context, - XdgAppContextDevices devices) +xdg_app_context_remove_devices (XdgAppContext *context, + XdgAppContextDevices devices) { context->devices_valid |= devices; context->devices &= ~devices; } static void -xdg_app_context_set_env_var (XdgAppContext *context, - const char *name, - const char *value) +xdg_app_context_set_env_var (XdgAppContext *context, + const char *name, + const char *value) { g_hash_table_insert (context->env_vars, g_strdup (name), g_strdup (value)); } void -xdg_app_context_set_session_bus_policy (XdgAppContext *context, - const char *name, - XdgAppPolicy policy) +xdg_app_context_set_session_bus_policy (XdgAppContext *context, + const char *name, + XdgAppPolicy policy) { g_hash_table_insert (context->session_bus_policy, g_strdup (name), GINT_TO_POINTER (policy)); } void -xdg_app_context_set_system_bus_policy (XdgAppContext *context, - const char *name, - XdgAppPolicy policy) +xdg_app_context_set_system_bus_policy (XdgAppContext *context, + const char *name, + XdgAppPolicy policy) { g_hash_table_insert (context->system_bus_policy, g_strdup (name), GINT_TO_POINTER (policy)); } static void -xdg_app_context_set_persistent (XdgAppContext *context, - const char *path) +xdg_app_context_set_persistent (XdgAppContext *context, + const char *path) { g_hash_table_insert (context->persistent, g_strdup (path), GINT_TO_POINTER (1)); } static gboolean -get_user_dir_from_string (const char *filesystem, +get_user_dir_from_string (const char *filesystem, const char **config_key, const char **suffix, const char **dir) @@ -378,7 +381,7 @@ get_user_dir_from_string (const char *filesystem, rest = filesystem + len; while (*rest == '/') - rest ++; + rest++; if (suffix) *suffix = rest; @@ -489,7 +492,7 @@ parse_filesystem_flags (const char *filesystem, XdgAppFilesystemMode *mode) static gboolean xdg_app_context_verify_filesystem (const char *filesystem_and_mode, - GError **error) + GError **error) { g_autofree char *filesystem = parse_filesystem_flags (filesystem_and_mode, NULL); @@ -510,8 +513,8 @@ xdg_app_context_verify_filesystem (const char *filesystem_and_mode, } static void -xdg_app_context_add_filesystem (XdgAppContext *context, - const char *what) +xdg_app_context_add_filesystem (XdgAppContext *context, + const char *what) { XdgAppFilesystemMode mode; char *fs = parse_filesystem_flags (what, &mode); @@ -520,8 +523,8 @@ xdg_app_context_add_filesystem (XdgAppContext *context, } static void -xdg_app_context_remove_filesystem (XdgAppContext *context, - const char *what) +xdg_app_context_remove_filesystem (XdgAppContext *context, + const char *what) { g_hash_table_insert (context->filesystems, parse_filesystem_flags (what, NULL), @@ -529,8 +532,8 @@ xdg_app_context_remove_filesystem (XdgAppContext *context, } void -xdg_app_context_merge (XdgAppContext *context, - XdgAppContext *other) +xdg_app_context_merge (XdgAppContext *context, + XdgAppContext *other) { GHashTableIter iter; gpointer key, value; @@ -567,10 +570,10 @@ xdg_app_context_merge (XdgAppContext *context, } static gboolean -option_share_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_share_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; XdgAppContextShares share; @@ -585,10 +588,10 @@ option_share_cb (const gchar *option_name, } static gboolean -option_unshare_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_unshare_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; XdgAppContextShares share; @@ -603,10 +606,10 @@ option_unshare_cb (const gchar *option_name, } static gboolean -option_socket_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_socket_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; XdgAppContextSockets socket; @@ -621,10 +624,10 @@ option_socket_cb (const gchar *option_name, } static gboolean -option_nosocket_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_nosocket_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; XdgAppContextSockets socket; @@ -639,10 +642,10 @@ option_nosocket_cb (const gchar *option_name, } static gboolean -option_device_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_device_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; XdgAppContextDevices device; @@ -657,10 +660,10 @@ option_device_cb (const gchar *option_name, } static gboolean -option_nodevice_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_nodevice_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; XdgAppContextDevices device; @@ -675,10 +678,10 @@ option_nodevice_cb (const gchar *option_name, } static gboolean -option_filesystem_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_filesystem_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; @@ -690,10 +693,10 @@ option_filesystem_cb (const gchar *option_name, } static gboolean -option_nofilesystem_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_nofilesystem_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; @@ -705,12 +708,13 @@ option_nofilesystem_cb (const gchar *option_name, } static gboolean -option_env_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_env_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; + g_auto(GStrv) split = g_strsplit (value, "=", 2); if (split == NULL || split[0] == NULL || split[0][0] == 0 || split[1] == NULL) @@ -724,10 +728,10 @@ option_env_cb (const gchar *option_name, } static gboolean -option_own_name_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_own_name_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; @@ -739,10 +743,10 @@ option_own_name_cb (const gchar *option_name, } static gboolean -option_talk_name_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_talk_name_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; @@ -754,10 +758,10 @@ option_talk_name_cb (const gchar *option_name, } static gboolean -option_system_own_name_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_system_own_name_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; @@ -769,10 +773,10 @@ option_system_own_name_cb (const gchar *option_name, } static gboolean -option_system_talk_name_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_system_talk_name_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; @@ -784,10 +788,10 @@ option_system_talk_name_cb (const gchar *option_name, } static gboolean -option_persist_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) +option_persist_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) { XdgAppContext *context = data; @@ -814,9 +818,9 @@ static GOptionEntry context_options[] = { }; GOptionGroup * -xdg_app_context_get_options (XdgAppContext *context) +xdg_app_context_get_options (XdgAppContext *context) { - GOptionGroup *group; + GOptionGroup *group; group = g_option_group_new ("environment", "Runtime Environment", @@ -838,15 +842,17 @@ parse_negated (const char *option, gboolean *negated) *negated = TRUE; } else - *negated = FALSE; + { + *negated = FALSE; + } return option; } /* This is a merge, not a replace */ gboolean -xdg_app_context_load_metadata (XdgAppContext *context, - GKeyFile *metakey, - GError **error) +xdg_app_context_load_metadata (XdgAppContext *context, + GKeyFile *metakey, + GError **error) { gboolean remove; int i; @@ -933,7 +939,7 @@ xdg_app_context_load_metadata (XdgAppContext *context, if (g_key_file_has_key (metakey, XDG_APP_METADATA_GROUP_CONTEXT, XDG_APP_METADATA_KEY_PERSISTENT, NULL)) { g_auto(GStrv) persistent = g_key_file_get_string_list (metakey, XDG_APP_METADATA_GROUP_CONTEXT, - XDG_APP_METADATA_KEY_PERSISTENT, NULL, error); + XDG_APP_METADATA_KEY_PERSISTENT, NULL, error); if (persistent == NULL) return FALSE; @@ -957,7 +963,7 @@ xdg_app_context_load_metadata (XdgAppContext *context, return FALSE; policy = xdg_app_policy_from_string (value, error); - if ((int)policy == -1) + if ((int) policy == -1) return FALSE; xdg_app_context_set_session_bus_policy (context, key, policy); @@ -980,7 +986,7 @@ xdg_app_context_load_metadata (XdgAppContext *context, return FALSE; policy = xdg_app_policy_from_string (value, error); - if ((int)policy == -1) + if ((int) policy == -1) return FALSE; xdg_app_context_set_system_bus_policy (context, key, policy); @@ -1006,8 +1012,8 @@ xdg_app_context_load_metadata (XdgAppContext *context, } void -xdg_app_context_save_metadata (XdgAppContext *context, - GKeyFile *metakey) +xdg_app_context_save_metadata (XdgAppContext *context, + GKeyFile *metakey) { g_auto(GStrv) shared = xdg_app_context_shared_to_string (context->shares, context->shares_valid); g_auto(GStrv) sockets = xdg_app_context_sockets_to_string (context->sockets, context->sockets_valid); @@ -1016,37 +1022,49 @@ xdg_app_context_save_metadata (XdgAppContext *context, gpointer key, value; if (shared[0] != NULL) - g_key_file_set_string_list (metakey, - XDG_APP_METADATA_GROUP_CONTEXT, - XDG_APP_METADATA_KEY_SHARED, - (const char * const*)shared, g_strv_length (shared)); + { + g_key_file_set_string_list (metakey, + XDG_APP_METADATA_GROUP_CONTEXT, + XDG_APP_METADATA_KEY_SHARED, + (const char * const *) shared, g_strv_length (shared)); + } else - g_key_file_remove_key (metakey, - XDG_APP_METADATA_GROUP_CONTEXT, - XDG_APP_METADATA_KEY_SHARED, - NULL); + { + g_key_file_remove_key (metakey, + XDG_APP_METADATA_GROUP_CONTEXT, + XDG_APP_METADATA_KEY_SHARED, + NULL); + } if (sockets[0] != NULL) - g_key_file_set_string_list (metakey, - XDG_APP_METADATA_GROUP_CONTEXT, - XDG_APP_METADATA_KEY_SOCKETS, - (const char * const*)sockets, g_strv_length (sockets)); + { + g_key_file_set_string_list (metakey, + XDG_APP_METADATA_GROUP_CONTEXT, + XDG_APP_METADATA_KEY_SOCKETS, + (const char * const *) sockets, g_strv_length (sockets)); + } else - g_key_file_remove_key (metakey, - XDG_APP_METADATA_GROUP_CONTEXT, - XDG_APP_METADATA_KEY_SOCKETS, - NULL); + { + g_key_file_remove_key (metakey, + XDG_APP_METADATA_GROUP_CONTEXT, + XDG_APP_METADATA_KEY_SOCKETS, + NULL); + } if (devices[0] != NULL) - g_key_file_set_string_list (metakey, - XDG_APP_METADATA_GROUP_CONTEXT, - XDG_APP_METADATA_KEY_DEVICES, - (const char * const*)devices, g_strv_length (devices)); + { + g_key_file_set_string_list (metakey, + XDG_APP_METADATA_GROUP_CONTEXT, + XDG_APP_METADATA_KEY_DEVICES, + (const char * const *) devices, g_strv_length (devices)); + } else - g_key_file_remove_key (metakey, - XDG_APP_METADATA_GROUP_CONTEXT, - XDG_APP_METADATA_KEY_DEVICES, - NULL); + { + g_key_file_remove_key (metakey, + XDG_APP_METADATA_GROUP_CONTEXT, + XDG_APP_METADATA_KEY_DEVICES, + NULL); + } if (g_hash_table_size (context->filesystems) > 0) { @@ -1066,28 +1084,32 @@ xdg_app_context_save_metadata (XdgAppContext *context, g_key_file_set_string_list (metakey, XDG_APP_METADATA_GROUP_CONTEXT, XDG_APP_METADATA_KEY_FILESYSTEMS, - (const char * const*)array->pdata, array->len); + (const char * const *) array->pdata, array->len); } else - g_key_file_remove_key (metakey, - XDG_APP_METADATA_GROUP_CONTEXT, - XDG_APP_METADATA_KEY_FILESYSTEMS, - NULL); + { + g_key_file_remove_key (metakey, + XDG_APP_METADATA_GROUP_CONTEXT, + XDG_APP_METADATA_KEY_FILESYSTEMS, + NULL); + } if (g_hash_table_size (context->persistent) > 0) { - g_autofree char **keys = (char **)g_hash_table_get_keys_as_array (context->persistent, NULL); + g_autofree char **keys = (char **) g_hash_table_get_keys_as_array (context->persistent, NULL); g_key_file_set_string_list (metakey, XDG_APP_METADATA_GROUP_CONTEXT, XDG_APP_METADATA_KEY_PERSISTENT, - (const char * const*)keys, g_strv_length (keys)); + (const char * const *) keys, g_strv_length (keys)); } else - g_key_file_remove_key (metakey, - XDG_APP_METADATA_GROUP_CONTEXT, - XDG_APP_METADATA_KEY_PERSISTENT, - NULL); + { + g_key_file_remove_key (metakey, + XDG_APP_METADATA_GROUP_CONTEXT, + XDG_APP_METADATA_KEY_PERSISTENT, + NULL); + } g_key_file_remove_group (metakey, XDG_APP_METADATA_GROUP_SESSION_BUS_POLICY, NULL); g_hash_table_iter_init (&iter, context->session_bus_policy); @@ -1097,7 +1119,7 @@ xdg_app_context_save_metadata (XdgAppContext *context, if (policy > 0) g_key_file_set_string (metakey, XDG_APP_METADATA_GROUP_SESSION_BUS_POLICY, - (char *)key, xdg_app_policy_to_string (policy)); + (char *) key, xdg_app_policy_to_string (policy)); } g_key_file_remove_group (metakey, XDG_APP_METADATA_GROUP_SYSTEM_BUS_POLICY, NULL); @@ -1108,7 +1130,7 @@ xdg_app_context_save_metadata (XdgAppContext *context, if (policy > 0) g_key_file_set_string (metakey, XDG_APP_METADATA_GROUP_SYSTEM_BUS_POLICY, - (char *)key, xdg_app_policy_to_string (policy)); + (char *) key, xdg_app_policy_to_string (policy)); } g_key_file_remove_group (metakey, XDG_APP_METADATA_GROUP_ENVIRONMENT, NULL); @@ -1117,12 +1139,12 @@ xdg_app_context_save_metadata (XdgAppContext *context, { g_key_file_set_string (metakey, XDG_APP_METADATA_GROUP_ENVIRONMENT, - (char *)key, (char *)value); + (char *) key, (char *) value); } } void -xdg_app_context_allow_host_fs (XdgAppContext *context) +xdg_app_context_allow_host_fs (XdgAppContext *context) { xdg_app_context_add_filesystem (context, "host"); } @@ -1150,9 +1172,10 @@ extract_unix_path_from_dbus_address (const char *address) } #ifdef ENABLE_XAUTH -static gboolean auth_streq (char *str, - char *au_str, - int au_len) +static gboolean +auth_streq (char *str, + char *au_str, + int au_len) { return au_len == strlen (str) && memcmp (str, au_str, au_len) == 0; } @@ -1192,11 +1215,11 @@ write_xauth (char *number, FILE *output) local_xa.number_length = 2; } - if (!XauWriteAuth(output, &local_xa)) + if (!XauWriteAuth (output, &local_xa)) g_warning ("xauth write error"); } - XauDisposeAuth(xa); + XauDisposeAuth (xa); } fclose (f); @@ -1217,8 +1240,8 @@ add_args (GPtrArray *argv_array, ...) static int create_tmp_fd (const char *contents, - gssize length, - GError **error) + gssize length, + GError **error) { char template[] = "/tmp/tmp_fd_XXXXXX"; int fd; @@ -1270,7 +1293,7 @@ create_tmp_fd (const char *contents, static void xdg_app_run_add_x11_args (GPtrArray *argv_array, - char ***envp_p) + char ***envp_p) { char *x11_socket = NULL; const char *display = g_getenv ("DISPLAY"); @@ -1305,7 +1328,7 @@ xdg_app_run_add_x11_args (GPtrArray *argv_array, if (tmp_fd != -1) { g_autofree char *tmp_fd_str = g_strdup_printf ("%d", tmp_fd); - g_autofree char *dest = g_strdup_printf ("/run/user/%d/Xauthority", getuid()); + g_autofree char *dest = g_strdup_printf ("/run/user/%d/Xauthority", getuid ()); write_xauth (d, output); add_args (argv_array, @@ -1320,18 +1343,22 @@ xdg_app_run_add_x11_args (GPtrArray *argv_array, lseek (tmp_fd, 0, SEEK_SET); } else - close (fd); + { + close (fd); + } } #endif } else - *envp_p = g_environ_unsetenv (*envp_p, "DISPLAY"); + { + *envp_p = g_environ_unsetenv (*envp_p, "DISPLAY"); + } } static void xdg_app_run_add_wayland_args (GPtrArray *argv_array, - char ***envp_p) + char ***envp_p) { g_autofree char *wayland_socket = g_build_filename (g_get_user_runtime_dir (), "wayland-0", NULL); g_autofree char *sandbox_wayland_socket = g_strdup_printf ("/run/user/%d/wayland-0", getuid ()); @@ -1346,7 +1373,7 @@ xdg_app_run_add_wayland_args (GPtrArray *argv_array, static void xdg_app_run_add_pulseaudio_args (GPtrArray *argv_array, - char ***envp_p) + char ***envp_p) { char *pulseaudio_socket = g_build_filename (g_get_user_runtime_dir (), "pulse/native", NULL); @@ -1398,10 +1425,10 @@ create_proxy_socket (char *template) gboolean xdg_app_run_add_system_dbus_args (XdgAppContext *context, - char ***envp_p, - GPtrArray *argv_array, - GPtrArray *dbus_proxy_argv, - gboolean unrestricted) + char ***envp_p, + GPtrArray *argv_array, + GPtrArray *dbus_proxy_argv, + gboolean unrestricted) { const char *dbus_address = g_getenv ("DBUS_SYSTEM_BUS_ADDRESS"); g_autofree char *real_dbus_address = NULL; @@ -1450,9 +1477,9 @@ xdg_app_run_add_system_dbus_args (XdgAppContext *context, gboolean xdg_app_run_add_session_dbus_args (GPtrArray *argv_array, - char ***envp_p, + char ***envp_p, GPtrArray *dbus_proxy_argv, - gboolean unrestricted) + gboolean unrestricted) { const char *dbus_address = g_getenv ("DBUS_SESSION_BUS_ADDRESS"); char *dbus_session_socket = NULL; @@ -1495,9 +1522,9 @@ xdg_app_run_add_session_dbus_args (GPtrArray *argv_array, } static void -xdg_app_add_bus_filters (GPtrArray *dbus_proxy_argv, - GHashTable *ht, - const char *app_id, +xdg_app_add_bus_filters (GPtrArray *dbus_proxy_argv, + GHashTable *ht, + const char *app_id, XdgAppContext *context) { GHashTableIter iter; @@ -1516,16 +1543,16 @@ xdg_app_add_bus_filters (GPtrArray *dbus_proxy_argv, XdgAppPolicy policy = GPOINTER_TO_INT (value); if (policy > 0) - g_ptr_array_add (dbus_proxy_argv, g_strdup_printf ("--%s=%s", xdg_app_policy_to_string (policy), (char *)key)); + g_ptr_array_add (dbus_proxy_argv, g_strdup_printf ("--%s=%s", xdg_app_policy_to_string (policy), (char *) key)); } } gboolean -xdg_app_run_add_extension_args (GPtrArray *argv_array, - GKeyFile *metakey, - const char *full_ref, +xdg_app_run_add_extension_args (GPtrArray *argv_array, + GKeyFile *metakey, + const char *full_ref, GCancellable *cancellable, - GError **error) + GError **error) { g_auto(GStrv) parts = NULL; gboolean is_app; @@ -1559,15 +1586,15 @@ xdg_app_run_add_extension_args (GPtrArray *argv_array, } } - g_list_free_full (extensions, (GDestroyNotify)xdg_app_extension_free); + g_list_free_full (extensions, (GDestroyNotify) xdg_app_extension_free); return TRUE; } static void -add_file_arg (GPtrArray *argv_array, +add_file_arg (GPtrArray *argv_array, XdgAppFilesystemMode mode, - const char *path) + const char *path) { struct stat st; @@ -1584,13 +1611,13 @@ add_file_arg (GPtrArray *argv_array, } void -xdg_app_run_add_environment_args (GPtrArray *argv_array, - char ***envp_p, - GPtrArray *session_bus_proxy_argv, - GPtrArray *system_bus_proxy_argv, - const char *app_id, +xdg_app_run_add_environment_args (GPtrArray *argv_array, + char ***envp_p, + GPtrArray *session_bus_proxy_argv, + GPtrArray *system_bus_proxy_argv, + const char *app_id, XdgAppContext *context, - GFile *app_id_dir) + GFile *app_id_dir) { GHashTableIter iter; gpointer key, value; @@ -1618,13 +1645,15 @@ xdg_app_run_add_environment_args (GPtrArray *argv_array, if (g_file_test ("/dev/dri", G_FILE_TEST_IS_DIR)) add_args (argv_array, "--dev-bind", "/dev/dri", "/dev/dri", NULL); if (g_file_test ("/dev/nvidiactl", G_FILE_TEST_EXISTS)) - add_args (argv_array, - "--dev-bind", "/dev/nvidiactl", "/dev/nvidiactl", - "--dev-bind", "/dev/nvidia0", "/dev/nvidia0", - NULL); + { + add_args (argv_array, + "--dev-bind", "/dev/nvidiactl", "/dev/nvidiactl", + "--dev-bind", "/dev/nvidia0", "/dev/nvidia0", + NULL); + } } - fs_mode = (XdgAppFilesystemMode)g_hash_table_lookup (context->filesystems, "host"); + fs_mode = (XdgAppFilesystemMode) g_hash_table_lookup (context->filesystems, "host"); if (fs_mode != 0) { DIR *dir; @@ -1651,7 +1680,7 @@ xdg_app_run_add_environment_args (GPtrArray *argv_array, add_file_arg (argv_array, fs_mode, "/run/media"); } - home_mode = (XdgAppFilesystemMode)g_hash_table_lookup (context->filesystems, "home"); + home_mode = (XdgAppFilesystemMode) g_hash_table_lookup (context->filesystems, "home"); if (home_mode != 0) { g_debug ("Allowing homedir access"); @@ -1683,7 +1712,7 @@ xdg_app_run_add_environment_args (GPtrArray *argv_array, while (g_hash_table_iter_next (&iter, &key, &value)) { const char *filesystem = key; - XdgAppFilesystemMode mode = GPOINTER_TO_INT(value); + XdgAppFilesystemMode mode = GPOINTER_TO_INT (value); if (value == NULL || strcmp (filesystem, "host") == 0 || @@ -1728,7 +1757,7 @@ xdg_app_run_add_environment_args (GPtrArray *argv_array, { g_autofree char *path = NULL; - path = g_build_filename (g_get_home_dir(), filesystem+2, NULL); + path = g_build_filename (g_get_home_dir (), filesystem + 2, NULL); if (g_file_test (path, G_FILE_TEST_EXISTS)) add_file_arg (argv_array, mode, path); } @@ -1738,7 +1767,9 @@ xdg_app_run_add_environment_args (GPtrArray *argv_array, add_file_arg (argv_array, mode, filesystem); } else - g_warning ("Unexpected filesystem arg %s\n", filesystem); + { + g_warning ("Unexpected filesystem arg %s\n", filesystem); + } } /* Do this after setting up everything in the home dir, so its not overwritten */ @@ -1808,9 +1839,7 @@ xdg_app_run_add_environment_args (GPtrArray *argv_array, g_debug ("Allowing session-dbus access"); if (xdg_app_run_add_session_dbus_args (argv_array, envp_p, session_bus_proxy_argv, unrestricted_session_bus) && !unrestricted_session_bus && session_bus_proxy_argv) - { - xdg_app_add_bus_filters (session_bus_proxy_argv, context->session_bus_policy, app_id, context); - } + xdg_app_add_bus_filters (session_bus_proxy_argv, context->session_bus_policy, app_id, context); unrestricted_system_bus = (context->sockets & XDG_APP_CONTEXT_SOCKET_SYSTEM_BUS) != 0; if (unrestricted_system_bus) @@ -1818,27 +1847,29 @@ xdg_app_run_add_environment_args (GPtrArray *argv_array, if (xdg_app_run_add_system_dbus_args (context, envp_p, argv_array, system_bus_proxy_argv, unrestricted_system_bus) && !unrestricted_system_bus && system_bus_proxy_argv) - { - xdg_app_add_bus_filters (system_bus_proxy_argv, context->system_bus_policy, NULL, context); - } + xdg_app_add_bus_filters (system_bus_proxy_argv, context->system_bus_policy, NULL, context); } -static const struct {const char *env; const char *val;} default_exports[] = { - {"PATH","/app/bin:/usr/bin"}, +static const struct {const char *env; + const char *val; +} default_exports[] = { + {"PATH", "/app/bin:/usr/bin"}, {"LD_LIBRARY_PATH", "/app/lib"}, - {"XDG_CONFIG_DIRS","/app/etc/xdg:/etc/xdg"}, - {"XDG_DATA_DIRS","/app/share:/usr/share"}, - {"SHELL","/bin/sh"}, + {"XDG_CONFIG_DIRS", "/app/etc/xdg:/etc/xdg"}, + {"XDG_DATA_DIRS", "/app/share:/usr/share"}, + {"SHELL", "/bin/sh"}, }; -static const struct {const char *env; const char *val;} devel_exports[] = { - {"ACLOCAL_PATH","/app/share/aclocal"}, - {"C_INCLUDE_PATH","/app/include"}, - {"CPLUS_INCLUDE_PATH","/app/include"}, - {"LDFLAGS","-L/app/lib "}, - {"PKG_CONFIG_PATH","/app/lib/pkgconfig:/app/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig"}, - {"LC_ALL","en_US.utf8"}, +static const struct {const char *env; + const char *val; +} devel_exports[] = { + {"ACLOCAL_PATH", "/app/share/aclocal"}, + {"C_INCLUDE_PATH", "/app/include"}, + {"CPLUS_INCLUDE_PATH", "/app/include"}, + {"LDFLAGS", "-L/app/lib "}, + {"PKG_CONFIG_PATH", "/app/lib/pkgconfig:/app/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig"}, + {"LC_ALL", "en_US.utf8"}, }; char ** @@ -1881,7 +1912,7 @@ xdg_app_run_get_minimal_env (gboolean devel) env_array = g_ptr_array_new_with_free_func (g_free); - for (i = 0; i < G_N_ELEMENTS(default_exports); i++) + for (i = 0; i < G_N_ELEMENTS (default_exports); i++) g_ptr_array_add (env_array, g_strdup_printf ("%s=%s", default_exports[i].env, default_exports[i].val)); if (devel) @@ -1890,25 +1921,25 @@ xdg_app_run_get_minimal_env (gboolean devel) g_ptr_array_add (env_array, g_strdup_printf ("%s=%s", devel_exports[i].env, devel_exports[i].val)); } - for (i = 0; i < G_N_ELEMENTS(copy); i++) + for (i = 0; i < G_N_ELEMENTS (copy); i++) { - const char *current = g_getenv(copy[i]); + const char *current = g_getenv (copy[i]); if (current) g_ptr_array_add (env_array, g_strdup_printf ("%s=%s", copy[i], current)); } if (!devel) { - for (i = 0; i < G_N_ELEMENTS(copy_nodevel); i++) + for (i = 0; i < G_N_ELEMENTS (copy_nodevel); i++) { - const char *current = g_getenv(copy_nodevel[i]); + const char *current = g_getenv (copy_nodevel[i]); if (current) g_ptr_array_add (env_array, g_strdup_printf ("%s=%s", copy_nodevel[i], current)); } } g_ptr_array_add (env_array, NULL); - return (char **)g_ptr_array_free (env_array, FALSE); + return (char **) g_ptr_array_free (env_array, FALSE); } char ** @@ -1916,15 +1947,15 @@ xdg_app_run_apply_env_default (char **envp) { int i; - for (i = 0; i < G_N_ELEMENTS(default_exports); i++) + for (i = 0; i < G_N_ELEMENTS (default_exports); i++) envp = g_environ_setenv (envp, default_exports[i].env, default_exports[i].val, TRUE); return envp; } char ** -xdg_app_run_apply_env_appid (char **envp, - GFile *app_dir) +xdg_app_run_apply_env_appid (char **envp, + GFile *app_dir) { g_autoptr(GFile) app_dir_data = NULL; g_autoptr(GFile) app_dir_config = NULL; @@ -1971,9 +2002,9 @@ xdg_app_get_data_dir (const char *app_id) } GFile * -xdg_app_ensure_data_dir (const char *app_id, - GCancellable *cancellable, - GError **error) +xdg_app_ensure_data_dir (const char *app_id, + GCancellable *cancellable, + GError **error) { g_autoptr(GFile) dir = xdg_app_get_data_dir (app_id); g_autoptr(GFile) data_dir = g_file_get_child (dir, "data"); @@ -1992,17 +2023,18 @@ xdg_app_ensure_data_dir (const char *app_id, return g_object_ref (dir); } -struct JobData { - char *job; +struct JobData +{ + char *job; GMainLoop *main_loop; }; static void job_removed_cb (SystemdManager *manager, - guint32 id, - char *job, - char *unit, - char *result, + guint32 id, + char *job, + char *unit, + char *result, struct JobData *data) { if (strcmp (job, data->job) == 0) @@ -2027,7 +2059,7 @@ xdg_app_run_in_transient_unit (const char *appid, GError **error) struct JobData data; gboolean res = FALSE; - path = g_strdup_printf ("/run/user/%d/systemd/private", getuid()); + path = g_strdup_printf ("/run/user/%d/systemd/private", getuid ()); if (!g_file_test (path, G_FILE_TEST_EXISTS)) return xdg_app_fail (error, @@ -2055,7 +2087,7 @@ xdg_app_run_in_transient_unit (const char *appid, GError **error) if (!manager) goto out; - name = g_strdup_printf ("xdg-app-%s-%d.scope", appid, getpid()); + name = g_strdup_printf ("xdg-app-%s-%d.scope", appid, getpid ()); g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(sv)")); @@ -2064,7 +2096,7 @@ xdg_app_run_in_transient_unit (const char *appid, GError **error) "PIDs", g_variant_new_fixed_array (G_VARIANT_TYPE ("u"), &pid, 1, sizeof (guint32)) - ); + ); properties = g_variant_builder_end (&builder); @@ -2082,13 +2114,13 @@ xdg_app_run_in_transient_unit (const char *appid, GError **error) data.job = job; data.main_loop = main_loop; - g_signal_connect (manager,"job-removed", G_CALLBACK (job_removed_cb), &data); + g_signal_connect (manager, "job-removed", G_CALLBACK (job_removed_cb), &data); g_main_loop_run (main_loop); res = TRUE; - out: +out: if (main_context) { g_main_context_pop_thread_default (main_context); @@ -2142,7 +2174,7 @@ add_default_permissions (XdgAppContext *app_context) static XdgAppContext * compute_permissions (GKeyFile *app_metadata, GKeyFile *runtime_metadata, - GError **error) + GError **error) { g_autoptr(XdgAppContext) app_context = NULL; @@ -2160,12 +2192,12 @@ compute_permissions (GKeyFile *app_metadata, } static gboolean -add_app_info_args (GPtrArray *argv_array, - XdgAppDeploy *deploy, - const char *app_id, - const char *runtime_ref, +add_app_info_args (GPtrArray *argv_array, + XdgAppDeploy *deploy, + const char *app_id, + const char *runtime_ref, XdgAppContext *final_app_context, - GError **error) + GError **error) { g_autofree char *tmp_path = NULL; int fd; @@ -2213,7 +2245,7 @@ add_app_info_args (GPtrArray *argv_array, static void add_monitor_path_args (GPtrArray *argv_array, - char ***envp_p) + char ***envp_p) { g_autoptr(AutoXdgAppSessionHelper) session_helper = NULL; g_autofree char *monitor_path = NULL; @@ -2238,7 +2270,7 @@ add_monitor_path_args (GPtrArray *argv_array, } else { - char localtime[PATH_MAX+1]; + char localtime[PATH_MAX + 1]; ssize_t symlink_size; add_args (argv_array, @@ -2254,14 +2286,16 @@ add_monitor_path_args (GPtrArray *argv_array, NULL); } else - add_args (argv_array, - "--bind", "/etc/localtime", "/etc/localtime", - NULL); + { + add_args (argv_array, + "--bind", "/etc/localtime", "/etc/localtime", + NULL); + } } } static void -add_document_portal_args (GPtrArray *argv_array, +add_document_portal_args (GPtrArray *argv_array, const char *app_id) { g_autoptr(GDBusConnection) session_bus = NULL; @@ -2270,9 +2304,9 @@ add_document_portal_args (GPtrArray *argv_array, session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); if (session_bus) { - g_autoptr (GError) local_error = NULL; - g_autoptr (GDBusMessage) reply = NULL; - g_autoptr (GDBusMessage) msg = + g_autoptr(GError) local_error = NULL; + g_autoptr(GDBusMessage) reply = NULL; + g_autoptr(GDBusMessage) msg = g_dbus_message_new_method_call ("org.freedesktop.portal.Documents", "/org/freedesktop/portal/documents", "org.freedesktop.portal.Documents", @@ -2288,7 +2322,9 @@ add_document_portal_args (GPtrArray *argv_array, if (reply) { if (g_dbus_message_to_gerror (reply, &local_error)) - g_warning ("Can't get document portal: %s\n", local_error->message); + { + g_warning ("Can't get document portal: %s\n", local_error->message); + } else { g_autofree char *src_path = NULL; @@ -2298,7 +2334,7 @@ add_document_portal_args (GPtrArray *argv_array, src_path = g_strdup_printf ("%s/by-app/%s", doc_mount_path, app_id); - dst_path = g_strdup_printf ("/run/user/%d/doc", getuid()); + dst_path = g_strdup_printf ("/run/user/%d/doc", getuid ()); add_args (argv_array, "--bind", src_path, dst_path, NULL); } } @@ -2309,6 +2345,7 @@ static void dbus_spawn_child_setup (gpointer user_data) { int fd = GPOINTER_TO_INT (user_data); + fcntl (fd, F_SETFD, 0); } @@ -2316,8 +2353,8 @@ static gboolean add_dbus_proxy_args (GPtrArray *argv_array, GPtrArray *dbus_proxy_argv, gboolean enable_logging, - int sync_fds[2], - GError **error) + int sync_fds[2], + GError **error) { char x = 'x'; const char *proxy; @@ -2351,7 +2388,7 @@ add_dbus_proxy_args (GPtrArray *argv_array, g_ptr_array_add (dbus_proxy_argv, NULL); /* NULL terminate */ if (!g_spawn_async (NULL, - (char **)dbus_proxy_argv->pdata, + (char **) dbus_proxy_argv->pdata, NULL, G_SPAWN_SEARCH_PATH, dbus_spawn_child_setup, @@ -2380,19 +2417,19 @@ add_dbus_proxy_args (GPtrArray *argv_array, static inline void cleanup_seccomp (void *p) { - scmp_filter_ctx *pp = (scmp_filter_ctx *)p; + scmp_filter_ctx *pp = (scmp_filter_ctx *) p; if (*pp) seccomp_release (*pp); } static gboolean -setup_seccomp (GPtrArray *argv_array, +setup_seccomp (GPtrArray *argv_array, const char *arch, - gboolean devel, - GError **error) + gboolean devel, + GError **error) { - __attribute__ ((cleanup(cleanup_seccomp))) scmp_filter_ctx seccomp = NULL; + __attribute__((cleanup (cleanup_seccomp))) scmp_filter_ctx seccomp = NULL; /**** BEGIN NOTE ON CODE SHARING * @@ -2423,47 +2460,49 @@ setup_seccomp (GPtrArray *argv_array, * **** END NOTE ON CODE SHARING */ - struct { - int scall; + struct + { + int scall; struct scmp_arg_cmp *arg; } syscall_blacklist[] = { /* Block dmesg */ - {SCMP_SYS(syslog)}, + {SCMP_SYS (syslog)}, /* Useless old syscall */ - {SCMP_SYS(uselib)}, + {SCMP_SYS (uselib)}, /* Don't allow you to switch to bsd emulation or whatnot */ - {SCMP_SYS(personality)}, + {SCMP_SYS (personality)}, /* Don't allow disabling accounting */ - {SCMP_SYS(acct)}, + {SCMP_SYS (acct)}, /* 16-bit code is unnecessary in the sandbox, and modify_ldt is a historic source of interesting information leaks. */ - {SCMP_SYS(modify_ldt)}, + {SCMP_SYS (modify_ldt)}, /* Don't allow reading current quota use */ - {SCMP_SYS(quotactl)}, + {SCMP_SYS (quotactl)}, /* Scary VM/NUMA ops */ - {SCMP_SYS(move_pages)}, - {SCMP_SYS(mbind)}, - {SCMP_SYS(get_mempolicy)}, - {SCMP_SYS(set_mempolicy)}, - {SCMP_SYS(migrate_pages)}, + {SCMP_SYS (move_pages)}, + {SCMP_SYS (mbind)}, + {SCMP_SYS (get_mempolicy)}, + {SCMP_SYS (set_mempolicy)}, + {SCMP_SYS (migrate_pages)}, /* Don't allow subnamespace setups: */ - {SCMP_SYS(unshare)}, - {SCMP_SYS(mount)}, - {SCMP_SYS(pivot_root)}, - {SCMP_SYS(clone), &SCMP_A0(SCMP_CMP_MASKED_EQ, CLONE_NEWUSER, CLONE_NEWUSER)}, + {SCMP_SYS (unshare)}, + {SCMP_SYS (mount)}, + {SCMP_SYS (pivot_root)}, + {SCMP_SYS (clone), &SCMP_A0 (SCMP_CMP_MASKED_EQ, CLONE_NEWUSER, CLONE_NEWUSER)}, }; - struct { - int scall; + struct + { + int scall; struct scmp_arg_cmp *arg; } syscall_nondevel_blacklist[] = { /* Profiling operations; we expect these to be done by tools from outside * the sandbox. In particular perf has been the source of many CVEs. */ - {SCMP_SYS(perf_event_open)}, - {SCMP_SYS(ptrace)} + {SCMP_SYS (perf_event_open)}, + {SCMP_SYS (ptrace)} }; /* Blacklist all but unix, inet, inet6 and netlink */ int socket_family_blacklist[] = { @@ -2539,9 +2578,9 @@ setup_seccomp (GPtrArray *argv_array, { int scall = syscall_blacklist[i].scall; if (syscall_blacklist[i].arg) - r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO(EPERM), scall, 1, *syscall_blacklist[i].arg); + r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO (EPERM), scall, 1, *syscall_blacklist[i].arg); else - r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO(EPERM), scall, 0); + r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO (EPERM), scall, 0); if (r < 0 && r == -EFAULT /* unknown syscall */) return xdg_app_fail (error, "Failed to block syscall %d", scall); } @@ -2552,9 +2591,9 @@ setup_seccomp (GPtrArray *argv_array, { int scall = syscall_nondevel_blacklist[i].scall; if (syscall_nondevel_blacklist[i].arg) - r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO(EPERM), scall, 1, *syscall_nondevel_blacklist[i].arg); + r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO (EPERM), scall, 1, *syscall_nondevel_blacklist[i].arg); else - r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO(EPERM), scall, 0); + r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO (EPERM), scall, 0); if (r < 0 && r == -EFAULT /* unknown syscall */) return xdg_app_fail (error, "Failed to block syscall %d", scall); @@ -2568,9 +2607,9 @@ setup_seccomp (GPtrArray *argv_array, { int family = socket_family_blacklist[i]; if (i == G_N_ELEMENTS (socket_family_blacklist) - 1) - r = seccomp_rule_add_exact (seccomp, SCMP_ACT_ERRNO(EAFNOSUPPORT), SCMP_SYS(socket), 1, SCMP_A0(SCMP_CMP_GE, family)); + r = seccomp_rule_add_exact (seccomp, SCMP_ACT_ERRNO (EAFNOSUPPORT), SCMP_SYS (socket), 1, SCMP_A0 (SCMP_CMP_GE, family)); else - r = seccomp_rule_add_exact (seccomp, SCMP_ACT_ERRNO(EAFNOSUPPORT), SCMP_SYS(socket), 1, SCMP_A0(SCMP_CMP_EQ, family)); + r = seccomp_rule_add_exact (seccomp, SCMP_ACT_ERRNO (EAFNOSUPPORT), SCMP_SYS (socket), 1, SCMP_A0 (SCMP_CMP_EQ, family)); } fd = g_file_open_tmp ("xdg-app-seccomp-XXXXXX", &path, error); @@ -2597,12 +2636,12 @@ setup_seccomp (GPtrArray *argv_array, #endif gboolean -xdg_app_run_setup_base_argv (GPtrArray *argv_array, - GFile *runtime_files, - GFile *app_id_dir, - const char *arch, +xdg_app_run_setup_base_argv (GPtrArray *argv_array, + GFile *runtime_files, + GFile *app_id_dir, + const char *arch, XdgAppRunFlags flags, - GError **error) + GError **error) { const char *usr_links[] = {"lib", "lib32", "lib64", "bin", "sbin"}; g_autofree char *run_dir = g_strdup_printf ("/run/user/%d", getuid ()); @@ -2614,6 +2653,7 @@ xdg_app_run_setup_base_argv (GPtrArray *argv_array, g_autofree char *group_fd_str = NULL; g_autofree char *group_contents = NULL; struct group *g = getgrgid (getgid ()); + g_autoptr(GFile) etc = NULL; passwd_contents = g_strdup_printf ("%s:x:%d:%d:%s:%s:%s\n" @@ -2629,9 +2669,9 @@ xdg_app_run_setup_base_argv (GPtrArray *argv_array, passwd_fd_str = g_strdup_printf ("%d", passwd_fd); group_contents = g_strdup_printf ("%s:x:%d:%s\n" - "nfsnobody:x:65534:\n", - g->gr_name, - getgid (), g_get_user_name ()); + "nfsnobody:x:65534:\n", + g->gr_name, + getgid (), g_get_user_name ()); if ((group_fd = create_tmp_fd (group_contents, -1, error)) < 0) return FALSE; group_fd_str = g_strdup_printf ("%d", group_fd); @@ -2669,7 +2709,7 @@ xdg_app_run_setup_base_argv (GPtrArray *argv_array, { g_auto(GLnxDirFdIterator) dfd_iter = { 0, }; struct dirent *dent; - char path_buffer[PATH_MAX+1]; + char path_buffer[PATH_MAX + 1]; ssize_t symlink_size; glnx_dirfd_iterator_init_at (AT_FDCWD, gs_file_get_path_cached (etc), FALSE, &dfd_iter, NULL); @@ -2703,7 +2743,9 @@ xdg_app_run_setup_base_argv (GPtrArray *argv_array, add_args (argv_array, "--symlink", path_buffer, dest, NULL); } else - add_args (argv_array, "--bind", src, dest, NULL); + { + add_args (argv_array, "--bind", src, dest, NULL); + } } } @@ -2721,7 +2763,7 @@ xdg_app_run_setup_base_argv (GPtrArray *argv_array, NULL); } - for (i = 0; i < G_N_ELEMENTS(usr_links); i++) + for (i = 0; i < G_N_ELEMENTS (usr_links); i++) { const char *subdir = usr_links[i]; g_autoptr(GFile) runtime_subdir = g_file_get_child (runtime_files, subdir); @@ -2747,7 +2789,7 @@ xdg_app_run_setup_base_argv (GPtrArray *argv_array, return TRUE; } -gchar* +gchar * join_args (GPtrArray *argv_array, gsize *len_out) { gchar *string; @@ -2769,17 +2811,17 @@ join_args (GPtrArray *argv_array, gsize *len_out) } gboolean -xdg_app_run_app (const char *app_ref, - XdgAppDeploy *app_deploy, +xdg_app_run_app (const char *app_ref, + XdgAppDeploy *app_deploy, XdgAppContext *extra_context, - const char *custom_runtime, - const char *custom_runtime_version, + const char *custom_runtime, + const char *custom_runtime_version, XdgAppRunFlags flags, - const char *custom_command, - char *args[], - int n_args, - GCancellable *cancellable, - GError **error) + const char *custom_command, + char *args[], + int n_args, + GCancellable *cancellable, + GError **error) { g_autoptr(XdgAppDeploy) runtime_deploy = NULL; g_autoptr(GFile) app_files = NULL; @@ -2875,7 +2917,7 @@ xdg_app_run_app (const char *app_ref, app_files = xdg_app_deploy_get_files (app_deploy); if ((app_id_dir = xdg_app_ensure_data_dir (app_ref_parts[1], cancellable, error)) == NULL) - return FALSE; + return FALSE; envp = g_get_environ (); envp = xdg_app_run_apply_env_default (envp); @@ -2942,7 +2984,9 @@ xdg_app_run_app (const char *app_ref, } if (custom_command) - command = custom_command; + { + command = custom_command; + } else { default_command = g_key_file_get_string (metakey, "Application", "command", &my_error); @@ -2984,7 +3028,7 @@ xdg_app_run_app (const char *app_ref, if ((flags & XDG_APP_RUN_FLAG_BACKGROUND) != 0) { if (!g_spawn_async (NULL, - (char **)real_argv_array->pdata, + (char **) real_argv_array->pdata, envp, G_SPAWN_DEFAULT, NULL, NULL, @@ -2994,7 +3038,7 @@ xdg_app_run_app (const char *app_ref, } else { - if (execvpe (xdg_app_get_bwrap (), (char **)real_argv_array->pdata, envp) == -1) + if (execvpe (xdg_app_get_bwrap (), (char **) real_argv_array->pdata, envp) == -1) { g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), "Unable to start app"); return FALSE; |