diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/cuesheet.c | 22 |
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; |