1From b511bd1efb43ffc49c753e309717a242ec686ef1 Mon Sep 17 00:00:00 2001 2From: Ross Burton <ross.burton@intel.com> 3Date: Tue, 1 Apr 2014 17:23:36 +0100 4Subject: [PATCH] gdk-pixbuf: add an option so that loader errors are fatal 5 6If an environment variable is specified set the return value from main() to 7non-zero if the loader had errors (missing libraries, generally). 8 9Upstream-Status: Pending 10Signed-off-by: Ross Burton <ross.burton@intel.com> 11 12--- 13 gdk-pixbuf/queryloaders.c | 19 +++++++++++++++---- 14 1 file changed, 15 insertions(+), 4 deletions(-) 15 16diff --git a/gdk-pixbuf/queryloaders.c b/gdk-pixbuf/queryloaders.c 17index 1d39b44..2b00815 100644 18--- a/gdk-pixbuf/queryloaders.c 19+++ b/gdk-pixbuf/queryloaders.c 20@@ -216,7 +216,7 @@ write_loader_info (GString *contents, const char *path, GdkPixbufFormat *info) 21 g_string_append_c (contents, '\n'); 22 } 23 24-static void 25+static gboolean 26 query_module (GString *contents, const char *dir, const char *file) 27 { 28 char *path; 29@@ -225,6 +225,7 @@ query_module (GString *contents, const char *dir, const char *file) 30 void (*fill_vtable) (GdkPixbufModule *module); 31 gpointer fill_info_ptr; 32 gpointer fill_vtable_ptr; 33+ gboolean ret = TRUE; 34 35 if (g_path_is_absolute (file)) 36 path = g_strdup (file); 37@@ -274,10 +275,13 @@ query_module (GString *contents, const char *dir, const char *file) 38 g_module_error()); 39 else 40 g_fprintf (stderr, "Cannot load loader %s\n", path); 41+ ret = FALSE; 42 } 43 if (module) 44 g_module_close (module); 45 g_free (path); 46+ 47+ return ret; 48 } 49 50 #if defined(G_OS_WIN32) && defined(GDK_PIXBUF_RELOCATABLE) 51@@ -318,6 +322,7 @@ int main (int argc, char **argv) 52 gint first_file = 1; 53 GFile *pixbuf_libdir_file; 54 gchar *pixbuf_libdir; 55+ gboolean success = TRUE; 56 57 #ifdef G_OS_WIN32 58 gchar *libdir; 59@@ -456,7 +461,9 @@ int main (int argc, char **argv) 60 } 61 modules = g_list_sort (modules, (GCompareFunc)strcmp); 62 for (l = modules; l != NULL; l = l->next) 63- query_module (contents, moduledir, l->data); 64+ if (!query_module (contents, moduledir, l->data)) 65+ success = FALSE; 66+ 67 g_list_free_full (modules, g_free); 68 g_free (moduledir); 69 #else 70@@ -472,7 +479,8 @@ int main (int argc, char **argv) 71 infilename = g_locale_to_utf8 (infilename, 72 -1, NULL, NULL, NULL); 73 #endif 74- query_module (contents, cwd, infilename); 75+ if (!query_module (contents, cwd, infilename)) 76+ success = FALSE; 77 } 78 g_free (cwd); 79 } 80@@ -490,5 +498,8 @@ int main (int argc, char **argv) 81 82 g_free (pixbuf_libdir); 83 84- return 0; 85+ if (g_getenv ("GDK_PIXBUF_FATAL_LOADER")) 86+ return success ? 0 : 1; 87+ else 88+ return 0; 89 } 90