diff options
author | Christian Grothoff <christian@grothoff.org> | 2009-12-19 21:12:41 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2009-12-19 21:12:41 +0000 |
commit | 73b50507dba0570f2182f21f8b1c27a95886e4e7 (patch) | |
tree | e5a8e6ff4c1a8b9017e3da0c5743471eac87e40d | |
parent | fa7592ccb96d40353ff0270c57efe28057c81d7f (diff) | |
download | libextractor-73b50507dba0570f2182f21f8b1c27a95886e4e7.tar.gz libextractor-73b50507dba0570f2182f21f8b1c27a95886e4e7.zip |
id3v2
-rw-r--r-- | src/plugins/id3v23_extractor.c | 41 | ||||
-rw-r--r-- | src/plugins/id3v2_extractor.c | 2 |
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 | ||
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 */ |
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, |