Fixed a changelog export/import problem with tagcache where <CR> or <LF>
characters in a tag could cause the parser fail to import a track
statistics correctly. Now line feeds are escaped properly and carriage
returns ignored on import.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30021 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/misc.c b/apps/misc.c
index 12aaf08..68775b3 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -184,15 +184,7 @@
         if (rc >= 0)
             buf[pos+rc] = '\0';
 
-        if ( (p = strchr(buf, '\r')) != NULL)
-        {
-            *p = '\0';
-            next = ++p;
-        }
-        else
-            p = buf;
-
-        if ( (p = strchr(p, '\n')) != NULL)
+        if ( (p = strchr(buf, '\n')) != NULL)
         {
             *p = '\0';
             next = ++p;
diff --git a/apps/tagcache.c b/apps/tagcache.c
index 6ad8f11..0c85fc5 100644
--- a/apps/tagcache.c
+++ b/apps/tagcache.c
@@ -3278,6 +3278,13 @@
         if (*datastr == '"' || *datastr == '\\')
             buf[i++] = '\\';
         
+        else if (*datastr == '\n')
+        {
+            buf[i++] = '\\';
+            buf[i] = 'n';
+            continue;
+        }
+        
         buf[i] = *(datastr++);
     }
     
@@ -3335,12 +3342,18 @@
             
             if (*src == '\\')
             {
-                dest[pos] = *(src+1);
-                src += 2;
+                src++;
+                if (*src == 'n')
+                    dest[pos] = '\n';
+                else
+                    dest[pos] = *src;
+                
+                src++;
                 continue;
             }
             
-            dest[pos] = *src;
+            if (*src == '\0')
+                break;
             
             if (*src == '"')
             {
@@ -3348,10 +3361,7 @@
                 break;
             }
             
-            if (*src == '\0')
-                break;
-            
-            src++;
+            dest[pos] = *(src++);
         }
         
         dest[pos] = '\0';
@@ -3377,10 +3387,10 @@
     if (*buf == '#')
         return 0;
     
-    logf("%d/%s", line_n, buf);
+    /* logf("%d/%s", line_n, buf); */
     if (!read_tag(tag_data, sizeof tag_data, buf, "filename"))
     {
-        logf("filename missing");
+        logf("%d/filename missing", line_n);
         logf("-> %s", buf);
         return 0;
     }
@@ -3388,13 +3398,13 @@
     idx_id = find_index(tag_data);
     if (idx_id < 0)
     {
-        logf("entry not found");
+        logf("%d/entry not found", line_n);
         return 0;
     }
     
     if (!get_index(masterfd, idx_id, &idx, false))
     {
-        logf("failed to retrieve index entry");
+        logf("%d/failed to retrieve index entry", line_n);
         return 0;
     }
     
@@ -3402,7 +3412,7 @@
     if (idx.flag & FLAG_DIRTYNUM)
         return 0;
     
-    logf("import: %s", tag_data);
+    logf("%d/import: %s", line_n, tag_data);
     
     idx.flag |= FLAG_DIRTYNUM;
     for (i = 0; i < (long)(sizeof(import_tags)/sizeof(import_tags[0])); i++)