xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/fatal-loader.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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