From 7462f1858ce696c651442f74e2fb0e1b664b29b5 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 2 Aug 2017 13:22:38 -0700 Subject: [PATCH] Fix reference to out of scope local in adb_thread_setname. Bug: https://android-review.googlesource.com/#/c/168725/5/adb/sysdeps.h@639 Test: boots, adbd thread names look sane Signed-off-by: Ivan Maidanski Change-Id: Ib3bdf53658f3903de8f0a5688f7d77745e677c77 --- adb/sysdeps.h | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/adb/sysdeps.h b/adb/sysdeps.h index 49c784779..0abb680d3 100644 --- a/adb/sysdeps.h +++ b/adb/sysdeps.h @@ -582,18 +582,12 @@ static __inline__ int adb_thread_setname(const std::string& name) { #ifdef __APPLE__ return pthread_setname_np(name.c_str()); #else - const char *s = name.c_str(); - - // pthread_setname_np fails rather than truncating long strings. - const int max_task_comm_len = 16; // including the null terminator - if (name.length() > (max_task_comm_len - 1)) { - char buf[max_task_comm_len]; - strncpy(buf, name.c_str(), sizeof(buf) - 1); - buf[sizeof(buf) - 1] = '\0'; - s = buf; - } - - return pthread_setname_np(pthread_self(), s) ; + // Both bionic and glibc's pthread_setname_np fails rather than truncating long strings. + // glibc doesn't have strlcpy, so we have to fake it. + char buf[16]; // MAX_TASK_COMM_LEN, but that's not exported by the kernel headers. + strncpy(buf, name.c_str(), sizeof(buf) - 1); + buf[sizeof(buf) - 1] = '\0'; + return pthread_setname_np(pthread_self(), buf); #endif }