Le 15/03/2022 à 20:05, Brendan Shanks a écrit :
Signed-off-by: Brendan Shanksbshanks@codeweavers.com
programs/winedbg/gdbproxy.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-)
diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c index bcde120adeb..60c69f81d23 100644 --- a/programs/winedbg/gdbproxy.c +++ b/programs/winedbg/gdbproxy.c @@ -1773,11 +1773,40 @@ static enum packet_return packet_query_libraries(struct gdb_context* gdbctx) return packet_send_buffer; }
+static char *get_thread_description(DWORD tid) +{
- HANDLE h;
- char *desc = NULL;
- WCHAR *descW = NULL;
- int len;
- h = OpenThread(THREAD_QUERY_LIMITED_INFORMATION, FALSE, tid);
- if (!h)
return NULL;
- GetThreadDescription(h, &descW);
- if (!descW)
goto cleanup;
- len = WideCharToMultiByte(CP_ACP, 0, descW, -1, NULL, 0, NULL, NULL);
- if (len <= 1) /* failure or empty string */
goto cleanup;
- desc = malloc(len);
- WideCharToMultiByte(CP_ACP, 0, descW, -1, desc, len, NULL, NULL);
+cleanup:
- LocalFree(descW);
- CloseHandle(h);
- return desc;
+}
static enum packet_return packet_query_threads(struct gdb_context* gdbctx) { struct reply_buffer* reply = &gdbctx->qxfer_buffer; struct dbg_process* process = gdbctx->process; struct dbg_thread* thread;
char *name;
if (!process) return packet_error;
@@ -1791,7 +1820,12 @@ static enum packet_return packet_query_threads(struct gdb_context* gdbctx) reply_buffer_append_str(reply, "id=""); reply_buffer_append_uinthex(reply, thread->tid, 4); reply_buffer_append_str(reply, "" name="");
if (strlen(thread->name))
if ((name = get_thread_description(thread->tid)))
{
reply_buffer_append_str(reply, name);
free(name);
}
else if (strlen(thread->name)) { reply_buffer_append_str(reply, thread->name); }
it's a bit ackward to add two implementations of get_thread_description ; moreover differing in ansi/unicode but also memory allocation strategy
it would be better to only have one (esp when considering that GetThreadDescription is only avail in W10)
IMO a single helper would be preferable
A+