From: Michael Snyder <msnyder@vmware.com>
To: Pedro Alves <pedro@codesourcery.com>
Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: [commit] fix for "info threads" printing multiple headers
Date: Tue, 22 Feb 2011 18:31:00 -0000 [thread overview]
Message-ID: <4D63FF97.7070903@vmware.com> (raw)
In-Reply-To: <201102220851.20252.pedro@codesourcery.com>
[-- Attachment #1: Type: text/plain, Size: 2384 bytes --]
Pedro Alves wrote:
> Thanks! A few comments below. If you don't want to
> fix these, I'll try to find a bit later on myself.
>
> On Monday 21 February 2011 23:40:06, Michael Snyder wrote:
>> +int
>> +number_is_in_list (char *list, int number)
>> +{
>> + if (list == NULL || *list == '\0')
>> + return 1;
>> +
>> + while (list != NULL && *list != '\0')
>> + if (get_number_or_range (&list) == number)
>> + return 1;
>> +
>> + return 0;
>> +}
>
> - why the 'list != NULL' check in the while loop?
> get_number_or_range never puts NULL in the output
> argument, and NULL lists are short circuited above.
Habit and symmetry. I'll change it.
>
> - get_number_or_range mantains an internal state machine
> using static variables. I think that as long as you
> always pass in the same list string, and the list spec
> string is correctly formed, you're not hitting stale
> state inside get_number_or_range. It'd be nicer
> if get_number_or_range (or a variant which get_number_or_range
> would then be implemented on top of) took an additional
> struct pointer that pointed to a struct that held
> all the currently static state. This function would then
> always pass in a pointer into such a newly initialized
> object on the stack.
>
> - get_number_or_range returns '0' on error. You can
> see a bunch of its old callers in breakpoint.c handling
> that '0' case specially. It comes from get_number_trailer:
>
> /* Return zero, which caller must interpret as error. */
> retval = 0;
>
> I suspect that we'll want to make than an "error" call or
> to adjust the interface of these functions to allow
> returning an error indication unambiguous with zero
> the number, as soon as we want to reuse this function
> in places where zero makes sense as valid number...
>
> Examples of not handling the special zero:
>
> (gdb) info threads a 1
> Id Target Id Frame
> * 1 Thread 0x7ffff7fd6700 (LWP 13769) "threads" 0x00007ffff7bc7285 in pthread_join () from /lib/libpthread.so.0
> (gdb)
>
> (gdb) info threads a-1
> No threads match 'a-1'.
>
> (gdb) info threads a -1
> Id Target Id Frame
> * 1 Thread 0x7ffff7fd6700 (LWP 13769) "threads" 0x00007ffff7bc7285 in pthread_join () from /lib/libpthread.so.0
> (gdb)
>
> The last one only "works" by accident due to the extra space.
OK, test for zero added, how's this?
[-- Attachment #2: zero.txt --]
[-- Type: text/plain, Size: 859 bytes --]
2011-02-22 Michael Snyder <msnyder@vmware.com>
* cli/cli-utils.c (number_is_in_list): Check for zero return.
Index: cli/cli-utils.c
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-utils.c,v
retrieving revision 1.9
diff -u -p -u -p -r1.9 cli-utils.c
--- cli/cli-utils.c 21 Feb 2011 23:40:46 -0000 1.9
+++ cli/cli-utils.c 22 Feb 2011 18:24:22 -0000
@@ -175,10 +175,15 @@ number_is_in_list (char *list, int numbe
if (list == NULL || *list == '\0')
return 1;
- while (list != NULL && *list != '\0')
- if (get_number_or_range (&list) == number)
- return 1;
+ while (*list != '\0')
+ {
+ int gotnum = get_number_or_range (&list);
+ if (gotnum == 0)
+ error (_("Args must be numbers or '$' variables."));
+ if (gotnum == number)
+ return 1;
+ }
return 0;
}
next prev parent reply other threads:[~2011-02-22 18:25 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-22 1:57 Michael Snyder
2011-02-22 9:17 ` Pedro Alves
2011-02-22 10:04 ` Pedro Alves
2011-02-22 17:45 ` Tom Tromey
2011-02-22 18:37 ` Michael Snyder
2011-02-22 18:49 ` Pedro Alves
2011-02-22 18:31 ` Michael Snyder [this message]
2011-02-22 18:41 ` Pedro Alves
2011-02-22 18:55 ` Michael Snyder
2011-02-22 17:37 ` Tom Tromey
2011-02-22 18:36 ` Michael Snyder
2011-02-22 19:00 ` Tom Tromey
2011-02-22 20:05 ` Michael Snyder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D63FF97.7070903@vmware.com \
--to=msnyder@vmware.com \
--cc=gdb-patches@sourceware.org \
--cc=pedro@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox