36id3_ucs4_t
const id3_ucs4_empty[] = { 0 };
42id3_length_t id3_ucs4_length(id3_ucs4_t
const *ucs4)
44 id3_ucs4_t
const *ptr = ucs4;
56id3_length_t id3_ucs4_size(id3_ucs4_t
const *ucs4)
58 return id3_ucs4_length(ucs4) + 1;
65id3_length_t id3_ucs4_latin1size(id3_ucs4_t
const *ucs4)
67 return id3_ucs4_size(ucs4);
74id3_length_t id3_ucs4_utf16size(id3_ucs4_t
const *ucs4)
76 id3_length_t size = 0;
80 if (*ucs4 >= 0x00010000L &&
94id3_length_t id3_ucs4_utf8size(id3_ucs4_t
const *ucs4)
96 id3_length_t size = 0;
99 if (*ucs4 <= 0x0000007fL)
101 else if (*ucs4 <= 0x000007ffL)
103 else if (*ucs4 <= 0x0000ffffL)
105 else if (*ucs4 <= 0x001fffffL)
107 else if (*ucs4 <= 0x03ffffffL)
109 else if (*ucs4 <= 0x7fffffffL)
124id3_latin1_t *id3_ucs4_latin1duplicate(id3_ucs4_t
const *ucs4)
126 id3_latin1_t *latin1;
128 latin1 = malloc(id3_ucs4_latin1size(ucs4) *
sizeof(*latin1));
130 id3_latin1_encode(latin1, ucs4);
132 return release(latin1);
139id3_utf16_t *id3_ucs4_utf16duplicate(id3_ucs4_t
const *ucs4)
143 utf16 = malloc(id3_ucs4_utf16size(ucs4) *
sizeof(*utf16));
145 id3_utf16_encode(utf16, ucs4);
147 return release(utf16);
154id3_utf8_t *id3_ucs4_utf8duplicate(id3_ucs4_t
const *ucs4)
158 utf8 = malloc(id3_ucs4_utf8size(ucs4) *
sizeof(*utf8));
160 id3_utf8_encode(utf8, ucs4);
162 return release(utf8);
169void id3_ucs4_copy(id3_ucs4_t *dest, id3_ucs4_t
const *src)
171 while ((*dest++ = *src++))
179id3_ucs4_t *id3_ucs4_duplicate(id3_ucs4_t
const *src)
183 ucs4 = malloc(id3_ucs4_size(src) *
sizeof(*ucs4));
185 id3_ucs4_copy(ucs4, src);
194void id3_ucs4_putnumber(id3_ucs4_t *ucs4,
unsigned long number)
196 int digits[10], *digit;
201 *digit++ = number % 10;
206 while (digit != digits)
207 *ucs4++ =
'0' + *--digit;
216unsigned long id3_ucs4_getnumber(id3_ucs4_t
const *ucs4)
218 unsigned long number = 0;
220 while (*ucs4 >=
'0' && *ucs4 <=
'9')
221 number = 10 * number + (*ucs4++ -
'0');