meta->value = value ? strdup(value) : NULL;
}
+void uninit_lyric(lyric_t *lyric) {
+ if (!lyric)
+ return;
+
+ free(lyric->name);
+ free(lyric->text);
+}
+
song_t *nsub_read(FILE *in, NSUB_FORMAT fmt) {
song_t *song = NULL;
cstring_t *line = NULL;
char *lang;
} song_t;
-/* Song */
+/* Song & Lyric */
song_t *new_song();
void free_song(song_t *song);
void song_add_comment(song_t *song, char *comment);
void song_add_lyric(song_t *song, int start, int stop, char *name, char *text);
void song_add_meta(song_t *song, char *key, char *value);
+void uninit_lyric(lyric_t *lyric);
/* Read */
int start = lrc_millisec(line);
char *name = NULL;
- array_loop(song->lyrics, lyric, lyric_t)
{
+ lyric_t *lyric = array_last(song->lyrics);
if (lyric->type == NSUB_LYRIC)
lyric->stop = start;
if (lyric->type == NSUB_COMMENT)
name = NULL;
}
- int text_offset = end + 1;
+ int text_offset = end + 2;
while (line[text_offset] == ' ')
text_offset++;
if (line[text_offset]) {
if (name) {
+ lyric_t *tmp = array_pop(song->lyrics);
+ uninit_lyric(tmp);
song->current_num--;
- // TODO: memory leak?
- array_cut_at(song->lyrics, array_count(song->lyrics) - 1);
}
song_add_lyric(song, start, start + 5000, name, line + text_offset);
} else {