38id3_length_t id3_util_unsynchronise(id3_byte_t *data, id3_length_t length)
40 id3_length_t bytes = 0, count;
41 id3_byte_t *end = data + length;
42 id3_byte_t
const *ptr;
47 for (ptr = data; ptr < end - 1; ++ptr) {
48 if (ptr[0] == 0xff && (ptr[1] == 0x00 || (ptr[1] & 0xe0) == 0xe0))
58 for (count = bytes; count; *--end = *--ptr) {
59 if (ptr[-1] == 0xff && (ptr[0] == 0x00 || (ptr[0] & 0xe0) == 0xe0)) {
66 return length + bytes;
73id3_length_t id3_util_deunsynchronise(id3_byte_t *data, id3_length_t length)
75 id3_byte_t
const *old, *end = data + length;
81 for (old =
new = data; old < end - 1; ++old) {
83 if (old[0] == 0xff && old[1] == 0x00)
96id3_byte_t *id3_util_compress(id3_byte_t
const *data, id3_length_t length,
97 id3_length_t *newlength)
99 id3_byte_t *compressed;
101 *newlength = length + 12;
102 *newlength += *newlength / 1000;
104 compressed = malloc(*newlength);
106 if (compress2(compressed, newlength, data, length,
107 Z_BEST_COMPRESSION) != Z_OK ||
108 *newlength >= length) {
115 resized = realloc(compressed, *newlength ? *newlength : 1);
117 compressed = resized;
128id3_byte_t *id3_util_decompress(id3_byte_t
const *data, id3_length_t length,
129 id3_length_t newlength)
131 id3_byte_t *decompressed;
133 decompressed = malloc(newlength ? newlength : 1);
139 if (uncompress(decompressed, &size, data, length) != Z_OK ||