about summary refs log tree commit diff stats
path: root/src/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common.c')
-rw-r--r--src/common.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/common.c b/src/common.c
index be010d8d..b2496087 100644
--- a/src/common.c
+++ b/src/common.c
@@ -445,15 +445,16 @@ get_mentions(gboolean whole_word, gboolean case_sensitive, const char* const mes
 gboolean
 call_external(gchar** argv, gchar** std_out, gchar** std_err)
 {
+    GError *spawn_error, *status_error;
+    gboolean spawn_result;
+    gint exit_status;
+
     GSpawnFlags flags = G_SPAWN_SEARCH_PATH;
     if (std_out == NULL)
         flags |= G_SPAWN_STDOUT_TO_DEV_NULL;
     if (std_err == NULL)
         flags |= G_SPAWN_STDERR_TO_DEV_NULL;
 
-    gint exit_status;
-    gboolean spawn_result;
-    GError* spawn_error;
     spawn_result = g_spawn_sync(NULL, // Inherit the parent PWD.
                                 argv,
                                 NULL, // Inherit the parent environment.
@@ -462,12 +463,19 @@ call_external(gchar** argv, gchar** std_out, gchar** std_err)
                                 std_out, std_err,
                                 &exit_status, &spawn_error);
 
-    if (!spawn_result
-        || !g_spawn_check_exit_status(exit_status, &spawn_error)) {
+    if (!spawn_result || !g_spawn_check_exit_status(exit_status, &status_error)) {
         gchar* cmd = g_strjoinv(" ", argv);
-        log_error("Spawning '%s' failed with '%s'.", cmd, (spawn_error && spawn_error->message) ? spawn_error->message : "No error given");
+        if (spawn_error && spawn_error->message) {
+            log_error("Spawning '%s' failed with '%s'.", cmd, spawn_error->message);
+            g_error_free(spawn_error);
+        } else if (status_error && status_error->message) {
+            log_error("Spawning '%s' failed with '%s'.", cmd, status_error->message);
+            g_error_free(status_error);
+            spawn_result = FALSE;
+        } else {
+            log_error("Spawning '%s' failed with.", cmd);
+        }
         g_free(cmd);
-        g_error_free(spawn_error);
     }
 
     return spawn_result;