aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2016-11-12 11:48:48 -0700
committerTom Tromey <tom@tromey.com>2017-01-10 19:13:55 -0700
commit1eba63835ea23cbae6059c076db985a47e39ce24 (patch)
tree9fb10dbc2c7b84b8d23df9464f16f6f19ccfdcea
parentbde7b3e3a0d5e1f0b66730d692b21c98a8686f75 (diff)
downloadgdb-1eba63835ea23cbae6059c076db985a47e39ce24.zip
gdb-1eba63835ea23cbae6059c076db985a47e39ce24.tar.gz
gdb-1eba63835ea23cbae6059c076db985a47e39ce24.tar.bz2
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.
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/python/py-lazy-string.c9
-rw-r--r--gdb/python/py-prettyprint.c10
-rw-r--r--gdb/python/python-internal.h3
-rw-r--r--gdb/varobj.c7
5 files changed, 22 insertions, 16 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4cb6ac6..8eb4390 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
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>
+
* varobj.c (varobj_get_display_hint)
(dynamic_varobj_has_child_method, install_new_value_visualizer)
(varobj_set_visualizer, free_variable): Use
diff --git a/gdb/python/py-lazy-string.c b/gdb/python/py-lazy-string.c
index 14575bf..4af4566 100644
--- a/gdb/python/py-lazy-string.c
+++ b/gdb/python/py-lazy-string.c
@@ -180,14 +180,13 @@ gdbpy_is_lazy_string (PyObject *result)
}
/* Extract the parameters from the lazy string object STRING.
- ENCODING will either be set to NULL, or will be allocated with
- xmalloc, in which case the callers is responsible for freeing
- it. */
+ ENCODING may be set to NULL, if no encoding is found. */
void
gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
struct type **str_type,
- long *length, char **encoding)
+ long *length,
+ gdb::unique_xmalloc_ptr<char> *encoding)
{
lazy_string_object *lazy;
@@ -198,7 +197,7 @@ gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
*addr = lazy->address;
*str_type = lazy->type;
*length = lazy->length;
- *encoding = lazy->encoding ? xstrdup (lazy->encoding) : NULL;
+ encoding->reset (lazy->encoding ? xstrdup (lazy->encoding) : NULL);
}
diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c
index a4bdf87..fb3d9b1 100644
--- a/gdb/python/py-prettyprint.c
+++ b/gdb/python/py-prettyprint.c
@@ -301,15 +301,14 @@ print_string_repr (PyObject *printer, const char *hint,
CORE_ADDR addr;
long length;
struct type *type;
- char *encoding = NULL;
+ gdb::unique_xmalloc_ptr<char> encoding;
struct value_print_options local_opts = *options;
- make_cleanup (free_current_contents, &encoding);
gdbpy_extract_lazy_string (py_str, &addr, &type,
&length, &encoding);
local_opts.addressprint = 0;
- val_print_string (type, encoding, addr, (int) length,
+ val_print_string (type, encoding.get (), addr, (int) length,
stream, &local_opts);
}
else
@@ -610,14 +609,13 @@ print_children (PyObject *printer, const char *hint,
CORE_ADDR addr;
struct type *type;
long length;
- char *encoding = NULL;
+ gdb::unique_xmalloc_ptr<char> encoding;
struct value_print_options local_opts = *options;
- make_cleanup (free_current_contents, &encoding);
gdbpy_extract_lazy_string (py_v, &addr, &type, &length, &encoding);
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);
}
else if (gdbpy_is_string (py_v))
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 41275bb..f231486 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -583,7 +583,8 @@ gdb::unique_xmalloc_ptr<char> gdbpy_exception_to_string (PyObject *ptype,
int gdbpy_is_lazy_string (PyObject *result);
void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
struct type **str_type,
- long *length, char **encoding);
+ long *length,
+ gdb::unique_xmalloc_ptr<char> *encoding);
int gdbpy_is_value_object (PyObject *obj);
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 43acc31..d75c9b8 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -2413,7 +2413,7 @@ varobj_value_get_print_value (struct value *value,
struct value_print_options opts;
struct type *type = NULL;
long len = 0;
- char *encoding = NULL;
+ gdb::unique_xmalloc_ptr<char> encoding;
/* Initialize it just to avoid a GCC false warning. */
CORE_ADDR str_addr = 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,
&len, &encoding);
- make_cleanup (free_current_contents, &encoding);
string_print = 1;
}
else
@@ -2520,11 +2519,11 @@ varobj_value_get_print_value (struct value *value,
/* If the THEVALUE has contents, it is a regular string. */
if (!thevalue.empty ())
LA_PRINT_STRING (stb, type, (gdb_byte *) thevalue.c_str (),
- len, encoding, 0, &opts);
+ len, encoding.get (), 0, &opts);
else if (string_print)
/* Otherwise, if string_print is set, and it is not a regular
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
/* All other cases. */
common_val_print (value, stb, 0, &opts, current_language);