38id3_length_t id3_latin1_length(id3_latin1_t
const *latin1)
40 id3_latin1_t
const *ptr = latin1;
52id3_length_t id3_latin1_size(id3_latin1_t
const *latin1)
54 return id3_latin1_length(latin1) + 1;
61void id3_latin1_copy(id3_latin1_t *dest, id3_latin1_t
const *src)
63 while ((*dest++ = *src++))
71id3_latin1_t *id3_latin1_duplicate(id3_latin1_t
const *src)
75 latin1 = malloc(id3_latin1_size(src) *
sizeof(*latin1));
77 id3_latin1_copy(latin1, src);
86id3_ucs4_t *id3_latin1_ucs4duplicate(id3_latin1_t
const *latin1)
90 ucs4 = malloc((id3_latin1_length(latin1) + 1) *
sizeof(*ucs4));
92 id3_latin1_decode(latin1, ucs4);
101id3_length_t id3_latin1_decodechar(id3_latin1_t
const *latin1,
113id3_length_t id3_latin1_encodechar(id3_latin1_t *latin1, id3_ucs4_t ucs4)
116 if (ucs4 > 0x000000ffL)
117 *latin1 = ID3_UCS4_REPLACEMENTCHAR;
126void id3_latin1_decode(id3_latin1_t
const *latin1, id3_ucs4_t *ucs4)
129 latin1 += id3_latin1_decodechar(latin1, ucs4);
137void id3_latin1_encode(id3_latin1_t *latin1, id3_ucs4_t
const *ucs4)
140 latin1 += id3_latin1_encodechar(latin1, *ucs4);
148id3_length_t id3_latin1_put(id3_byte_t **ptr, id3_latin1_t latin1)
160id3_latin1_t id3_latin1_get(id3_byte_t
const **ptr)
169id3_length_t id3_latin1_serialize(id3_byte_t **ptr, id3_ucs4_t
const *ucs4,
172 id3_length_t size = 0;
173 id3_latin1_t latin1[1], *out;
176 switch (id3_latin1_encodechar(out = latin1, *ucs4++)) {
177 case 1: size += id3_latin1_put(ptr, *out++);
183 size += id3_latin1_put(ptr, 0);
192id3_ucs4_t *id3_latin1_deserialize(id3_byte_t
const **ptr, id3_length_t length)
194 id3_byte_t
const *end;
195 id3_latin1_t *latin1ptr, *latin1;
200 latin1 = malloc((length + 1) *
sizeof(*latin1));
205 while (end - *ptr > 0 && (*latin1ptr = id3_latin1_get(ptr)))
210 ucs4 = malloc((id3_latin1_length(latin1) + 1) *
sizeof(*ucs4));
212 id3_latin1_decode(latin1, ucs4);