[v2,1/3] Constify thread name return path

Message ID 1448488138-2360-2-git-send-email-simon.marchi@ericsson.com
State New, archived
Headers

Commit Message

Simon Marchi Nov. 25, 2015, 9:48 p.m. UTC
  Since this code path returns a string owned by the target (we don't know how
it's allocated, could be a static read-only string), it's safer if we return
a constant string.  If, for some reasons, the caller wishes to modify the
string, it should make itself a copy.

gdb/ChangeLog:

	* linux-nat.c (linux_nat_thread_name): Constify return value.
	* target.h (struct target_ops) <to_thread_name>: Likewise.
	(target_thread_name): Likewise.
	* target.c (target_thread_name): Likewise.
	* target-delegates.c (debug_thread_name): Regenerate.
	* python/py-infthread.c (thpy_get_name): Constify local variables.
	* thread.c (print_thread_info): Likewise.
	(thread_find_command): Likewise.
---
 gdb/linux-nat.c           |  2 +-
 gdb/python/py-infthread.c |  2 +-
 gdb/target-delegates.c    | 10 +++++-----
 gdb/target.c              |  2 +-
 gdb/target.h              |  4 ++--
 gdb/thread.c              |  4 ++--
 6 files changed, 12 insertions(+), 12 deletions(-)
  

Comments

Pedro Alves Nov. 26, 2015, 11:21 a.m. UTC | #1
On 11/25/2015 09:48 PM, Simon Marchi wrote:
> Since this code path returns a string owned by the target (we don't know how
> it's allocated, could be a static read-only string), it's safer if we return
> a constant string.  If, for some reasons, the caller wishes to modify the
> string, it should make itself a copy.
> 
> gdb/ChangeLog:
> 
> 	* linux-nat.c (linux_nat_thread_name): Constify return value.
> 	* target.h (struct target_ops) <to_thread_name>: Likewise.
> 	(target_thread_name): Likewise.
> 	* target.c (target_thread_name): Likewise.
> 	* target-delegates.c (debug_thread_name): Regenerate.
> 	* python/py-infthread.c (thpy_get_name): Constify local variables.
> 	* thread.c (print_thread_info): Likewise.
> 	(thread_find_command): Likewise.

OK.

Thanks,
Pedro Alves
  
Simon Marchi Nov. 26, 2015, 3:46 p.m. UTC | #2
On 15-11-26 06:21 AM, Pedro Alves wrote:
> On 11/25/2015 09:48 PM, Simon Marchi wrote:
>> Since this code path returns a string owned by the target (we don't know how
>> it's allocated, could be a static read-only string), it's safer if we return
>> a constant string.  If, for some reasons, the caller wishes to modify the
>> string, it should make itself a copy.
>>
>> gdb/ChangeLog:
>>
>> 	* linux-nat.c (linux_nat_thread_name): Constify return value.
>> 	* target.h (struct target_ops) <to_thread_name>: Likewise.
>> 	(target_thread_name): Likewise.
>> 	* target.c (target_thread_name): Likewise.
>> 	* target-delegates.c (debug_thread_name): Regenerate.
>> 	* python/py-infthread.c (thpy_get_name): Constify local variables.
>> 	* thread.c (print_thread_info): Likewise.
>> 	(thread_find_command): Likewise.
> 
> OK.
> 
> Thanks,
> Pedro Alves
> 

Thanks, pushed.
  

Patch

diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 841ec39..2421687 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -4097,7 +4097,7 @@  linux_nat_pid_to_str (struct target_ops *ops, ptid_t ptid)
   return normal_pid_to_str (ptid);
 }
 
-static char *
+static const char *
 linux_nat_thread_name (struct target_ops *self, struct thread_info *thr)
 {
   int pid = ptid_get_pid (thr->ptid);
diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c
index 4d0a020..e5db354 100644
--- a/gdb/python/py-infthread.c
+++ b/gdb/python/py-infthread.c
@@ -62,7 +62,7 @@  static PyObject *
 thpy_get_name (PyObject *self, void *ignore)
 {
   thread_object *thread_obj = (thread_object *) self;
-  char *name;
+  const char *name;
 
   THPY_REQUIRE_VALID (thread_obj);
 
diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c
index 253c9d7..b41b316 100644
--- a/gdb/target-delegates.c
+++ b/gdb/target-delegates.c
@@ -1530,23 +1530,23 @@  debug_extra_thread_info (struct target_ops *self, struct thread_info *arg1)
   return result;
 }
 
-static char *
+static const char *
 delegate_thread_name (struct target_ops *self, struct thread_info *arg1)
 {
   self = self->beneath;
   return self->to_thread_name (self, arg1);
 }
 
-static char *
+static const char *
 tdefault_thread_name (struct target_ops *self, struct thread_info *arg1)
 {
   return NULL;
 }
 
-static char *
+static const char *
 debug_thread_name (struct target_ops *self, struct thread_info *arg1)
 {
-  char * result;
+  const char * result;
   fprintf_unfiltered (gdb_stdlog, "-> %s->to_thread_name (...)\n", debug_target.to_shortname);
   result = debug_target.to_thread_name (&debug_target, arg1);
   fprintf_unfiltered (gdb_stdlog, "<- %s->to_thread_name (", debug_target.to_shortname);
@@ -1554,7 +1554,7 @@  debug_thread_name (struct target_ops *self, struct thread_info *arg1)
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_struct_thread_info_p (arg1);
   fputs_unfiltered (") = ", gdb_stdlog);
-  target_debug_print_char_p (result);
+  target_debug_print_const_char_p (result);
   fputs_unfiltered ("\n", gdb_stdlog);
   return result;
 }
diff --git a/gdb/target.c b/gdb/target.c
index 2365cd3..b43c12a 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -2265,7 +2265,7 @@  target_pid_to_str (ptid_t ptid)
   return (*current_target.to_pid_to_str) (&current_target, ptid);
 }
 
-char *
+const char *
 target_thread_name (struct thread_info *info)
 {
   return current_target.to_thread_name (&current_target, info);
diff --git a/gdb/target.h b/gdb/target.h
index e80bee5..ac28a41 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -639,7 +639,7 @@  struct target_ops
       TARGET_DEFAULT_FUNC (default_pid_to_str);
     char *(*to_extra_thread_info) (struct target_ops *, struct thread_info *)
       TARGET_DEFAULT_RETURN (NULL);
-    char *(*to_thread_name) (struct target_ops *, struct thread_info *)
+    const char *(*to_thread_name) (struct target_ops *, struct thread_info *)
       TARGET_DEFAULT_RETURN (NULL);
     void (*to_stop) (struct target_ops *, ptid_t)
       TARGET_DEFAULT_IGNORE ();
@@ -1823,7 +1823,7 @@  extern char *normal_pid_to_str (ptid_t ptid);
 /* Return the thread's name.  A NULL result means that the target
    could not determine this thread's name.  */
 
-extern char *target_thread_name (struct thread_info *);
+extern const char *target_thread_name (struct thread_info *);
 
 /* Attempts to find the pathname of the executable file
    that was run to create a specified process.
diff --git a/gdb/thread.c b/gdb/thread.c
index b47d990..f8103bd 100644
--- a/gdb/thread.c
+++ b/gdb/thread.c
@@ -1122,7 +1122,7 @@  print_thread_info (struct ui_out *uiout, char *requested_threads, int pid)
   struct thread_info *tp;
   ptid_t current_ptid;
   struct cleanup *old_chain;
-  char *extra_info, *name, *target_id;
+  const char *extra_info, *name, *target_id;
   int current_thread = -1;
 
   update_thread_list ();
@@ -1781,7 +1781,7 @@  static void
 thread_find_command (char *arg, int from_tty)
 {
   struct thread_info *tp;
-  char *tmp;
+  const char *tmp;
   unsigned long match = 0;
 
   if (arg == NULL || *arg == '\0')