aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2009-12-19 21:12:41 +0000
committerChristian Grothoff <christian@grothoff.org>2009-12-19 21:12:41 +0000
commit73b50507dba0570f2182f21f8b1c27a95886e4e7 (patch)
treee5a8e6ff4c1a8b9017e3da0c5743471eac87e40d
parentfa7592ccb96d40353ff0270c57efe28057c81d7f (diff)
downloadlibextractor-73b50507dba0570f2182f21f8b1c27a95886e4e7.tar.gz
libextractor-73b50507dba0570f2182f21f8b1c27a95886e4e7.zip
id3v2
-rw-r--r--src/plugins/id3v23_extractor.c41
-rw-r--r--src/plugins/id3v2_extractor.c2
2 files changed, 18 insertions, 25 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
38static struct EXTRACTOR_Keywords *
39addKeyword (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
51typedef struct 38typedef 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 */
diff --git a/src/plugins/id3v2_extractor.c b/src/plugins/id3v2_extractor.c
index 08ba124..da5c6d9 100644
--- a/src/plugins/id3v2_extractor.c
+++ b/src/plugins/id3v2_extractor.c
@@ -337,7 +337,7 @@ EXTRACTOR_id3v2_extract (const unsigned char *data,
337 { 337 {
338 if (0 != proc (proc_cls, 338 if (0 != proc (proc_cls,
339 "id3v2", 339 "id3v2",
340 type, 340 tmap[i].type,
341 EXTRACTOR_METAFORMAT_UTF8, 341 EXTRACTOR_METAFORMAT_UTF8,
342 "text/plain", 342 "text/plain",
343 word, 343 word,