Remove cleanup_iconv
This introduces a new "iconv_wrapper" class, to be used in convert_between_encodings. This allows the removal of cleanup_iconv. gdb/ChangeLog 2017-04-12 Tom Tromey <tom@tromey.com> * charset.c (iconv_wrapper): New class. (cleanup_iconv): Remove. (convert_between_encodings): Use it.
This commit is contained in:
parent
c83dd86726
commit
80a3b8c578
|
@ -1,3 +1,9 @@
|
|||
2017-04-12 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* charset.c (iconv_wrapper): New class.
|
||||
(cleanup_iconv): Remove.
|
||||
(convert_between_encodings): Use it.
|
||||
|
||||
2017-04-12 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* symfile.h (increment_reading_symtab): Update type.
|
||||
|
|
|
@ -481,14 +481,32 @@ host_hex_value (char c)
|
|||
|
||||
/* Public character management functions. */
|
||||
|
||||
/* A cleanup function which is run to close an iconv descriptor. */
|
||||
|
||||
static void
|
||||
cleanup_iconv (void *p)
|
||||
class iconv_wrapper
|
||||
{
|
||||
iconv_t *descp = (iconv_t *) p;
|
||||
iconv_close (*descp);
|
||||
}
|
||||
public:
|
||||
|
||||
iconv_wrapper (const char *to, const char *from)
|
||||
{
|
||||
m_desc = iconv_open (to, from);
|
||||
if (m_desc == (iconv_t) -1)
|
||||
perror_with_name (_("Converting character sets"));
|
||||
}
|
||||
|
||||
~iconv_wrapper ()
|
||||
{
|
||||
iconv_close (m_desc);
|
||||
}
|
||||
|
||||
size_t convert (ICONV_CONST char **inp, size_t *inleft, char **outp,
|
||||
size_t *outleft)
|
||||
{
|
||||
return iconv (m_desc, inp, inleft, outp, outleft);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
iconv_t m_desc;
|
||||
};
|
||||
|
||||
void
|
||||
convert_between_encodings (const char *from, const char *to,
|
||||
|
@ -496,8 +514,6 @@ convert_between_encodings (const char *from, const char *to,
|
|||
int width, struct obstack *output,
|
||||
enum transliterations translit)
|
||||
{
|
||||
iconv_t desc;
|
||||
struct cleanup *cleanups;
|
||||
size_t inleft;
|
||||
ICONV_CONST char *inp;
|
||||
unsigned int space_request;
|
||||
|
@ -509,10 +525,7 @@ convert_between_encodings (const char *from, const char *to,
|
|||
return;
|
||||
}
|
||||
|
||||
desc = iconv_open (to, from);
|
||||
if (desc == (iconv_t) -1)
|
||||
perror_with_name (_("Converting character sets"));
|
||||
cleanups = make_cleanup (cleanup_iconv, &desc);
|
||||
iconv_wrapper desc (to, from);
|
||||
|
||||
inleft = num_bytes;
|
||||
inp = (ICONV_CONST char *) bytes;
|
||||
|
@ -531,7 +544,7 @@ convert_between_encodings (const char *from, const char *to,
|
|||
outp = (char *) obstack_base (output) + old_size;
|
||||
outleft = space_request;
|
||||
|
||||
r = iconv (desc, &inp, &inleft, &outp, &outleft);
|
||||
r = desc.convert (&inp, &inleft, &outp, &outleft);
|
||||
|
||||
/* Now make sure that the object on the obstack only includes
|
||||
bytes we have converted. */
|
||||
|
@ -583,8 +596,6 @@ convert_between_encodings (const char *from, const char *to,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
do_cleanups (cleanups);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue