diff options
Diffstat (limited to 'src/plugins/id3v23_extractor.c')
-rw-r--r-- | src/plugins/id3v23_extractor.c | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/src/plugins/id3v23_extractor.c b/src/plugins/id3v23_extractor.c index 11b04d9..71553c2 100644 --- a/src/plugins/id3v23_extractor.c +++ b/src/plugins/id3v23_extractor.c | |||
@@ -35,19 +35,6 @@ | |||
35 | 35 | ||
36 | #include "convert.h" | 36 | #include "convert.h" |
37 | 37 | ||
38 | static struct EXTRACTOR_Keywords * | ||
39 | addKeyword (EXTRACTOR_KeywordList * oldhead, | ||
40 | char *phrase, EXTRACTOR_KeywordType type) | ||
41 | { | ||
42 | EXTRACTOR_KeywordList *keyword; | ||
43 | |||
44 | keyword = malloc (sizeof (EXTRACTOR_KeywordList)); | ||
45 | keyword->next = oldhead; | ||
46 | keyword->keyword = phrase; | ||
47 | keyword->keywordType = type; | ||
48 | return keyword; | ||
49 | } | ||
50 | |||
51 | typedef struct | 38 | typedef struct |
52 | { | 39 | { |
53 | const char *text; | 40 | const char *text; |
@@ -122,7 +109,7 @@ EXTRACTOR_id3v23_extract (const unsigned char *data, | |||
122 | (data[0] != 0x49) || | 109 | (data[0] != 0x49) || |
123 | (data[1] != 0x44) || | 110 | (data[1] != 0x44) || |
124 | (data[2] != 0x33) || (data[3] != 0x03) || (data[4] != 0x00)) | 111 | (data[2] != 0x33) || (data[3] != 0x03) || (data[4] != 0x00)) |
125 | return prev; | 112 | return 0; |
126 | unsync = (data[5] & 0x80) > 0; | 113 | unsync = (data[5] & 0x80) > 0; |
127 | extendedHdr = (data[5] & 0x40) > 0; | 114 | extendedHdr = (data[5] & 0x40) > 0; |
128 | experimental = (data[5] & 0x20) > 0; | 115 | experimental = (data[5] & 0x20) > 0; |
@@ -130,7 +117,7 @@ EXTRACTOR_id3v23_extract (const unsigned char *data, | |||
130 | ((data[7] & 0x7F) << 14) | | 117 | ((data[7] & 0x7F) << 14) | |
131 | ((data[8] & 0x7F) << 7) | ((data[9] & 0x7F) << 0)); | 118 | ((data[8] & 0x7F) << 7) | ((data[9] & 0x7F) << 0)); |
132 | if ((tsize + 10 > size) || (experimental)) | 119 | if ((tsize + 10 > size) || (experimental)) |
133 | return prev; | 120 | return 0; |
134 | pos = 10; | 121 | pos = 10; |
135 | padding = 0; | 122 | padding = 0; |
136 | if (extendedHdr) | 123 | if (extendedHdr) |
@@ -144,14 +131,14 @@ EXTRACTOR_id3v23_extract (const unsigned char *data, | |||
144 | if (padding < tsize) | 131 | if (padding < tsize) |
145 | tsize -= padding; | 132 | tsize -= padding; |
146 | else | 133 | else |
147 | return prev; | 134 | return 0; |
148 | } | 135 | } |
149 | 136 | ||
150 | 137 | ||
151 | while (pos < tsize) | 138 | while (pos < tsize) |
152 | { | 139 | { |
153 | if (pos + 10 > tsize) | 140 | if (pos + 10 > tsize) |
154 | return prev; | 141 | return 0; |
155 | csize = | 142 | csize = |
156 | (data[pos + 4] << 24) + (data[pos + 5] << 16) + (data[pos + 6] << 8) + | 143 | (data[pos + 4] << 24) + (data[pos + 5] << 16) + (data[pos + 6] << 8) + |
157 | data[pos + 7]; | 144 | data[pos + 7]; |
@@ -200,20 +187,26 @@ EXTRACTOR_id3v23_extract (const unsigned char *data, | |||
200 | pos++; | 187 | pos++; |
201 | if ((word != NULL) && (strlen (word) > 0)) | 188 | if ((word != NULL) && (strlen (word) > 0)) |
202 | { | 189 | { |
203 | prev = addKeyword (prev, word, tmap[i].type); | 190 | if (0 != proc (proc_cls, |
204 | } | 191 | "id3v2", |
205 | else | 192 | tmap[i].type, |
206 | { | 193 | EXTRACTOR_METAFORMAT_UTF8, |
207 | if (word != NULL) | 194 | "text/plain", |
208 | free (word); | 195 | word, |
196 | strlen(word)+1)) | ||
197 | { | ||
198 | free (word); | ||
199 | return 1; | ||
200 | } | ||
209 | } | 201 | } |
202 | free (word); | ||
210 | break; | 203 | break; |
211 | } | 204 | } |
212 | i++; | 205 | i++; |
213 | } | 206 | } |
214 | pos += 10 + csize; | 207 | pos += 10 + csize; |
215 | } | 208 | } |
216 | return prev; | 209 | return 0; |
217 | } | 210 | } |
218 | 211 | ||
219 | /* end of id3v23_extractor.c */ | 212 | /* end of id3v23_extractor.c */ |