diff options
author | Tom Tromey <tom@tromey.com> | 2018-05-21 12:35:59 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-06-18 12:51:02 -0600 |
commit | b4be9fadea469e2c937c81a8f1d3243206f9bcfc (patch) | |
tree | 7ffa8ba6e9cc9c630d8775e71e30963d390e53c6 /gdb/c-lang.c | |
parent | 3f0dbd670b59aade6224aadcbc3a1943a4645a68 (diff) | |
download | gdb-b4be9fadea469e2c937c81a8f1d3243206f9bcfc.zip gdb-b4be9fadea469e2c937c81a8f1d3243206f9bcfc.tar.gz gdb-b4be9fadea469e2c937c81a8f1d3243206f9bcfc.tar.bz2 |
Use unique_xmalloc_ptr for read_string
This changes read_string's "buffer" out-parameter to be a
unique_xmalloc_ptr, then updates the users. This allows for the
removal of some cleanups.
I chose unique_xmalloc_ptr rather than byte_vector here due to the way
Guile unwinding seems to work.
Tested by the buildbot.
gdb/ChangeLog
2018-06-18 Tom Tromey <tom@tromey.com>
* valprint.h (read_string): Update.
* valprint.c (read_string): Change type of "buffer".
(val_print_string): Update.
* python/py-value.c (valpy_string): Update.
* language.h (struct language_defn) <la_get_string>: Change
type of "buffer".
(default_get_string, c_get_string): Update.
* language.c (default_get_string): Change type of "buffer".
* guile/scm-value.c (gdbscm_value_to_string): Update.
* c-lang.c (c_get_string): Change type of "buffer".
Diffstat (limited to 'gdb/c-lang.c')
-rw-r--r-- | gdb/c-lang.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 1c283a8..5ad5801 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -234,7 +234,7 @@ c_printstr (struct ui_file *stream, struct type *type, target charset. */ void -c_get_string (struct value *value, gdb_byte **buffer, +c_get_string (struct value *value, gdb::unique_xmalloc_ptr<gdb_byte> *buffer, int *length, struct type **char_type, const char **charset) { @@ -300,8 +300,8 @@ c_get_string (struct value *value, gdb_byte **buffer, /* I is now either a user-defined length, the number of non-null characters, or FETCHLIMIT. */ *length = i * width; - *buffer = (gdb_byte *) xmalloc (*length); - memcpy (*buffer, contents, *length); + buffer->reset ((gdb_byte *) xmalloc (*length)); + memcpy (buffer->get (), contents, *length); err = 0; } else @@ -326,10 +326,7 @@ c_get_string (struct value *value, gdb_byte **buffer, err = read_string (addr, *length, width, fetchlimit, byte_order, buffer, length); if (err != 0) - { - xfree (*buffer); - memory_error (TARGET_XFER_E_IO, addr); - } + memory_error (TARGET_XFER_E_IO, addr); } /* If the LENGTH is specified at -1, we want to return the string @@ -339,7 +336,7 @@ c_get_string (struct value *value, gdb_byte **buffer, if (req_length == -1) /* If the last character is null, subtract it from LENGTH. */ if (*length > 0 - && extract_unsigned_integer (*buffer + *length - width, + && extract_unsigned_integer (buffer->get () + *length - width, width, byte_order) == 0) *length -= width; |