From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8938 invoked by alias); 3 Dec 2004 00:31:18 -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 8919 invoked from network); 3 Dec 2004 00:31:13 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 3 Dec 2004 00:31:13 -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 iB30VDd2013862 for ; Thu, 2 Dec 2004 19:31:13 -0500 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 iB30VBr12356; Thu, 2 Dec 2004 19:31:12 -0500 To: gdb-patches@sources.redhat.com Subject: Re: RFA: remote.c: parse thread ID's as unsigned values References: From: Jim Blandy Date: Fri, 03 Dec 2004 00:31:00 -0000 In-Reply-To: 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-12/txt/msg00054.txt.bz2 One month ping. Jim Blandy writes: > 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)); > }