diff options
author | Chris Lamb <lamby@debian.org> | 2017-08-29 16:59:56 +0100 |
---|---|---|
committer | Philip Withnall <withnall@endlessm.com> | 2017-09-08 15:20:27 +0100 |
commit | e5eaca5492d3e08d7d955e475cb4607a2d0fff61 (patch) | |
tree | c8c7d7e17faf9d7499f86a6269f0121f9e41ad32 /gio/gio-querymodules.c | |
parent | 2204034b9ff1925a60bafd369217bcccda2300d7 (diff) | |
download | glib-e5eaca5492d3e08d7d955e475cb4607a2d0fff61.tar.gz |
gio-querymodules: Make the output reproducible
Whilst working on the Reproducible Builds effort [0], we noticed that
queryimmodules generates non-reproducible output as it iterates over the
filesystem without sorting.
Patch attached.
[0] https://reproducible-builds.org/
Signed-off-by: Chris Lamb <lamby@debian.org>
https://bugzilla.gnome.org/show_bug.cgi?id=786983
Diffstat (limited to 'gio/gio-querymodules.c')
-rw-r--r-- | gio/gio-querymodules.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gio/gio-querymodules.c b/gio/gio-querymodules.c index 667336a66..7abfe07fb 100644 --- a/gio/gio-querymodules.c +++ b/gio/gio-querymodules.c @@ -42,6 +42,7 @@ query_dir (const char *dirname) { GString *data; GDir *dir; + GList *list = NULL, *iterator = NULL; const char *name; char *cachename; char **(* query) (void); @@ -63,11 +64,16 @@ query_dir (const char *dirname) data = g_string_new (""); while ((name = g_dir_read_name (dir))) + list = g_list_prepend (list, g_strdup (name)); + + list = g_list_sort (list, (GCompareFunc) g_strcmp0); + for (iterator = list; iterator; iterator = iterator->next) { GModule *module; gchar *path; char **extension_points; + name = iterator->data; if (!is_valid_module_name (name)) continue; @@ -100,6 +106,7 @@ query_dir (const char *dirname) } g_dir_close (dir); + g_list_free_full (list, g_free); cachename = g_build_filename (dirname, "giomodule.cache", NULL); |