aboutsummaryrefslogtreecommitdiff
path: root/src/util/strings.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/strings.c')
-rw-r--r--src/util/strings.c43
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;
393fail: 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
429void 429char *
430GNUNET_STRINGS_utf8_normalize (const char *input, 430GNUNET_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
446void 450enum GNUNET_GenericReturnValue
447GNUNET_STRINGS_utf8_tolower (const char *input, 451GNUNET_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
465void 472enum GNUNET_GenericReturnValue
466GNUNET_STRINGS_utf8_toupper (const char *input, 473GNUNET_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 }
1744END: 1755 END:
1745 *out = output; 1756 *out = output;
1746 return ret; 1757 return ret;
1747} 1758}