* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
return 0;
}
- gboolean
- is_cache_up_to_date (const gchar *path)
- {
+static gboolean
+is_cache_up_to_date (const gchar *path)
+{
gchar *cache_path;
gint retval;
}
}
+/**
+ * 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,
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);
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,
}
cache = NULL;
- g_list_foreach (directories, (GFunc)g_free, NULL);
- g_list_free (directories);
+ g_list_free_full (directories, g_free);
if (!validate_file (tmp_cache_path))
{
if (!force_update && is_cache_up_to_date (path))
return 0;
- g_type_init ();
+ replace_backslashes_with_slashes (path);
build_cache (path);
if (strcmp (var_name, "-") != 0)