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