From d98eed087d62a4633a2fe3c4fb4fa55b67d48d82 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 13 Jun 2012 17:33:01 +0200 Subject: [PATCH] glib-compile-resources: Forward errors from spawned processes We just grab stderr from gdk-pixbuf-to-csource and xmllint and include it in the error message. It's the best we can do. --- gio/glib-compile-resources.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/gio/glib-compile-resources.c b/gio/glib-compile-resources.c index 31e56241b..a18656399 100644 --- a/gio/glib-compile-resources.c +++ b/gio/glib-compile-resources.c @@ -272,6 +272,7 @@ end_element (GMarkupParseContext *context, if (state->preproc_options) { gchar **options; + gchar *stderr_child = NULL; guint i; gboolean xml_stripblanks = FALSE; gboolean to_pixdata = FALSE; @@ -324,9 +325,8 @@ end_element (GMarkupParseContext *context, g_assert (argc <= G_N_ELEMENTS (argv)); if (!g_spawn_sync (NULL /* cwd */, argv, NULL /* envv */, - G_SPAWN_STDOUT_TO_DEV_NULL | - G_SPAWN_STDERR_TO_DEV_NULL, - NULL, NULL, NULL, NULL, &status, &my_error)) + G_SPAWN_STDOUT_TO_DEV_NULL, + NULL, NULL, NULL, &stderr_child, &status, &my_error)) { g_propagate_error (error, my_error); goto cleanup; @@ -334,12 +334,13 @@ end_element (GMarkupParseContext *context, #ifdef HAVE_SYS_WAIT_H if (!WIFEXITED (status) || WEXITSTATUS (status) != 0) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, - _("Error processing input file with xmllint")); + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, + _("Error processing input file with xmllint:\n%s"), stderr_child); goto cleanup; } #endif + g_free (stderr_child); g_free (real_file); real_file = g_strdup (tmp_file); } @@ -347,6 +348,7 @@ end_element (GMarkupParseContext *context, if (to_pixdata) { gchar *argv[4]; + gchar *stderr_child = NULL; int status, fd, argc; if (gdk_pixbuf_pixdata == NULL) @@ -379,9 +381,8 @@ end_element (GMarkupParseContext *context, g_assert (argc <= G_N_ELEMENTS (argv)); if (!g_spawn_sync (NULL /* cwd */, argv, NULL /* envv */, - G_SPAWN_STDOUT_TO_DEV_NULL | - G_SPAWN_STDERR_TO_DEV_NULL, - NULL, NULL, NULL, NULL, &status, &my_error)) + G_SPAWN_STDOUT_TO_DEV_NULL, + NULL, NULL, NULL, &stderr_child, &status, &my_error)) { g_propagate_error (error, my_error); goto cleanup; @@ -389,12 +390,13 @@ end_element (GMarkupParseContext *context, #ifdef HAVE_SYS_WAIT_H if (!WIFEXITED (status) || WEXITSTATUS (status) != 0) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, - _("Error processing input file with to-pixdata")); + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, + _("Error processing input file with to-pixdata:\n%s"), stderr_child); goto cleanup; } #endif + g_free (stderr_child); g_free (real_file); real_file = g_strdup (tmp_file2); }