From a4b7afcdedb7e35f98d3fedb5f00d8b3eb059ed9 Mon Sep 17 00:00:00 2001 From: Simon McVittie <smcv@collabora.com> Date: Fri, 6 Sep 2019 19:47:18 +0100 Subject: [PATCH] pv_bwrap_run_sync: Output the exit status Signed-off-by: Simon McVittie <smcv@collabora.com> --- src/bwrap.c | 12 ++++++++++++ src/bwrap.h | 1 + src/wrap.c | 10 +++++----- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/bwrap.c b/src/bwrap.c index 0bdbfa5d9..157afd2ad 100644 --- a/src/bwrap.c +++ b/src/bwrap.c @@ -29,6 +29,8 @@ /** * pv_bwrap_run_sync: * @bwrap: A #FlatpakBwrap on which flatpak_bwrap_finish() has been called + * @exit_status_out: (out) (optional): Used to return the exit status, + * or -1 if it could not be launched or was killed by a signal * @error: Used to raise an error on failure * * Try to run a command. Its standard output and standard error go to @@ -38,6 +40,7 @@ */ gboolean pv_bwrap_run_sync (FlatpakBwrap *bwrap, + int *exit_status_out, GError **error) { gint exit_status; @@ -53,6 +56,9 @@ pv_bwrap_run_sync (FlatpakBwrap *bwrap, g_return_val_if_fail (pv_bwrap_was_finished (bwrap), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + if (exit_status_out != NULL) + *exit_status_out = -1; + for (i = 0; i < bwrap->argv->len; i++) { g_autofree gchar *quoted = NULL; @@ -87,6 +93,12 @@ pv_bwrap_run_sync (FlatpakBwrap *bwrap, g_print ("%s", output); g_printerr ("%s", errors); + if (exit_status_out != NULL) + { + if (WIFEXITED (exit_status)) + *exit_status_out = WEXITSTATUS (exit_status); + } + if (!g_spawn_check_exit_status (exit_status, error)) return FALSE; diff --git a/src/bwrap.h b/src/bwrap.h index a374a004e..34b5f281d 100644 --- a/src/bwrap.h +++ b/src/bwrap.h @@ -28,6 +28,7 @@ #include "glib-backports.h" gboolean pv_bwrap_run_sync (FlatpakBwrap *bwrap, + int *exit_status_out, GError **error); gboolean pv_bwrap_execve (FlatpakBwrap *bwrap, GError **error); diff --git a/src/wrap.c b/src/wrap.c index 23ee4dc33..ab1da9b6a 100644 --- a/src/wrap.c +++ b/src/wrap.c @@ -272,7 +272,7 @@ try_bind_dri (FlatpakBwrap *bwrap, NULL); flatpak_bwrap_finish (temp_bwrap); - if (!pv_bwrap_run_sync (temp_bwrap, error)) + if (!pv_bwrap_run_sync (temp_bwrap, NULL, error)) return FALSE; g_clear_pointer (&temp_bwrap, flatpak_bwrap_free); @@ -294,7 +294,7 @@ try_bind_dri (FlatpakBwrap *bwrap, NULL); flatpak_bwrap_finish (temp_bwrap); - if (!pv_bwrap_run_sync (temp_bwrap, error)) + if (!pv_bwrap_run_sync (temp_bwrap, NULL, error)) return FALSE; } @@ -316,7 +316,7 @@ try_bind_dri (FlatpakBwrap *bwrap, NULL); flatpak_bwrap_finish (temp_bwrap); - if (!pv_bwrap_run_sync (temp_bwrap, error)) + if (!pv_bwrap_run_sync (temp_bwrap, NULL, error)) return FALSE; } @@ -600,7 +600,7 @@ bind_runtime (FlatpakBwrap *bwrap, NULL); flatpak_bwrap_finish (temp_bwrap); - if (!pv_bwrap_run_sync (temp_bwrap, error)) + if (!pv_bwrap_run_sync (temp_bwrap, NULL, error)) return FALSE; g_clear_pointer (&temp_bwrap, flatpak_bwrap_free); @@ -655,7 +655,7 @@ bind_runtime (FlatpakBwrap *bwrap, NULL); flatpak_bwrap_finish (temp_bwrap); - if (!pv_bwrap_run_sync (temp_bwrap, NULL, NULL, error)) + if (!pv_bwrap_run_sync (temp_bwrap, NULL, error)) return FALSE; g_clear_pointer (&temp_bwrap, flatpak_bwrap_free); -- GitLab