[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Libcdio-devel] [PATCH] fix incorrect parsing of CD-Text with short fiel
From: |
Leon Merten Lohse |
Subject: |
[Libcdio-devel] [PATCH] fix incorrect parsing of CD-Text with short fields |
Date: |
Thu, 31 Mar 2016 19:08:27 +0200 |
---
lib/driver/cdtext.c | 28 ++++++++++++++++------------
test/cdtext.right | 5 ++++-
2 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/lib/driver/cdtext.c b/lib/driver/cdtext.c
index a35c0e8..b73e062 100644
--- a/lib/driver/cdtext.c
+++ b/lib/driver/cdtext.c
@@ -502,6 +502,7 @@ cdtext_data_init(cdtext_t *p_cdtext, uint8_t *wdata, size_t
i_data)
int i;
cdtext_blocksize_t blocksize;
char *charset = NULL;
+ uint8_t cur_track;
memset( buffer, 0, sizeof(buffer) );
@@ -624,6 +625,8 @@ cdtext_data_init(cdtext_t *p_cdtext, uint8_t *wdata, size_t
i_data)
}
#endif
+ cur_track = pack.i_track;
+
/* read text packs first */
j = 0;
switch (pack.type) {
@@ -657,38 +660,39 @@ cdtext_data_init(cdtext_t *p_cdtext, uint8_t *wdata,
size_t i_data)
switch (pack.type) {
case CDTEXT_PACK_TITLE:
- cdtext_set(p_cdtext, CDTEXT_FIELD_TITLE, buffer, pack.i_track,
charset);
+ cdtext_set(p_cdtext, CDTEXT_FIELD_TITLE, buffer, cur_track,
charset);
break;
case CDTEXT_PACK_PERFORMER:
- cdtext_set(p_cdtext, CDTEXT_FIELD_PERFORMER, buffer,
pack.i_track, charset);
+ cdtext_set(p_cdtext, CDTEXT_FIELD_PERFORMER, buffer,
cur_track, charset);
break;
case CDTEXT_PACK_SONGWRITER:
- cdtext_set(p_cdtext, CDTEXT_FIELD_SONGWRITER, buffer,
pack.i_track, charset);
+ cdtext_set(p_cdtext, CDTEXT_FIELD_SONGWRITER, buffer,
cur_track, charset);
break;
case CDTEXT_PACK_COMPOSER:
- cdtext_set(p_cdtext, CDTEXT_FIELD_COMPOSER, buffer,
pack.i_track, charset);
+ cdtext_set(p_cdtext, CDTEXT_FIELD_COMPOSER, buffer, cur_track,
charset);
break;
case CDTEXT_PACK_ARRANGER:
- cdtext_set(p_cdtext, CDTEXT_FIELD_ARRANGER, buffer,
pack.i_track, charset);
+ cdtext_set(p_cdtext, CDTEXT_FIELD_ARRANGER, buffer, cur_track,
charset);
break;
case CDTEXT_PACK_MESSAGE:
- cdtext_set(p_cdtext, CDTEXT_FIELD_MESSAGE, buffer,
pack.i_track, charset);
+ cdtext_set(p_cdtext, CDTEXT_FIELD_MESSAGE, buffer, cur_track,
charset);
break;
case CDTEXT_PACK_DISCID:
- if (pack.i_track == 0)
- cdtext_set(p_cdtext, CDTEXT_FIELD_DISCID, buffer,
pack.i_track, NULL);
+ if (cur_track == 0)
+ cdtext_set(p_cdtext, CDTEXT_FIELD_DISCID, buffer, cur_track,
NULL);
break;
case CDTEXT_PACK_GENRE:
- cdtext_set(p_cdtext, CDTEXT_FIELD_GENRE, buffer, pack.i_track,
"ASCII");
+ cdtext_set(p_cdtext, CDTEXT_FIELD_GENRE, buffer, cur_track,
"ASCII");
break;
case CDTEXT_PACK_UPC:
- if (pack.i_track == 0)
- cdtext_set(p_cdtext, CDTEXT_FIELD_UPC_EAN, buffer,
pack.i_track, "ASCII");
+ if (cur_track == 0)
+ cdtext_set(p_cdtext, CDTEXT_FIELD_UPC_EAN, buffer,
cur_track, "ASCII");
else
- cdtext_set(p_cdtext, CDTEXT_FIELD_ISRC, buffer,
pack.i_track, "ISO-8859-1");
+ cdtext_set(p_cdtext, CDTEXT_FIELD_ISRC, buffer, cur_track,
"ISO-8859-1");
break;
}
i_buf = 0;
+ ++cur_track;
}
if (pack.db_chars)
diff --git a/test/cdtext.right b/test/cdtext.right
index 6ddeb7f..8af09a7 100644
--- a/test/cdtext.right
+++ b/test/cdtext.right
@@ -29,7 +29,7 @@ CD-TEXT for Track 1:
TITLE: Song of Joy
PERFORMER: Felix and The Purrs
SONGWRITER: Friedrich Schiller
- COMPOSER: unknown
+ COMPOSER: Ludwig van Beethoven
MESSAGE: Fritz and Louie once were punks
ARRANGER: Tom Cat
ISRC: XYBLG1101234
@@ -37,7 +37,9 @@ CD-TEXT for Track 2:
TITLE: Humpty Dumpty
PERFORMER: Catwalk Beauties
SONGWRITER: Mother Goose
+ COMPOSER: unknown
MESSAGE: Pluck the goose
+ ARRANGER: Tom Cat
ISRC: XYBLG1100005
CD-TEXT for Track 3:
TITLE: Mee Owwww
@@ -73,6 +75,7 @@ CD-TEXT for Track 2:
SONGWRITER: Mutter Gans
COMPOSER: unbekannt
MESSAGE: Rupft die Gans
+ ARRANGER: Tom Cat
ISRC: XYBLG1100005
CD-TEXT for Track 3:
TITLE: Mie auu
--
2.7.0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Libcdio-devel] [PATCH] fix incorrect parsing of CD-Text with short fields,
Leon Merten Lohse <=