diff options
Diffstat (limited to 'lib/striconveha.c')
| -rw-r--r-- | lib/striconveha.c | 77 |
1 files changed, 37 insertions, 40 deletions
diff --git a/lib/striconveha.c b/lib/striconveha.c index b7dec017..4846a2e7 100644 --- a/lib/striconveha.c +++ b/lib/striconveha.c @@ -1,5 +1,5 @@ /* Character set conversion with error handling and autodetection. - Copyright (C) 2002, 2005, 2007, 2009-2025 Free Software Foundation, Inc. + Copyright (C) 2002, 2005, 2007, 2009-2026 Free Software Foundation, Inc. Written by Bruno Haible. This file is free software: you can redistribute it and/or modify @@ -84,11 +84,6 @@ int uniconv_register_autodetect (const char *name, const char * const *try_in_order) { - size_t namelen; - size_t listlen; - size_t memneed; - size_t i; - /* The TRY_IN_ORDER list must not be empty. */ if (try_in_order[0] == NULL) { @@ -98,11 +93,15 @@ uniconv_register_autodetect (const char *name, /* We must deep-copy NAME and TRY_IN_ORDER, because they may be allocated with dynamic extent. */ - namelen = strlen (name) + 1; - memneed = sizeof (struct autodetect_alias) + namelen + sizeof (char *); - for (i = 0; try_in_order[i] != NULL; i++) - memneed += sizeof (char *) + strlen (try_in_order[i]) + 1; - listlen = i; + size_t namelen = strlen (name) + 1; + size_t memneed = sizeof (struct autodetect_alias) + namelen + sizeof (char *); + size_t listlen; + { + size_t i; + for (i = 0; try_in_order[i] != NULL; i++) + memneed += sizeof (char *) + strlen (try_in_order[i]) + 1; + listlen = i; + } void *memory = malloc (memneed); if (memory != NULL) @@ -116,14 +115,17 @@ uniconv_register_autodetect (const char *name, char *new_name = memcpy (memory, name, namelen); memory = new_name + namelen; - for (i = 0; i < listlen; i++) - { - size_t len = strlen (try_in_order[i]) + 1; - char *copy = memcpy (memory, try_in_order[i], len); - new_try_in_order[i] = copy; - memory = copy + len; - } - new_try_in_order[i] = NULL; + { + size_t i; + for (i = 0; i < listlen; i++) + { + size_t len = strlen (try_in_order[i]) + 1; + char *copy = memcpy (memory, try_in_order[i], len); + new_try_in_order[i] = copy; + memory = copy + len; + } + new_try_in_order[i] = NULL; + } /* Now insert the new alias. */ new_alias->name = new_name; @@ -155,19 +157,17 @@ mem_iconveha_notranslit (const char *src, size_t srclen, return retval; else { - struct autodetect_alias *alias; - /* Unsupported from_codeset or to_codeset. Check whether the caller requested autodetection. */ - for (alias = autodetect_list; alias != NULL; alias = alias->next) + for (struct autodetect_alias *alias = autodetect_list; + alias != NULL; + alias = alias->next) if (streq (from_codeset, alias->name)) { - const char * const *encodings; - if (handler != iconveh_error) { /* First try all encodings without any forgiving. */ - encodings = alias->encodings_to_try; + const char * const *encodings = alias->encodings_to_try; do { retval = mem_iconveha_notranslit (src, srclen, @@ -181,7 +181,7 @@ mem_iconveha_notranslit (const char *src, size_t srclen, while (*encodings != NULL); } - encodings = alias->encodings_to_try; + const char * const *encodings = alias->encodings_to_try; do { retval = mem_iconveha_notranslit (src, srclen, @@ -227,7 +227,6 @@ mem_iconveha (const char *src, size_t srclen, || defined ICONV_SET_TRANSLITERATE if (transliterate) { - int retval; size_t len = strlen (to_codeset); char *to_codeset_suffixed = (char *) malloca (len + 10 + 1); if (to_codeset_suffixed == NULL) @@ -238,9 +237,9 @@ mem_iconveha (const char *src, size_t srclen, memcpy (to_codeset_suffixed, to_codeset, len); memcpy (to_codeset_suffixed + len, "//TRANSLIT", 10 + 1); - retval = mem_iconveha_notranslit (src, srclen, - from_codeset, to_codeset_suffixed, - handler, offsets, resultp, lengthp); + int retval = mem_iconveha_notranslit (src, srclen, + from_codeset, to_codeset_suffixed, + handler, offsets, resultp, lengthp); freea (to_codeset_suffixed); @@ -265,19 +264,17 @@ str_iconveha_notranslit (const char *src, return result; else { - struct autodetect_alias *alias; - /* Unsupported from_codeset or to_codeset. Check whether the caller requested autodetection. */ - for (alias = autodetect_list; alias != NULL; alias = alias->next) + for (struct autodetect_alias *alias = autodetect_list; + alias != NULL; + alias = alias->next) if (streq (from_codeset, alias->name)) { - const char * const *encodings; - if (handler != iconveh_error) { /* First try all encodings without any forgiving. */ - encodings = alias->encodings_to_try; + const char * const *encodings = alias->encodings_to_try; do { result = str_iconveha_notranslit (src, @@ -290,7 +287,7 @@ str_iconveha_notranslit (const char *src, while (*encodings != NULL); } - encodings = alias->encodings_to_try; + const char * const *encodings = alias->encodings_to_try; do { result = str_iconveha_notranslit (src, @@ -335,7 +332,6 @@ str_iconveha (const char *src, || defined ICONV_SET_TRANSLITERATE if (transliterate) { - char *result; size_t len = strlen (to_codeset); char *to_codeset_suffixed = (char *) malloca (len + 10 + 1); if (to_codeset_suffixed == NULL) @@ -346,8 +342,9 @@ str_iconveha (const char *src, memcpy (to_codeset_suffixed, to_codeset, len); memcpy (to_codeset_suffixed + len, "//TRANSLIT", 10 + 1); - result = str_iconveha_notranslit (src, from_codeset, to_codeset_suffixed, - handler); + char *result = + str_iconveha_notranslit (src, from_codeset, to_codeset_suffixed, + handler); freea (to_codeset_suffixed); |
