diff options
Diffstat (limited to 'src/plugins/fs/meta.c')
-rw-r--r-- | src/plugins/fs/meta.c | 37 |
1 files changed, 3 insertions, 34 deletions
diff --git a/src/plugins/fs/meta.c b/src/plugins/fs/meta.c index 8009368f..fdb07351 100644 --- a/src/plugins/fs/meta.c +++ b/src/plugins/fs/meta.c | |||
@@ -319,40 +319,9 @@ struct ECRS_MetaData * getMetaDataFromList(GladeXML * xml, | |||
319 | NULL, | 319 | NULL, |
320 | NULL)) { | 320 | NULL)) { |
321 | char * binary; | 321 | char * binary; |
322 | size_t pos; | 322 | |
323 | size_t end; | 323 | binary = EXTRACTOR_binaryEncode(thumb, |
324 | size_t wpos; | 324 | length); |
325 | size_t i; | ||
326 | unsigned int markers[8]; /* 256 bits */ | ||
327 | unsigned char marker; | ||
328 | |||
329 | /* encode! */ | ||
330 | binary = MALLOC(2 + length + (length+256) / 254); | ||
331 | pos = 0; | ||
332 | wpos = 0; | ||
333 | while (pos < length) { | ||
334 | /* find unused value between 1 and 255 in | ||
335 | the next 254 bytes */ | ||
336 | end = pos + 254; | ||
337 | if (end < pos) | ||
338 | break; /* integer overflow! */ | ||
339 | if (end > length) | ||
340 | end = length; | ||
341 | memset(markers, 0, sizeof(markers)); | ||
342 | for (i=pos;i<end;i++) | ||
343 | markers[thumb[i]&7] |= 1 << (thumb[i] >> 3); | ||
344 | marker = 1; | ||
345 | while (markers[marker&7] & (1 << (marker >> 3))) { | ||
346 | marker++; | ||
347 | GNUNET_ASSERT(marker != 0); | ||
348 | } | ||
349 | /* recode */ | ||
350 | binary[wpos++] = marker; | ||
351 | for (i=pos;i<end;i++) | ||
352 | binary[wpos++] = thumb[i] == 0 ? marker : thumb[i]; | ||
353 | pos = end; | ||
354 | } | ||
355 | binary[wpos++] = 0; /* 0-termination! */ | ||
356 | free(thumb); | 325 | free(thumb); |
357 | ECRS_addToMetaData(meta, | 326 | ECRS_addToMetaData(meta, |
358 | EXTRACTOR_THUMBNAIL_DATA, | 327 | EXTRACTOR_THUMBNAIL_DATA, |