forked from Imagelibrary/binutils-gdb
Change type of encoding argument to gdbpy_extract_lazy_string
This changes gdbpy_extract_lazy_string's "encoding" argument to be a unique_xmalloc_ptr. I chose this rather than std::string because it can sometimes be NULL. 2017-01-10 Tom Tromey <tom@tromey.com> * python/py-prettyprint.c (print_string_repr, print_children): Update. * python/py-lazy-string.c (gdbpy_extract_lazy_string): Change type of "encoding". * varobj.c (varobj_value_get_print_value): Update. * python/python-internal.h (gdbpy_extract_lazy_string): Update.
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
|
2017-01-10 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* python/py-prettyprint.c (print_string_repr, print_children):
|
||||||
|
Update.
|
||||||
|
* python/py-lazy-string.c (gdbpy_extract_lazy_string): Change type
|
||||||
|
of "encoding".
|
||||||
|
* varobj.c (varobj_value_get_print_value): Update.
|
||||||
|
* python/python-internal.h (gdbpy_extract_lazy_string): Update.
|
||||||
|
|
||||||
2017-01-10 Tom Tromey <tom@tromey.com>
|
2017-01-10 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* varobj.c (varobj_get_display_hint)
|
* varobj.c (varobj_get_display_hint)
|
||||||
|
|||||||
@@ -180,14 +180,13 @@ gdbpy_is_lazy_string (PyObject *result)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Extract the parameters from the lazy string object STRING.
|
/* Extract the parameters from the lazy string object STRING.
|
||||||
ENCODING will either be set to NULL, or will be allocated with
|
ENCODING may be set to NULL, if no encoding is found. */
|
||||||
xmalloc, in which case the callers is responsible for freeing
|
|
||||||
it. */
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
|
gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
|
||||||
struct type **str_type,
|
struct type **str_type,
|
||||||
long *length, char **encoding)
|
long *length,
|
||||||
|
gdb::unique_xmalloc_ptr<char> *encoding)
|
||||||
{
|
{
|
||||||
lazy_string_object *lazy;
|
lazy_string_object *lazy;
|
||||||
|
|
||||||
@@ -198,7 +197,7 @@ gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
|
|||||||
*addr = lazy->address;
|
*addr = lazy->address;
|
||||||
*str_type = lazy->type;
|
*str_type = lazy->type;
|
||||||
*length = lazy->length;
|
*length = lazy->length;
|
||||||
*encoding = lazy->encoding ? xstrdup (lazy->encoding) : NULL;
|
encoding->reset (lazy->encoding ? xstrdup (lazy->encoding) : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -301,15 +301,14 @@ print_string_repr (PyObject *printer, const char *hint,
|
|||||||
CORE_ADDR addr;
|
CORE_ADDR addr;
|
||||||
long length;
|
long length;
|
||||||
struct type *type;
|
struct type *type;
|
||||||
char *encoding = NULL;
|
gdb::unique_xmalloc_ptr<char> encoding;
|
||||||
struct value_print_options local_opts = *options;
|
struct value_print_options local_opts = *options;
|
||||||
|
|
||||||
make_cleanup (free_current_contents, &encoding);
|
|
||||||
gdbpy_extract_lazy_string (py_str, &addr, &type,
|
gdbpy_extract_lazy_string (py_str, &addr, &type,
|
||||||
&length, &encoding);
|
&length, &encoding);
|
||||||
|
|
||||||
local_opts.addressprint = 0;
|
local_opts.addressprint = 0;
|
||||||
val_print_string (type, encoding, addr, (int) length,
|
val_print_string (type, encoding.get (), addr, (int) length,
|
||||||
stream, &local_opts);
|
stream, &local_opts);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -610,14 +609,13 @@ print_children (PyObject *printer, const char *hint,
|
|||||||
CORE_ADDR addr;
|
CORE_ADDR addr;
|
||||||
struct type *type;
|
struct type *type;
|
||||||
long length;
|
long length;
|
||||||
char *encoding = NULL;
|
gdb::unique_xmalloc_ptr<char> encoding;
|
||||||
struct value_print_options local_opts = *options;
|
struct value_print_options local_opts = *options;
|
||||||
|
|
||||||
make_cleanup (free_current_contents, &encoding);
|
|
||||||
gdbpy_extract_lazy_string (py_v, &addr, &type, &length, &encoding);
|
gdbpy_extract_lazy_string (py_v, &addr, &type, &length, &encoding);
|
||||||
|
|
||||||
local_opts.addressprint = 0;
|
local_opts.addressprint = 0;
|
||||||
val_print_string (type, encoding, addr, (int) length, stream,
|
val_print_string (type, encoding.get (), addr, (int) length, stream,
|
||||||
&local_opts);
|
&local_opts);
|
||||||
}
|
}
|
||||||
else if (gdbpy_is_string (py_v))
|
else if (gdbpy_is_string (py_v))
|
||||||
|
|||||||
@@ -583,7 +583,8 @@ gdb::unique_xmalloc_ptr<char> gdbpy_exception_to_string (PyObject *ptype,
|
|||||||
int gdbpy_is_lazy_string (PyObject *result);
|
int gdbpy_is_lazy_string (PyObject *result);
|
||||||
void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
|
void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
|
||||||
struct type **str_type,
|
struct type **str_type,
|
||||||
long *length, char **encoding);
|
long *length,
|
||||||
|
gdb::unique_xmalloc_ptr<char> *encoding);
|
||||||
|
|
||||||
int gdbpy_is_value_object (PyObject *obj);
|
int gdbpy_is_value_object (PyObject *obj);
|
||||||
|
|
||||||
|
|||||||
@@ -2413,7 +2413,7 @@ varobj_value_get_print_value (struct value *value,
|
|||||||
struct value_print_options opts;
|
struct value_print_options opts;
|
||||||
struct type *type = NULL;
|
struct type *type = NULL;
|
||||||
long len = 0;
|
long len = 0;
|
||||||
char *encoding = NULL;
|
gdb::unique_xmalloc_ptr<char> encoding;
|
||||||
/* Initialize it just to avoid a GCC false warning. */
|
/* Initialize it just to avoid a GCC false warning. */
|
||||||
CORE_ADDR str_addr = 0;
|
CORE_ADDR str_addr = 0;
|
||||||
int string_print = 0;
|
int string_print = 0;
|
||||||
@@ -2464,7 +2464,6 @@ varobj_value_get_print_value (struct value *value,
|
|||||||
{
|
{
|
||||||
gdbpy_extract_lazy_string (output, &str_addr, &type,
|
gdbpy_extract_lazy_string (output, &str_addr, &type,
|
||||||
&len, &encoding);
|
&len, &encoding);
|
||||||
make_cleanup (free_current_contents, &encoding);
|
|
||||||
string_print = 1;
|
string_print = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -2520,11 +2519,11 @@ varobj_value_get_print_value (struct value *value,
|
|||||||
/* If the THEVALUE has contents, it is a regular string. */
|
/* If the THEVALUE has contents, it is a regular string. */
|
||||||
if (!thevalue.empty ())
|
if (!thevalue.empty ())
|
||||||
LA_PRINT_STRING (stb, type, (gdb_byte *) thevalue.c_str (),
|
LA_PRINT_STRING (stb, type, (gdb_byte *) thevalue.c_str (),
|
||||||
len, encoding, 0, &opts);
|
len, encoding.get (), 0, &opts);
|
||||||
else if (string_print)
|
else if (string_print)
|
||||||
/* Otherwise, if string_print is set, and it is not a regular
|
/* Otherwise, if string_print is set, and it is not a regular
|
||||||
string, it is a lazy string. */
|
string, it is a lazy string. */
|
||||||
val_print_string (type, encoding, str_addr, len, stb, &opts);
|
val_print_string (type, encoding.get (), str_addr, len, stb, &opts);
|
||||||
else
|
else
|
||||||
/* All other cases. */
|
/* All other cases. */
|
||||||
common_val_print (value, stb, 0, &opts, current_language);
|
common_val_print (value, stb, 0, &opts, current_language);
|
||||||
|
|||||||
Reference in New Issue
Block a user