Description: upstream change to speed up itdb_resolve_path calls
Author: Sebastien Bacher <seb128@ubuntu.com>
Index: libgpod/src/itdb_itunesdb.c
===================================================================
--- libgpod.orig/src/itdb_itunesdb.c	2011-08-12 17:55:40.000000000 +0800
+++ libgpod/src/itdb_itunesdb.c	2011-08-12 19:02:03.910599671 +0800
@@ -420,80 +420,18 @@
 gchar * itdb_resolve_path (const gchar *root,
 			   const gchar * const * components)
 {
-  gchar *good_path = g_strdup(root);
-  guint32 i;
+  gchar *absolute_path;
+  gchar *rel_path;
 
   if (!root) return NULL;
-
-  for(i = 0 ; components[i] ; i++) {
-    GDir *cur_dir;
-    gchar *component_as_filename;
-    gchar *test_path;
-    gchar *component_stdcase;
-    const gchar *dir_file=NULL;
-
-    /* skip empty components */
-    if (strlen (components[i]) == 0) continue;
-    component_as_filename = 
-      g_filename_from_utf8(components[i],-1,NULL,NULL,NULL);
-    test_path = g_build_filename(good_path,component_as_filename,NULL);
-    g_free(component_as_filename);
-    if(g_file_test(test_path,G_FILE_TEST_EXISTS)) {
-      /* This component does not require fixup */
-      g_free(good_path);
-      good_path = test_path;
-      continue;
-    }
-    g_free(test_path);
-    component_stdcase = g_utf8_casefold(components[i],-1);
-    /* Case insensitively compare the current component with each entry
-     * in the current directory. */
-
-    cur_dir = g_dir_open(good_path,0,NULL);
-    if (cur_dir) while ((dir_file = g_dir_read_name(cur_dir)))
-    {
-	gchar *file_utf8;
-	gchar *file_stdcase;
-	gboolean found;
-	gchar *new_good_path;
-      
-	file_utf8 = g_filename_to_utf8(dir_file,-1,NULL,NULL,NULL);
-	if (file_utf8 == NULL) {
-	    continue;
-	}
-	file_stdcase = g_utf8_casefold(file_utf8,-1);
-	g_free(file_utf8);
-	found = !g_utf8_collate(file_stdcase,component_stdcase);
-	g_free(file_stdcase);
-	if(!found)
-	{
-	    /* This is not the matching entry */
-	    continue;
-	}
-      
-	new_good_path = g_build_filename(good_path,dir_file,NULL);
-	g_free(good_path);
-	good_path= new_good_path;
-	/* This is the matching entry, so we can stop searching */
-	break;
-    }
-    
-    if(!dir_file) {
-      /* We never found a matching entry */
-      g_free(good_path);
-      good_path = NULL;
-    }
-
-    g_free(component_stdcase);
-    if (cur_dir) g_dir_close(cur_dir);
-    if(!good_path || !g_file_test(good_path,G_FILE_TEST_EXISTS))
-      break; /* We couldn't fix this component, so don't try later ones */
+  rel_path = g_build_filenamev ((gchar **)components);
+  absolute_path = g_build_filename (root, rel_path, NULL);
+  g_free (rel_path);
+  if (g_file_test (absolute_path, G_FILE_TEST_EXISTS)) {
+    return absolute_path;
   }
-    
-  if(good_path && g_file_test(good_path,G_FILE_TEST_EXISTS))
-    return good_path;
+  g_free (absolute_path);
 
-  g_free (good_path);
   return NULL;
 }
 
