From 4ae6cc19626d010005fbfbfba72952d26cc7c728 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Tue, 29 Mar 2016 23:48:35 -0700 Subject: [PATCH] python/py-utils.c (host_string_to_python_string): New function. gdb/ChangeLog: * python/py-utils.c (host_string_to_python_string): New function. * python/python-internal.h (host_string_to_python_string): Declare it. * python/py-*.c (*): Update all calls to PyString_Decode (str, strlen (str), host_charset (), NULL); to use host_string_to_python_string instead. --- gdb/ChangeLog | 8 ++++++++ gdb/python/py-breakpoint.c | 8 ++++---- gdb/python/py-objfile.c | 10 +++------- gdb/python/py-progspace.c | 4 +--- gdb/python/py-symtab.c | 8 +++----- gdb/python/py-utils.c | 8 ++++++++ gdb/python/python-internal.h | 1 + gdb/python/python.c | 4 ++-- 8 files changed, 30 insertions(+), 21 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f69458b822..7d1429c6ff 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2016-03-30 Doug Evans + + * python/py-utils.c (host_string_to_python_string): New function. + * python/python-internal.h (host_string_to_python_string): Declare it. + * python/py-*.c (*): Update all calls to + PyString_Decode (str, strlen (str), host_charset (), NULL); + to use host_string_to_python_string instead. + 2016-03-30 Marcin Koƛcielnicki * remote.c (remote_check_symbols): Allocate own buffer for reply. diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c index 964ec6204f..611a41e182 100644 --- a/gdb/python/py-breakpoint.c +++ b/gdb/python/py-breakpoint.c @@ -392,7 +392,7 @@ bppy_get_location (PyObject *self, void *closure) str = event_location_to_string (obj->bp->location); if (! str) str = ""; - return PyString_Decode (str, strlen (str), host_charset (), NULL); + return host_string_to_python_string (str); } /* Python function to get the breakpoint expression. */ @@ -414,7 +414,7 @@ bppy_get_expression (PyObject *self, void *closure) if (! str) str = ""; - return PyString_Decode (str, strlen (str), host_charset (), NULL); + return host_string_to_python_string (str); } /* Python function to get the condition expression of a breakpoint. */ @@ -430,7 +430,7 @@ bppy_get_condition (PyObject *self, void *closure) if (! str) Py_RETURN_NONE; - return PyString_Decode (str, strlen (str), host_charset (), NULL); + return host_string_to_python_string (str); } /* Returns 0 on success. Returns -1 on error, with a python exception set. @@ -515,7 +515,7 @@ bppy_get_commands (PyObject *self, void *closure) ui_out_redirect (current_uiout, NULL); cmdstr = ui_file_xstrdup (string_file, &length); make_cleanup (xfree, cmdstr); - result = PyString_Decode (cmdstr, strlen (cmdstr), host_charset (), NULL); + result = host_string_to_python_string (cmdstr); do_cleanups (chain); return result; } diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c index 89c1551817..cd26c5b49c 100644 --- a/gdb/python/py-objfile.c +++ b/gdb/python/py-objfile.c @@ -78,9 +78,7 @@ objfpy_get_filename (PyObject *self, void *closure) objfile_object *obj = (objfile_object *) self; if (obj->objfile) - return PyString_Decode (objfile_name (obj->objfile), - strlen (objfile_name (obj->objfile)), - host_charset (), NULL); + return host_string_to_python_string (objfile_name (obj->objfile)); Py_RETURN_NONE; } @@ -96,8 +94,7 @@ objfpy_get_username (PyObject *self, void *closure) { const char *username = obj->objfile->original_name; - return PyString_Decode (username, strlen (username), - host_charset (), NULL); + return host_string_to_python_string (username); } Py_RETURN_NONE; @@ -152,8 +149,7 @@ objfpy_get_build_id (PyObject *self, void *closure) char *hex_form = make_hex_string (build_id->data, build_id->size); PyObject *result; - result = PyString_Decode (hex_form, strlen (hex_form), - host_charset (), NULL); + result = host_string_to_python_string (hex_form); xfree (hex_form); return result; } diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c index 62a5c7ad37..e1258c7625 100644 --- a/gdb/python/py-progspace.c +++ b/gdb/python/py-progspace.c @@ -71,9 +71,7 @@ pspy_get_filename (PyObject *self, void *closure) struct objfile *objfile = obj->pspace->symfile_object_file; if (objfile) - return PyString_Decode (objfile_name (objfile), - strlen (objfile_name (objfile)), - host_charset (), NULL); + return host_string_to_python_string (objfile_name (objfile)); } Py_RETURN_NONE; } diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index d08496969c..c3c94e5573 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -108,8 +108,7 @@ stpy_get_filename (PyObject *self, void *closure) STPY_REQUIRE_VALID (self, symtab); filename = symtab_to_filename_for_display (symtab); - str_obj = PyString_Decode (filename, strlen (filename), - host_charset (), NULL); + str_obj = host_string_to_python_string (filename); return str_obj; } @@ -140,8 +139,7 @@ stpy_get_producer (PyObject *self, void *closure) { const char *producer = COMPUNIT_PRODUCER (cust); - return PyString_Decode (producer, strlen (producer), - host_charset (), NULL); + return host_string_to_python_string (producer); } Py_RETURN_NONE; @@ -157,7 +155,7 @@ stpy_fullname (PyObject *self, PyObject *args) fullname = symtab_to_fullname (symtab); - return PyString_Decode (fullname, strlen (fullname), host_charset (), NULL); + return host_string_to_python_string (fullname); } /* Implementation of gdb.Symtab.is_valid (self) -> Boolean. diff --git a/gdb/python/py-utils.c b/gdb/python/py-utils.c index a7e79e3ac7..2e2121d6d6 100644 --- a/gdb/python/py-utils.c +++ b/gdb/python/py-utils.c @@ -221,6 +221,14 @@ python_string_to_host_string (PyObject *obj) return result; } +/* Convert a host string to a python string. */ + +PyObject * +host_string_to_python_string (const char *str) +{ + return PyString_Decode (str, strlen (str), host_charset (), NULL); +} + /* Return true if OBJ is a Python string or unicode object, false otherwise. */ diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 731402be2f..6a2619cd71 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -538,6 +538,7 @@ char *unicode_to_target_string (PyObject *unicode_str); char *python_string_to_target_string (PyObject *obj); PyObject *python_string_to_target_python_string (PyObject *obj); char *python_string_to_host_string (PyObject *obj); +PyObject *host_string_to_python_string (const char *str); int gdbpy_is_string (PyObject *obj); char *gdbpy_obj_to_string (PyObject *obj); char *gdbpy_exception_to_string (PyObject *ptype, PyObject *pvalue); diff --git a/gdb/python/python.c b/gdb/python/python.c index 7202105b5f..84f05965e1 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -516,7 +516,7 @@ gdbpy_parameter_value (enum var_types type, void *var) if (! str) str = ""; - return PyString_Decode (str, strlen (str), host_charset (), NULL); + return host_string_to_python_string (str); } case var_boolean: @@ -706,7 +706,7 @@ gdbpy_solib_name (PyObject *self, PyObject *args) soname = solib_name_from_address (current_program_space, pc); if (soname) - str_obj = PyString_Decode (soname, strlen (soname), host_charset (), NULL); + str_obj = host_string_to_python_string (soname); else { str_obj = Py_None;