diff options
Diffstat (limited to 'gdb/charset.c')
-rw-r--r-- | gdb/charset.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/gdb/charset.c b/gdb/charset.c index 9fb1a1f..d1aebaa 100644 --- a/gdb/charset.c +++ b/gdb/charset.c @@ -960,35 +960,31 @@ intermediate_encoding (void) { iconv_t desc; static const char *stored_result = NULL; - char *result; + gdb::unique_xmalloc_ptr<char> result; if (stored_result) return stored_result; result = xstrprintf ("UTF-%d%s", (int) (sizeof (gdb_wchar_t) * 8), ENDIAN_SUFFIX); /* Check that the name is supported by iconv_open. */ - desc = iconv_open (result, host_charset ()); + desc = iconv_open (result.get (), host_charset ()); if (desc != (iconv_t) -1) { iconv_close (desc); - stored_result = result; - return result; + stored_result = result.release (); + return stored_result; } - /* Not valid, free the allocated memory. */ - xfree (result); /* Second try, with UCS-2 type. */ result = xstrprintf ("UCS-%d%s", (int) sizeof (gdb_wchar_t), ENDIAN_SUFFIX); /* Check that the name is supported by iconv_open. */ - desc = iconv_open (result, host_charset ()); + desc = iconv_open (result.get (), host_charset ()); if (desc != (iconv_t) -1) { iconv_close (desc); - stored_result = result; - return result; + stored_result = result.release (); + return stored_result; } - /* Not valid, free the allocated memory. */ - xfree (result); /* No valid charset found, generate error here. */ error (_("Unable to find a valid charset for string conversions")); } |