42 #include <c-strcase.h>
44 #define DOTP(c) ((c) == 0x002E || (c) == 0x3002 || \
45 (c) == 0xFF0E || (c) == 0xFF61)
99 for (i = 0; i < inlen; i++)
104 src = malloc (
sizeof (in[0]) * (inlen + 1));
108 memcpy (src, in,
sizeof (in[0]) * inlen);
133 newp = realloc (p, len);
178 for (i = 0; src[i]; i++)
179 if (src[i] <= 0x2C || src[i] == 0x2E || src[i] == 0x2F ||
180 (src[i] >= 0x3A && src[i] <= 0x40) ||
181 (src[i] >= 0x5B && src[i] <= 0x60) ||
182 (src[i] >= 0x7B && src[i] <= 0x7F))
188 if (src[0] == 0x002D || (i > 0 && src[i - 1] == 0x002D))
205 for (i = 0; src[i]; i++)
243 for (len = 0; src[len]; len++)
269 if (strlen (out) < 1 || strlen (out) > 63)
277 idna_to_unicode_internal (
char *utf8in,
278 uint32_t * out,
size_t * outlen,
int flags)
282 size_t utf8len = strlen (utf8in) + 1;
297 for (i = 0; utf8in[i]; i++)
298 if (utf8in[i] & ~0x7F)
312 char *newp = realloc (utf8in, utf8len + addlen);
432 uint32_t * out,
size_t * outlen,
int flags)
435 size_t outlensave = *outlen;
442 rc = idna_to_unicode_internal (p, out, outlen, flags);
445 memcpy (out, in,
sizeof (in[0]) * (inlen < outlensave ?
446 inlen : outlensave));
473 const uint32_t *start = input;
487 *output = malloc (1);
490 strcpy (*output,
"");
494 if (
DOTP (input[0]) && input[1] == 0)
497 *output = malloc (2);
500 strcpy (*output,
".");
509 for (; *end && !
DOTP (*end); end++)
512 if (*end ==
'\0' && start == end)
529 size_t l = strlen (out) + 1 + strlen (buf) + 1;
530 char *newp = realloc (out, l);
542 size_t l = strlen (buf) + 1;
543 out = (
char *) malloc (l);
638 const uint32_t *start = input;
642 uint32_t *out = NULL;
651 for (; *end && !
DOTP (*end); end++)
654 buflen = (size_t) (end - start);
655 buf = malloc (
sizeof (buf[0]) * (buflen + 1));
661 buf, &buflen, flags);
665 uint32_t *newp = realloc (out,
667 * (outlen + 1 + buflen + 1));
675 out[outlen++] = 0x002E;
676 memcpy (out + outlen, buf,
sizeof (buf[0]) * buflen);
int idna_to_unicode_lzlz(const char *input, char **output, int flags)
int idna_to_unicode_44i(const uint32_t *in, size_t inlen, uint32_t *out, size_t *outlen, int flags)
int idna_to_ascii_4z(const uint32_t *input, char **output, int flags)
int idna_to_unicode_4z4z(const uint32_t *input, uint32_t **output, int flags)
int idna_to_unicode_8zlz(const char *input, char **output, int flags)
IDNAPI char * stringprep_locale_to_utf8(const char *str)
#define stringprep_nameprep_no_unassigned(in, maxlen)
int idna_to_unicode_8z4z(const char *input, uint32_t **output, int flags)
int punycode_encode(size_t input_length, const punycode_uint input[], const unsigned char case_flags[], size_t *output_length, char output[])
IDNAPI char * stringprep_utf8_to_locale(const char *str)
int punycode_decode(size_t input_length, const char input[], size_t *output_length, punycode_uint output[], unsigned char case_flags[])
int idna_to_unicode_8z8z(const char *input, char **output, int flags)
uint32_t * stringprep_utf8_to_ucs4(const char *str, ssize_t len, size_t *items_written)
char * stringprep_ucs4_to_utf8(const uint32_t *str, ssize_t len, size_t *items_read, size_t *items_written)
int idna_to_ascii_lz(const char *input, char **output, int flags)
#define stringprep_nameprep(in, maxlen)
int idna_to_ascii_4i(const uint32_t *in, size_t inlen, char *out, int flags)
int idna_to_ascii_8z(const char *input, char **output, int flags)