change and rename gmp_string_asprintf to return an std::string

This was suggested by Simon during a code review of this package upstream.
The upside is that this makes the function's API more natural and C++.
The downside is an extra malloc, which might be the reason why we went
for using a unique_xmalloc_ptr in the first place. Since this function
is not expected to be called frequently, the API improvement might be
worth the performance impact.

gdb/ChangeLog:

        * gmp-utils.h (gmp_string_printf): Rename from gmp_string_asprintf.
        Change return type to std::string. Update all callers.
        * gmp-utils.c (gmp_string_printf): Likewise.
This commit is contained in:
Joel Brobecker 2020-11-23 21:45:35 -05:00
parent 4fbb7ccebe
commit 987b670356
6 changed files with 27 additions and 17 deletions

View file

@ -19,17 +19,24 @@
/* See gmp-utils.h. */
gdb::unique_xmalloc_ptr<char>
gmp_string_asprintf (const char *fmt, ...)
std::string
gmp_string_printf (const char *fmt, ...)
{
va_list vp;
char *buf;
va_start (vp, fmt);
gmp_vasprintf (&buf, fmt, vp);
int size = gmp_vsnprintf (NULL, 0, fmt, vp);
va_end (vp);
return gdb::unique_xmalloc_ptr<char> (buf);
std::string str (size, '\0');
/* C++11 and later guarantee std::string uses contiguous memory and
always includes the terminating '\0'. */
va_start (vp, fmt);
gmp_vsprintf (&str[0], fmt, vp);
va_end (vp);
return str;
}
/* See gmp-utils.h. */