diff options
Diffstat (limited to 'src/util/strings.c')
-rw-r--r-- | src/util/strings.c | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/src/util/strings.c b/src/util/strings.c index c63870e42..75e45ba6d 100644 --- a/src/util/strings.c +++ b/src/util/strings.c | |||
@@ -390,7 +390,7 @@ GNUNET_STRINGS_conv (const char *input, | |||
390 | ret[encoded_string_length] = '\0'; | 390 | ret[encoded_string_length] = '\0'; |
391 | free (encoded_string); | 391 | free (encoded_string); |
392 | return ret; | 392 | return ret; |
393 | fail: | 393 | fail: |
394 | LOG (GNUNET_ERROR_TYPE_WARNING, | 394 | LOG (GNUNET_ERROR_TYPE_WARNING, |
395 | _ ("Character sets requested were `%s'->`%s'\n"), | 395 | _ ("Character sets requested were `%s'->`%s'\n"), |
396 | "UTF-8", | 396 | "UTF-8", |
@@ -426,24 +426,28 @@ GNUNET_STRINGS_from_utf8 (const char *input, | |||
426 | } | 426 | } |
427 | 427 | ||
428 | 428 | ||
429 | void | 429 | char * |
430 | GNUNET_STRINGS_utf8_normalize (const char *input, | 430 | GNUNET_STRINGS_utf8_normalize (const char *input) |
431 | char *output) | ||
432 | { | 431 | { |
433 | uint8_t *tmp; | 432 | uint8_t *tmp; |
434 | size_t len; | 433 | size_t len; |
435 | 434 | char *output; | |
436 | tmp = u8_normalize (UNINORM_NFKC, | 435 | tmp = u8_tolower ((uint8_t *) input, |
437 | (uint8_t *) input, | 436 | strlen ((char *) input), |
438 | strlen ((char*) input), | 437 | NULL, |
439 | NULL, | 438 | UNINORM_NFKC, |
440 | &len); | 439 | NULL, |
440 | &len); | ||
441 | if (NULL == tmp) | ||
442 | return NULL; | ||
443 | output = GNUNET_malloc (len + 1); | ||
441 | GNUNET_memcpy (output, tmp, len); | 444 | GNUNET_memcpy (output, tmp, len); |
442 | output[len] = '\0'; | 445 | output[len] = '\0'; |
443 | free (tmp); | 446 | free (tmp); |
447 | return output; | ||
444 | } | 448 | } |
445 | 449 | ||
446 | void | 450 | enum GNUNET_GenericReturnValue |
447 | GNUNET_STRINGS_utf8_tolower (const char *input, | 451 | GNUNET_STRINGS_utf8_tolower (const char *input, |
448 | char *output) | 452 | char *output) |
449 | { | 453 | { |
@@ -456,13 +460,16 @@ GNUNET_STRINGS_utf8_tolower (const char *input, | |||
456 | UNINORM_NFD, | 460 | UNINORM_NFD, |
457 | NULL, | 461 | NULL, |
458 | &len); | 462 | &len); |
463 | if (NULL == tmp_in) | ||
464 | return GNUNET_SYSERR; | ||
459 | GNUNET_memcpy (output, tmp_in, len); | 465 | GNUNET_memcpy (output, tmp_in, len); |
460 | output[len] = '\0'; | 466 | output[len] = '\0'; |
461 | free (tmp_in); | 467 | GNUNET_free (tmp_in); |
468 | return GNUNET_OK; | ||
462 | } | 469 | } |
463 | 470 | ||
464 | 471 | ||
465 | void | 472 | enum GNUNET_GenericReturnValue |
466 | GNUNET_STRINGS_utf8_toupper (const char *input, | 473 | GNUNET_STRINGS_utf8_toupper (const char *input, |
467 | char *output) | 474 | char *output) |
468 | { | 475 | { |
@@ -475,9 +482,13 @@ GNUNET_STRINGS_utf8_toupper (const char *input, | |||
475 | UNINORM_NFD, | 482 | UNINORM_NFD, |
476 | NULL, | 483 | NULL, |
477 | &len); | 484 | &len); |
485 | if (NULL == tmp_in) | ||
486 | return GNUNET_SYSERR; | ||
487 | /* 0-terminator does not fit */ | ||
478 | GNUNET_memcpy (output, tmp_in, len); | 488 | GNUNET_memcpy (output, tmp_in, len); |
479 | output[len] = '\0'; | 489 | output[len] = '\0'; |
480 | free (tmp_in); | 490 | GNUNET_free (tmp_in); |
491 | return GNUNET_OK; | ||
481 | } | 492 | } |
482 | 493 | ||
483 | 494 | ||
@@ -1604,7 +1615,7 @@ GNUNET_STRINGS_base64_encode (const void *in, | |||
1604 | char *opt; | 1615 | char *opt; |
1605 | 1616 | ||
1606 | ret = 0; | 1617 | ret = 0; |
1607 | GNUNET_assert (len < SIZE_MAX / 4 * 3 ); | 1618 | GNUNET_assert (len < SIZE_MAX / 4 * 3); |
1608 | opt = GNUNET_malloc (2 + (len * 4 / 3) + 8); | 1619 | opt = GNUNET_malloc (2 + (len * 4 / 3) + 8); |
1609 | for (size_t i = 0; i < len; ++i) | 1620 | for (size_t i = 0; i < len; ++i) |
1610 | { | 1621 | { |
@@ -1741,7 +1752,7 @@ GNUNET_STRINGS_base64_decode (const char *data, | |||
1741 | output[ret++] = c; | 1752 | output[ret++] = c; |
1742 | } | 1753 | } |
1743 | } | 1754 | } |
1744 | END: | 1755 | END: |
1745 | *out = output; | 1756 | *out = output; |
1746 | return ret; | 1757 | return ret; |
1747 | } | 1758 | } |