70 const guchar * a_in_end, gulong * a_len)
72 guchar *byte_ptr = NULL;
81 g_return_val_if_fail (a_in_start && a_in_end && a_len,
85 for (byte_ptr = (guchar *) a_in_start;
86 byte_ptr <= a_in_end; byte_ptr++) {
87 gint nb_bytes_2_decode = 0;
89 if (*byte_ptr <= 0x7F) {
96 nb_bytes_2_decode = 1;
98 }
else if ((*byte_ptr & 0xE0) == 0xC0) {
104 c = *byte_ptr & 0x1F;
105 nb_bytes_2_decode = 2;
107 }
else if ((*byte_ptr & 0xF0) == 0xE0) {
113 c = *byte_ptr & 0x0F;
114 nb_bytes_2_decode = 3;
116 }
else if ((*byte_ptr & 0xF8) == 0xF0) {
123 nb_bytes_2_decode = 4;
125 }
else if ((*byte_ptr & 0xFC) == 0xF8) {
133 nb_bytes_2_decode = 5;
135 }
else if ((*byte_ptr & 0xFE) == 0xFC) {
143 nb_bytes_2_decode = 6;
156 for (; nb_bytes_2_decode > 1; nb_bytes_2_decode--) {
161 if ((*byte_ptr & 0xC0) != 0x80) {
165 c = (c << 6) | (*byte_ptr & 0x3F);
188 const guint32 * a_in_end, gulong * a_len)
191 guint32 *char_ptr = NULL;
193 g_return_val_if_fail (a_in_start && a_in_end && a_len,
196 for (char_ptr = (guint32 *) a_in_start;
197 char_ptr <= a_in_end; char_ptr++) {
198 if (*char_ptr <= 0x7F) {
201 }
else if (*char_ptr <= 0x7FF) {
204 }
else if (*char_ptr <= 0xFFFF) {
206 }
else if (*char_ptr <= 0x1FFFFF) {
208 }
else if (*char_ptr <= 0x3FFFFFF) {
210 }
else if (*char_ptr <= 0x7FFFFFFF) {
231 const guchar * a_in_end, gulong * a_len)
234 guchar *char_ptr = NULL;
236 g_return_val_if_fail (a_in_start && a_in_end && a_len,
239 for (char_ptr = (guchar *) a_in_start;
240 char_ptr <= a_in_end; char_ptr++) {
241 if (*char_ptr <= 0x7F) {
271 gulong * a_in_len, guint32 * a_out, gulong * a_out_len)
285 g_return_val_if_fail (a_in && a_in_len
294 out_len = *a_out_len;
296 for (in_index = 0, out_index = 0;
297 (in_index < in_len) && (out_index < out_len);
298 in_index++, out_index++) {
299 gint nb_bytes_2_decode = 0;
301 if (a_in[in_index] <= 0x7F) {
308 nb_bytes_2_decode = 1;
310 }
else if ((a_in[in_index] & 0xE0) == 0xC0) {
316 c = a_in[in_index] & 0x1F;
317 nb_bytes_2_decode = 2;
319 }
else if ((a_in[in_index] & 0xF0) == 0xE0) {
325 c = a_in[in_index] & 0x0F;
326 nb_bytes_2_decode = 3;
328 }
else if ((a_in[in_index] & 0xF8) == 0xF0) {
334 c = a_in[in_index] & 0x7;
335 nb_bytes_2_decode = 4;
337 }
else if ((a_in[in_index] & 0xFC) == 0xF8) {
344 c = a_in[in_index] & 3;
345 nb_bytes_2_decode = 5;
347 }
else if ((a_in[in_index] & 0xFE) == 0xFC) {
354 c = a_in[in_index] & 1;
355 nb_bytes_2_decode = 6;
366 for (; nb_bytes_2_decode > 1; nb_bytes_2_decode--) {
371 if ((a_in[in_index] & 0xC0) != 0x80) {
375 c = (c << 6) | (a_in[in_index] & 0x3F);
388 if (c == 0xFFFF || c == 0xFFFE)
399 if (c >= 0xD800 && c <= 0xDFFF)
406 a_out[out_index] = c;
410 *a_out_len = out_index + 1;
411 *a_in_len = in_index + 1;
430 guint32 * a_out, gulong * a_consumed)
433 nb_bytes_2_decode = 0;
442 g_return_val_if_fail (a_in && a_out && a_out
457 nb_bytes_2_decode = 1;
459 }
else if ((*a_in & 0xE0) == 0xC0) {
466 nb_bytes_2_decode = 2;
468 }
else if ((*a_in & 0xF0) == 0xE0) {
475 nb_bytes_2_decode = 3;
477 }
else if ((*a_in & 0xF8) == 0xF0) {
484 nb_bytes_2_decode = 4;
486 }
else if ((*a_in & 0xFC) == 0xF8) {
494 nb_bytes_2_decode = 5;
496 }
else if ((*a_in & 0xFE) == 0xFC) {
504 nb_bytes_2_decode = 6;
511 if (nb_bytes_2_decode > a_in_len) {
520 for (in_index = 1; in_index < nb_bytes_2_decode; in_index++) {
522 if ((a_in[in_index] & 0xC0) != 0x80) {
526 c = (c << 6) | (a_in[in_index] & 0x3F);
539 if (c == 0xFFFF || c == 0xFFFE)
550 if (c >= 0xD800 && c <= 0xDFFF)
560 *a_consumed = nb_bytes_2_decode;
570 const guchar * a_in_end, gulong * a_len)
578 guchar *byte_ptr = NULL;
587 g_return_val_if_fail (a_in_start && a_in_end && a_len,
591 for (byte_ptr = (guchar *) a_in_start;
592 byte_ptr <= a_in_end; byte_ptr++) {
593 gint nb_bytes_2_decode = 0;
595 if (*byte_ptr <= 0x7F) {
602 nb_bytes_2_decode = 1;
604 }
else if ((*byte_ptr & 0xE0) == 0xC0) {
610 c = *byte_ptr & 0x1F;
611 nb_bytes_2_decode = 2;
613 }
else if ((*byte_ptr & 0xF0) == 0xE0) {
619 c = *byte_ptr & 0x0F;
620 nb_bytes_2_decode = 3;
622 }
else if ((*byte_ptr & 0xF8) == 0xF0) {
629 nb_bytes_2_decode = 4;
631 }
else if ((*byte_ptr & 0xFC) == 0xF8) {
639 nb_bytes_2_decode = 5;
641 }
else if ((*byte_ptr & 0xFE) == 0xFC) {
649 nb_bytes_2_decode = 6;
662 for (; nb_bytes_2_decode > 1; nb_bytes_2_decode--) {
667 if ((*byte_ptr & 0xC0) != 0x80) {
671 c = (c << 6) | (*byte_ptr & 0x3F);
712 guint32 ** a_out, gulong * a_out_len)
716 g_return_val_if_fail (a_in && a_in_len
720 &a_in[*a_in_len - 1],
723 g_return_val_if_fail (status ==
CR_OK, status);
725 *a_out = g_malloc0 (*a_out_len *
sizeof (guint32));
749 gulong * a_in_len, guchar * a_out, gulong * a_out_len)
756 g_return_val_if_fail (a_in && a_in_len && a_out && a_out_len,
766 for (in_index = 0; in_index < in_len; in_index++) {
771 if (a_in[in_index] <= 0x7F) {
772 a_out[out_index] = a_in[in_index];
774 }
else if (a_in[in_index] <= 0x7FF) {
775 a_out[out_index] = (0xC0 | (a_in[in_index] >> 6));
776 a_out[out_index + 1] =
777 (0x80 | (a_in[in_index] & 0x3F));
779 }
else if (a_in[in_index] <= 0xFFFF) {
780 a_out[out_index] = (0xE0 | (a_in[in_index] >> 12));
781 a_out[out_index + 1] =
782 (0x80 | ((a_in[in_index] >> 6) & 0x3F));
783 a_out[out_index + 2] =
784 (0x80 | (a_in[in_index] & 0x3F));
786 }
else if (a_in[in_index] <= 0x1FFFFF) {
787 a_out[out_index] = (0xF0 | (a_in[in_index] >> 18));
789 = (0x80 | ((a_in[in_index] >> 12) & 0x3F));
791 = (0x80 | ((a_in[in_index] >> 6) & 0x3F));
793 = (0x80 | (a_in[in_index] & 0x3F));
795 }
else if (a_in[in_index] <= 0x3FFFFFF) {
796 a_out[out_index] = (0xF8 | (a_in[in_index] >> 24));
797 a_out[out_index + 1] =
798 (0x80 | (a_in[in_index] >> 18));
800 = (0x80 | ((a_in[in_index] >> 12) & 0x3F));
802 = (0x80 | ((a_in[in_index] >> 6) & 0x3F));
804 = (0x80 | (a_in[in_index] & 0x3F));
806 }
else if (a_in[in_index] <= 0x7FFFFFFF) {
807 a_out[out_index] = (0xFC | (a_in[in_index] >> 30));
808 a_out[out_index + 1] =
809 (0x80 | (a_in[in_index] >> 24));
811 = (0x80 | ((a_in[in_index] >> 18) & 0x3F));
813 = (0x80 | ((a_in[in_index] >> 12) & 0x3F));
815 = (0x80 | ((a_in[in_index] >> 6) & 0x3F));
817 = (0x80 | (a_in[in_index] & 0x3F));
826 *a_in_len = in_index + 1;
827 *a_out_len = out_index + 1;
847 guchar ** a_out, gulong * a_out_len)
851 g_return_val_if_fail (a_in && a_in_len && a_out
855 &a_in[*a_out_len - 1],
858 g_return_val_if_fail (status ==
CR_OK, status);
887 gulong * a_in_len, guchar * a_out, gulong * a_out_len)
889 gulong out_index = 0,
895 g_return_val_if_fail (a_in && a_in_len
899 if (*a_in_len == 0) {
906 out_len = *a_out_len;
908 for (in_index = 0, out_index = 0;
909 (in_index < in_len) && (out_index < out_len); in_index++) {
914 if (a_in[in_index] <= 0x7F) {
915 a_out[out_index] = a_in[in_index];
918 a_out[out_index] = (0xC0 | (a_in[in_index] >> 6));
919 a_out[out_index + 1] =
920 (0x80 | (a_in[in_index] & 0x3F));
925 *a_in_len = in_index;
926 *a_out_len = out_index;
943 guchar ** a_out, gulong * a_out_len)
948 g_return_val_if_fail (a_in && a_in_len && a_out
960 g_return_val_if_fail (status ==
CR_OK, status);
962 *a_out = g_malloc0 (out_len);
966 *a_out_len = out_len;
996 gulong * a_in_len, guchar * a_out, gulong * a_out_len)
1010 g_return_val_if_fail (a_in && a_in_len
1013 if (*a_in_len < 1) {
1018 out_len = *a_out_len;
1020 for (in_index = 0, out_index = 0;
1021 (in_index < in_len) && (out_index < out_len);
1022 in_index++, out_index++) {
1023 gint nb_bytes_2_decode = 0;
1025 if (a_in[in_index] <= 0x7F) {
1032 nb_bytes_2_decode = 1;
1034 }
else if ((a_in[in_index] & 0xE0) == 0xC0) {
1040 c = a_in[in_index] & 0x1F;
1041 nb_bytes_2_decode = 2;
1043 }
else if ((a_in[in_index] & 0xF0) == 0xE0) {
1049 c = a_in[in_index] & 0x0F;
1050 nb_bytes_2_decode = 3;
1052 }
else if ((a_in[in_index] & 0xF8) == 0xF0) {
1058 c = a_in[in_index] & 0x7;
1059 nb_bytes_2_decode = 4;
1061 }
else if ((a_in[in_index] & 0xFC) == 0xF8) {
1068 c = a_in[in_index] & 3;
1069 nb_bytes_2_decode = 5;
1071 }
else if ((a_in[in_index] & 0xFE) == 0xFC) {
1078 c = a_in[in_index] & 1;
1079 nb_bytes_2_decode = 6;
1091 if (in_index + nb_bytes_2_decode - 1 >= in_len) {
1095 for (; nb_bytes_2_decode > 1; nb_bytes_2_decode--) {
1100 if ((a_in[in_index] & 0xC0) != 0x80) {
1105 c = (c << 6) | (a_in[in_index] & 0x3F);
1118 a_out[out_index] = c;
1122 *a_out_len = out_index;
1123 *a_in_len = in_index;
1143 guchar ** a_out, gulong * a_out_len)
1147 g_return_val_if_fail (a_in && a_in_len
1150 if (*a_in_len < 1) {
1159 g_return_val_if_fail (status ==
CR_OK, status);
1161 *a_out = g_malloc0 (*a_out_len *
sizeof (guint32));
1226 if ((a_char >=
'0' && a_char <=
'9')
1227 || (a_char >=
'A' && a_char <=
'F')) {
1246 if (a_char <= 177) {
1264 for (i = 0; i < a_nb; i++) {
1265 fprintf (a_fp,
"%c", a_char);
1274 g_return_if_fail (a_string);
1276 for (i = 0; i < a_nb; i++) {
1277 g_string_append_printf (a_string,
"%c", a_char);
1290 GList
const *cur = NULL;
1291 GList *result = NULL;
1293 g_return_val_if_fail (a_list_of_strings, NULL);
1295 for (cur = a_list_of_strings; cur; cur = cur->next) {
1296 GString *str = NULL;
1298 str = g_string_new_len (((GString *) cur->data)->str,
1299 ((GString *) cur->data)->len);
1301 result = g_list_append (result, str);
1316 GList
const *cur = NULL;
1317 GList *result = NULL;
1319 g_return_val_if_fail (a_list_of_strings, NULL);
1321 for (cur = a_list_of_strings; cur; cur = cur->next) {
1326 result = g_list_append (result, str);