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
This commit is contained in:
Jonathan Gordon 2009-01-26 11:24:11 +00:00
parent 29565c40f7
commit 3c1dbb269f

View file

@ -145,6 +145,7 @@ bool parse_cuesheet(char *file, struct cuesheet *cue)
{ {
char line[MAX_PATH]; char line[MAX_PATH];
char *s; char *s;
bool utf8 = false;
DEBUGF("cue parse\n"); DEBUGF("cue parse\n");
int fd = open_utf8(file,O_RDONLY); int fd = open_utf8(file,O_RDONLY);
@ -153,6 +154,8 @@ bool parse_cuesheet(char *file, struct cuesheet *cue)
/* couln't open the file */ /* couln't open the file */
return false; return false;
} }
if(lseek(fd, 0, SEEK_CUR) > 0)
utf8 = true;
/* Initialization */ /* Initialization */
memset(cue, 0, sizeof(struct cuesheet)); memset(cue, 0, sizeof(struct cuesheet));
@ -206,9 +209,18 @@ bool parse_cuesheet(char *file, struct cuesheet *cue)
break; break;
} }
if (dest) { if (dest)
dest = iso_decode(string, dest, -1, MIN(strlen(string), MAX_NAME)); {
*dest = '\0'; if (!utf8)
{
dest = iso_decode(string, dest, -1, MIN(strlen(string), MAX_NAME));
*dest = '\0';
}
else
{
strncpy(dest, string, MAX_NAME*3);
dest[MAX_NAME*3] = '\0';
}
} }
} }
} }
@ -219,10 +231,10 @@ bool parse_cuesheet(char *file, struct cuesheet *cue)
for (i = 0; i < cue->track_count; i++) for (i = 0; i < cue->track_count; i++)
{ {
if (*(cue->tracks[i].performer) == '\0') if (*(cue->tracks[i].performer) == '\0')
strncpy(cue->tracks[i].performer, cue->performer, MAX_NAME); strncpy(cue->tracks[i].performer, cue->performer, MAX_NAME*3);
if (*(cue->tracks[i].songwriter) == '\0') if (*(cue->tracks[i].songwriter) == '\0')
strncpy(cue->tracks[i].songwriter, cue->songwriter, MAX_NAME); strncpy(cue->tracks[i].songwriter, cue->songwriter, MAX_NAME*3);
} }
return true; return true;