From d9f87ff0980a6b1ef03ef39dcfeeaec927ec1ecc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?= =?UTF-8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Thu, 21 Feb 2013 22:25:21 +0400 Subject: [PATCH] Make sure icon cache has /-separated subdirs only (v2 - use g_build_path) https://bugzilla.gnome.org/show_bug.cgi?id=692955 (cherry picked from commit 8e80fd1ab9eb3c6389b0582eab21b637141e7f92) Conflicts: gtk/updateiconcache.c --- gtk/updateiconcache.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/gtk/updateiconcache.c b/gtk/updateiconcache.c index 9bced427f8..cc6d5f1aaa 100644 --- a/gtk/updateiconcache.c +++ b/gtk/updateiconcache.c @@ -576,6 +576,23 @@ maybe_cache_icon_data (Image *image, } } +/** + * Finds all dir separators and replaces them with '/'. + * This makes sure that only /-separated paths are written in cache files, + * maintaining compatibility with theme index files that use slashes as + * directory separators on all platforms. + */ +static void +replace_backslashes_with_slashes (gchar *path) +{ + size_t i; + if (path == NULL) + return; + for (i = 0; path[i]; i++) + if (G_IS_DIR_SEPARATOR (path[i])) + path[i] = '/'; +} + static GList * scan_directory (const gchar *base_path, const gchar *subdir, @@ -590,7 +607,7 @@ scan_directory (const gchar *base_path, gboolean dir_added = FALSE; guint dir_index = 0xffff; - dir_path = g_build_filename (base_path, subdir, NULL); + dir_path = g_build_path ("/", base_path, subdir, NULL); /* FIXME: Use the gerror */ dir = g_dir_open (dir_path, 0, NULL); @@ -609,13 +626,14 @@ scan_directory (const gchar *base_path, gchar *basename, *dot; path = g_build_filename (dir_path, name, NULL); + retval = g_file_test (path, G_FILE_TEST_IS_DIR); if (retval) { gchar *subsubdir; if (subdir) - subsubdir = g_build_filename (subdir, name, NULL); + subsubdir = g_build_path ("/", subdir, name, NULL); else subsubdir = g_strdup (name); directories = scan_directory (base_path, subsubdir, files, @@ -1744,6 +1762,7 @@ main (int argc, char **argv) return 0; g_type_init (); + replace_backslashes_with_slashes (path); build_cache (path); if (strcmp (var_name, "-") != 0)