summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2009-01-26 11:24:11 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2009-01-26 11:24:11 +0000
commit3c1dbb269f0ca1872bc61ecfffd88a54fb0de5d9 (patch)
tree5d09bad7518869e77fc69737bdabc075077aca8f
parent29565c40f70d8aec52714f17551ecb1e4d166801 (diff)
downloadrockbox-3c1dbb269f0ca1872bc61ecfffd88a54fb0de5d9.tar.gz
rockbox-3c1dbb269f0ca1872bc61ecfffd88a54fb0de5d9.zip
Fix FS#9830 - utf8 encoded .cue files dont get displayed properly
Also fix a possible problem where the performer and songwriter tags could get cut off git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19858 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/cuesheet.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/apps/cuesheet.c b/apps/cuesheet.c
index 9788427a07..4b3f5e9bc4 100644
--- a/apps/cuesheet.c
+++ b/apps/cuesheet.c
@@ -145,6 +145,7 @@ bool parse_cuesheet(char *file, struct cuesheet *cue)
145{ 145{
146 char line[MAX_PATH]; 146 char line[MAX_PATH];
147 char *s; 147 char *s;
148 bool utf8 = false;
148 149
149 DEBUGF("cue parse\n"); 150 DEBUGF("cue parse\n");
150 int fd = open_utf8(file,O_RDONLY); 151 int fd = open_utf8(file,O_RDONLY);
@@ -153,6 +154,8 @@ bool parse_cuesheet(char *file, struct cuesheet *cue)
153 /* couln't open the file */ 154 /* couln't open the file */
154 return false; 155 return false;
155 } 156 }
157 if(lseek(fd, 0, SEEK_CUR) > 0)
158 utf8 = true;
156 159
157 /* Initialization */ 160 /* Initialization */
158 memset(cue, 0, sizeof(struct cuesheet)); 161 memset(cue, 0, sizeof(struct cuesheet));
@@ -206,9 +209,18 @@ bool parse_cuesheet(char *file, struct cuesheet *cue)
206 break; 209 break;
207 } 210 }
208 211
209 if (dest) { 212 if (dest)
210 dest = iso_decode(string, dest, -1, MIN(strlen(string), MAX_NAME)); 213 {
211 *dest = '\0'; 214 if (!utf8)
215 {
216 dest = iso_decode(string, dest, -1, MIN(strlen(string), MAX_NAME));
217 *dest = '\0';
218 }
219 else
220 {
221 strncpy(dest, string, MAX_NAME*3);
222 dest[MAX_NAME*3] = '\0';
223 }
212 } 224 }
213 } 225 }
214 } 226 }
@@ -219,10 +231,10 @@ bool parse_cuesheet(char *file, struct cuesheet *cue)
219 for (i = 0; i < cue->track_count; i++) 231 for (i = 0; i < cue->track_count; i++)
220 { 232 {
221 if (*(cue->tracks[i].performer) == '\0') 233 if (*(cue->tracks[i].performer) == '\0')
222 strncpy(cue->tracks[i].performer, cue->performer, MAX_NAME); 234 strncpy(cue->tracks[i].performer, cue->performer, MAX_NAME*3);
223 235
224 if (*(cue->tracks[i].songwriter) == '\0') 236 if (*(cue->tracks[i].songwriter) == '\0')
225 strncpy(cue->tracks[i].songwriter, cue->songwriter, MAX_NAME); 237 strncpy(cue->tracks[i].songwriter, cue->songwriter, MAX_NAME*3);
226 } 238 }
227 239
228 return true; 240 return true;