diff options
author | Pedro Alves <palves@redhat.com> | 2011-02-18 16:43:53 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2011-02-18 16:43:53 +0000 |
commit | 3c3fe74c6fe58e9035ff5a045d9497321d3a0d31 (patch) | |
tree | bb53f5321d33c6ac4ce9662afb1df47baa028958 /gdb/printcmd.c | |
parent | badc813953563b5539ce2974242b9c3d3860adab (diff) | |
download | gdb-3c3fe74c6fe58e9035ff5a045d9497321d3a0d31.zip gdb-3c3fe74c6fe58e9035ff5a045d9497321d3a0d31.tar.gz gdb-3c3fe74c6fe58e9035ff5a045d9497321d3a0d31.tar.bz2 |
* breakpoint.c (get_number_trailer): No longer accept a NULL PP.
* breakpoint.h (get_number_or_range): Declare.
* printcmd.c (ALL_DISPLAYS): Declare.
(delete_display): Reimplement taking a display pointer.
(undisplay_command): Accept a range of displays to delete, using
get_number_or_range.
Diffstat (limited to 'gdb/printcmd.c')
-rw-r--r-- | gdb/printcmd.c | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 29ffbf5..6576dce 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -167,6 +167,11 @@ static struct display *display_chain; static int display_number; +/* Walk the following statement or block through all displays. */ + +#define ALL_DISPLAYS(B) \ + for (B = display_chain; B; B = B->next) + /* Prototypes for exported functions. */ void output_command (char *, int); @@ -1555,35 +1560,26 @@ clear_displays (void) } } -/* Delete the auto-display number NUM. */ +/* Delete the auto-display DISPLAY. */ static void -delete_display (int num) +delete_display (struct display *display) { - struct display *d1, *d; + struct display *d; - if (!display_chain) - error (_("No display number %d."), num); + gdb_assert (display != NULL); - if (display_chain->number == num) - { - d1 = display_chain; - display_chain = d1->next; - free_display (d1); - } - else - for (d = display_chain;; d = d->next) + if (display_chain == display) + display_chain = display->next; + + ALL_DISPLAYS (d) + if (d->next == display) { - if (d->next == 0) - error (_("No display number %d."), num); - if (d->next->number == num) - { - d1 = d->next; - d->next = d1->next; - free_display (d1); - break; - } + d->next = display->next; + break; } + + free_display (display); } /* Delete some values from the auto-display chain. @@ -1607,18 +1603,24 @@ undisplay_command (char *args, int from_tty) 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 = get_number_or_range (&p1); + if (num == 0) + warning (_("bad display number at or near '%s'"), p); + else + { + struct display *d; - delete_display (num); + ALL_DISPLAYS (d) + if (d->number == num) + break; + if (d == NULL) + printf_unfiltered (_("No display number %d.\n"), num); + else + delete_display (d); + } p = p1; - while (*p == ' ' || *p == '\t') - p++; } dont_repeat (); } |