because filesystem readdir order is indeterministic.
Without this patch, building openSUSE's balsa package
had variations between builds in /usr/share/balsa/icon-theme.cache
(cherry picked from commit b364827a5b)
Signed-off-by: Emmanuele Bassi <ebassi@gnome.org>
n_attach_points is the result of g_strv_length(): the index at which the
string vector ends in NULL. So by definition, when i == n_attach_points,
string[i] == NULL, and there is no need to check for the latter. The
fact that we did appears to confuse static analysers, as the dereference
and index check were inverted from what would normally be safe. We could
reverse them, but we may as well just remove the unnecessary NULL check.
https://bugzilla.gnome.org/show_bug.cgi?id=788458
Since large images are in the icon cache, and apps don't tend to use that
many icons anymore, simply don't include image data and instead make apps
load files from disk. Additionally, since they're stored in GdkPixbuf data,
that means that we have to first convert them either to a cairo_surface_t,
which requires converting pixel data to be premulitplied, or an OpenGL
texture, which requires a whole GPU upload anyway.
So, even with the icon cache, the goal of icons through zero-copy, mmap()'d
data from disk just isn't doable with the icon cache format we have. The
icon cache on my disk is nearing 100MB, since we include a bunch of
high-resolution application icons, that I doubt would be used by apps at all.
Removing this inefficient pixel data makes memory usage for all applications
go down, with no speed loss.
The icon cache also, however, has an index of what icons are in each folder,
which prevents a readdir() and allows GTK+ to know what icon is where without
having to do a bunch of stat(); calls. Keeping this data is good for GTK+,
so we should still keep the index.
It doesn't make sense to remove any code for mapping pixel data from the icon
cache. There's a plan in the works to have a symbolic icon cache that does
pixel math on 16x16 icons to prevent slow SVG rendering. 16x16 pixels are
fairly small, and such images are flat colors, which should compress easily,
so the icon cache would be worthwhile here. So let's keep the code around
in preparation for that case.
https://bugzilla.gnome.org/show_bug.cgi?id=721895
Also remove the starting underscore from function names where
appropriate, as those functions are static now and not exported anymore.
This is part of a bunch of fixes for gcc complaining about
-Wmissing-declarations.
Thanks to Kean Johnston for pointing this out.
There are a few places in GTK that use "struct stat",
and then g_stat(), rather than using GStatBuf.This breaks things on
Windows. Since the size of struct stat can vary depending on other
flags specified, this has the potential to cause overwrites and is
trivial to fix.
Based on patch submitted by Kean Johnston
2008-08-05 Tor Lillqvist <tml@novell.com>
* gtk/updateiconcache.c (write_bucket): Enclose ?: expression
with parens so cast covers all of it.
svn path=/trunk/; revision=20996
2008-05-29 Tor Lillqvist <tml@novell.com>
Bug 535526 - updateiconcache.c: using open/close without prototype
* gtk/updateiconcache.c: Include <io.h> if _MSC_VER. Also, use
g_utime() instead of utime() for UTF-8 pathname support on Windows
when available.
svn path=/trunk/; revision=20238
2008-05-27 Tor Lillqvist <tml@novell.com>
* gtk/updateiconcache.c (build_cache): Use simpler mode for open()
on Windows. (No S_I?GRP and S_I?OTH bits are defined in
<sys/stat.h> on Windows, and the mode used in open() doesn't
matter much as there are no rwxrwxrwx bits on Windows anyway.)
Open file in binary mode. Passing "b" to fdopen() later isn't
enough.
svn path=/trunk/; revision=20190
2008-05-25 Cody Russell <bratsche@gnome.org>
Bug 523562 - gtk-update-icon-cache core dumps when run concurrently and
when options are missing
* gtk/updateiconcache.c: Open the cache file (O_CREAT | O_EXCL) so
that other processes that try to open it will fail gracefully. Also
fix a crasher caused by lack of a NULL check. Report and patch
by Erwann Chenede.
svn path=/trunk/; revision=20167
2008-02-05 Matthias Clasen <mclasen@redhat.com>
* gtk/updateiconcache.c: Ignore images in the toplevel theme
directory, avoiding one source of invalid caches that has been
spotted in the wild.
svn path=/trunk/; revision=19466
2008-02-05 Matthias Clasen <mclasen@redhat.com>
* gtk/updateiconcache.c: Install a printerr handler that
prepends the program name, since gtk-update-icon-cache output
often appears in the middle of other output, e.g. rpm update logs.
svn path=/trunk/; revision=19464
2008-01-30 Michael Natterer <mitch@imendio.com>
* gtk/gtkbuilderparser.c (parse_custom): use the right type for
"subparser_data" and remove the (gpointer*) cast. Fixes bogus
aliasing warning.
* gtk/updateiconcache.c (add_string): cast const gchar* to
gpointer when inserting in a GHashTable.
* tests/testcalendar.c (calendar_detail_cb): remove const from
return value since it's a newly allocated string.
(calendar_update_details): free the detail.
svn path=/trunk/; revision=19431
2007-09-07 Matthias Clasen <mclasen@redhat.com>
* gtk/updateiconcache.c (get_image_meta_data_size): Don't
use image->attach_points where image->n_attach_points was meant.
Pointed out by Albert Chin.
svn path=/trunk/; revision=18756
2007-05-01 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkiconcachvalidator.[hc]: Add an icon cache validator.
* gtk/updateiconcache.c: Validate the generated cache before
moving it in place. Also add a --validate option to validate
an existing icon cache.
* gtk/gtkiconcache.c: Validate icon caches before using them.
* gtk/Makefile.am: Integrate it.
svn path=/trunk/; revision=17753
2007-01-26 Matthias Clasen <mclasen@redhat.com>
* gtk/updateiconcache.c: Check the mtime of all directories,
not just the toplevel, if ftw() is available. (#331671, Behdad
Esfahbod)
* configure.in: Check for ftw.h.
svn path=/trunk/; revision=17221
2005-11-23 Matthias Clasen <mclasen@redhat.com>
* gtk/updateiconcache.c (write_csource): Don't create a big
string, since Visual C++ doesn't like strings longer than 64k.
(#322238, Kazuki IWAMOTO
2005-11-06 Tor Lillqvist <tml@novell.com>
* gtk/updateiconcache.c (build_cache): Can't rename a file if the
target exists on Win32. First rename the target temporarily, then
if the renaming of the source to target fails, restore the
original name for the target.
* gtk/Makefile.am: Use EXEEXT in the dependency on gtk-update-icon-cache.