From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28815 invoked by alias); 27 Oct 2004 22:56:48 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 28793 invoked from network); 27 Oct 2004 22:56:46 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 27 Oct 2004 22:56:46 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.11/8.12.11) with ESMTP id i9RMuf8L015610 for ; Wed, 27 Oct 2004 18:56:46 -0400 Received: from zenia.home.redhat.com (sebastian-int.corp.redhat.com [172.16.52.221]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i9RMuYr24536; Wed, 27 Oct 2004 18:56:35 -0400 To: gdb-patches@sources.redhat.com Subject: RFA: remote.c: parse thread ID's as unsigned values From: Jim Blandy Date: Wed, 27 Oct 2004 22:56:00 -0000 Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2004-10/txt/msg00461.txt.bz2 The GDB manual isn't clear on whether thread ID's carried in the responses to the qfThreadInfo and the qC packet may have a sign; I'm assuming that they're just a series of hex digits. 2004-10-27 Jim Blandy * remote.c (remote_threads_info, remote_current_thread): Use strtoul to parse thread ID numbers. Index: gdb/remote.c =================================================================== RCS file: /cvs/src/src/gdb/remote.c,v retrieving revision 1.134 diff -c -r1.134 remote.c *** gdb/remote.c 26 Apr 2004 09:02:41 -0000 1.134 --- gdb/remote.c 27 Oct 2004 21:26:40 -0000 *************** *** 1755,1761 **** putpkt ("qC"); getpkt (buf, (rs->remote_packet_size), 0); if (buf[0] == 'Q' && buf[1] == 'C') ! return pid_to_ptid (strtol (&buf[2], NULL, 16)); else return oldpid; } --- 1755,1766 ---- putpkt ("qC"); getpkt (buf, (rs->remote_packet_size), 0); if (buf[0] == 'Q' && buf[1] == 'C') ! /* Use strtoul here, so we'll correctly parse values whose highest ! bit is set. The protocol carries them as a simple series of ! hex digits; in the absence of a sign, strtol will see such ! values as positive numbers out of range for signed 'long', and ! return LONG_MAX to indicate an overflow. */ ! return pid_to_ptid (strtoul (&buf[2], NULL, 16)); else return oldpid; } *************** *** 1802,1808 **** { do { ! tid = strtol (bufp, &bufp, 16); if (tid != 0 && !in_thread_list (pid_to_ptid (tid))) add_thread (pid_to_ptid (tid)); } --- 1807,1819 ---- { do { ! /* Use strtoul here, so we'll correctly parse values ! whose highest bit is set. The protocol carries ! them as a simple series of hex digits; in the ! absence of a sign, strtol will see such values as ! positive numbers out of range for signed 'long', ! and return LONG_MAX to indicate an overflow. */ ! tid = strtoul (bufp, &bufp, 16); if (tid != 0 && !in_thread_list (pid_to_ptid (tid))) add_thread (pid_to_ptid (tid)); }