From: Guillaume Leconte <guillaume.leconte@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: gdb-patches@sourceware.org
Subject: Re: [patch] delete a range of display numbers
Date: Fri, 18 Feb 2011 11:48:00 -0000 [thread overview]
Message-ID: <AANLkTi=Gpmr-Atf8zr5Ycf7Ct-sAp8H5atAYCovSOnAA@mail.gmail.com> (raw)
In-Reply-To: <83vd0hvdls.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 951 bytes --]
Thank you for this suggestion. I added the modification you asked for
in the attached file.
Guillaume.
On Fri, Feb 18, 2011 at 11:30 AM, Eli Zaretskii <eliz@gnu.org> wrote:
>> Date: Fri, 18 Feb 2011 10:36:18 +0100
>> From: Guillaume Leconte <guillaume.leconte@gmail.com>
>>
>> Notice that I've change the prototype of delete_display() in order
>> to have a silent return in case of unknown number. If you have set
>> the display numbers 1, 2, 3 and 5, you can remove 2-5 without any
>> error messages (number 4 is missing in the list). As a consequence,
>> you can also remove out of bound numbers, as in 'delete display 5-42'
>> without having gdb complaining.
>
> I think it's a convenient feature, but doing this silently may not be
> a good idea. How about displaying a note about this? Something like
>
> (Ignored some display numbers.)
>
> WDYT?
>
--
"A fellow of infinite jest, of most excellent fancy."
[-- Attachment #2: delete-display-range.patch --]
[-- Type: text/x-patch, Size: 3478 bytes --]
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 29ffbf5..8ab1a54 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -1557,13 +1557,18 @@ clear_displays (void)
/* Delete the auto-display number NUM. */
-static void
-delete_display (int num)
+static int
+delete_display (int num, int ignore)
{
struct display *d1, *d;
if (!display_chain)
- error (_("No display number %d."), num);
+ {
+ if (ignore)
+ return 1;
+ printf_filtered (_("No display number %d.\n"), num);
+ return -1;
+ }
if (display_chain->number == num)
{
@@ -1575,7 +1580,12 @@ delete_display (int num)
for (d = display_chain;; d = d->next)
{
if (d->next == 0)
- error (_("No display number %d."), num);
+ {
+ if (ignore)
+ return 1;
+ printf_filtered (_("No display number %d.\n"), num);
+ return -1;
+ }
if (d->next->number == num)
{
d1 = d->next;
@@ -1584,6 +1594,42 @@ delete_display (int num)
break;
}
}
+
+ return 0;
+}
+
+static int
+set_int_from_str(char *str, int *result, char *end_delim)
+{
+ char *p;
+ int ret;
+ char *occurrence;
+
+ p = str;
+ ret = -1;
+
+ if (! str)
+ goto err;
+
+ while (p && *p && (' ' == *p || '\t' == *p))
+ p++;
+
+ while (p && *p && *p >= '0' && *p <= '9')
+ p++;
+
+ if (p && *p)
+ {
+ occurrence = strpbrk(p, end_delim);
+ if (! occurrence || occurrence != p)
+ goto err;
+ }
+
+ if (result)
+ *result = atoi(str);
+
+ ret = 0;
+ err:
+ return ret;
}
/* Delete some values from the auto-display chain.
@@ -1595,6 +1641,9 @@ undisplay_command (char *args, int from_tty)
char *p = args;
char *p1;
int num;
+ int lower, upper, i;
+ char *dash;
+ int err;
if (args == 0)
{
@@ -1604,23 +1653,52 @@ undisplay_command (char *args, int from_tty)
return;
}
- while (*p)
+ dash = strchr(p, '-');
+ if (dash) /* remove all the display IDs within a range */
+ {
+ err = 0;
+
+ if (-1 == set_int_from_str(p, &lower, "- \t"))
+ error (_("Arguments must be display numbers."));
+
+ p = dash+1;
+ while (p && *p && (' ' == *p || '\t' == *p))
+ p++;
+
+ if (-1 == set_int_from_str(p, &upper, " \t"))
+ error (_("Arguments must be display numbers."));
+
+ for (i = lower; i <= upper; i++)
+ err += delete_display (i, 1);
+
+ /* since we called delete_display with 1 as the second argument,
+ we know that err is 0 or > 0. It can not be negative. */
+ if (err)
+ printf_filtered (_("(Ignored some display numbers)\n"));
+
+ dont_repeat ();
+ }
+ else
{
- p1 = p;
- while (*p1 >= '0' && *p1 <= '9')
- p1++;
- if (*p1 && *p1 != ' ' && *p1 != '\t')
- error (_("Arguments must be display numbers."));
+ while (*p)
+ {
+ p1 = p;
+ while (*p1 >= '0' && *p1 <= '9')
+ p1++;
+ if (*p1 && *p1 != ' ' && *p1 != '\t')
+ error (_("Arguments must be display numbers."));
- num = atoi (p);
+ num = atoi (p);
- delete_display (num);
+ if (-1 == delete_display (num, 0))
+ return;
- p = p1;
- while (*p == ' ' || *p == '\t')
- p++;
+ p = p1;
+ while (*p == ' ' || *p == '\t')
+ p++;
+ }
+ dont_repeat ();
}
- dont_repeat ();
}
/* Display a single auto-display.
next prev parent reply other threads:[~2011-02-18 11:34 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-18 9:47 Guillaume Leconte
2011-02-18 10:30 ` Guillaume Leconte
2011-02-18 11:08 ` Eli Zaretskii
2011-02-18 11:48 ` Guillaume Leconte [this message]
2011-02-18 12:17 ` Pedro Alves
2011-02-18 14:41 ` Guillaume Leconte
2011-02-18 15:14 ` Tom Tromey
2011-02-18 15:58 ` Pedro Alves
2011-02-18 16:48 ` Tom Tromey
2011-02-18 16:57 ` Pedro Alves
2011-02-18 17:41 ` Eli Zaretskii
2011-02-18 17:54 ` Pedro Alves
2011-02-18 17:54 ` Michael Snyder
2011-02-18 18:06 ` Pedro Alves
2011-03-14 21:24 ` [patch+docs] make 'disable|enable display' also accept ranges (Re: [patch] delete a range of display numbers) Pedro Alves
2011-03-14 21:34 ` Eli Zaretskii
2011-03-15 14:43 ` Pedro Alves
2011-02-18 18:17 ` [patch] delete a range of display numbers Eli Zaretskii
2011-02-18 17:52 ` Michael Snyder
2011-02-18 17:57 ` Pedro Alves
2011-02-18 17:44 ` 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='AANLkTi=Gpmr-Atf8zr5Ycf7Ct-sAp8H5atAYCovSOnAA@mail.gmail.com' \
--to=guillaume.leconte@gmail.com \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
/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