gdb/gdbsupport: make xstrprintf and xstrvprintf return a unique_ptr

The motivation is to reduce the number of places where unmanaged
pointers are returned from allocation type routines.  All of the
callers are updated.

There should be no user visible changes after this commit.
This commit is contained in:
Andrew Burgess
2021-11-08 14:58:46 +00:00
parent 2bb7589ddf
commit 8579fd136a
34 changed files with 119 additions and 151 deletions

View File

@@ -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"));
}