summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/ui-out.c34
-rw-r--r--gdb/ui-out.h4
3 files changed, 44 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 736718736b9..1eaed0da7da 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2001-05-10 Andrew Cagney <ac131313@redhat.com>
+
+ * ui-out.h (make_cleanup_ui_out_begin_end): Declare.
+ * ui-out.c (struct ui_out_end_cleanup_data): Define.
+ (do_cleanup_end): New function. Replace do_list_end.
+ (make_cleanup_ui_out_end): New function.
+ (make_cleanup_ui_out_begin_end): New function.
+ (make_cleanup_ui_out_list_end): Use make_cleanup_ui_out_end.
+
2001-05-10 Elena Zannoni <ezannoni@redhat.com>
* MAINTAINERS: Declare xcoffread.c open to all maintainers,
diff --git a/gdb/ui-out.c b/gdb/ui-out.c
index 696128d0b6f..3e0f55c97c1 100644
--- a/gdb/ui-out.c
+++ b/gdb/ui-out.c
@@ -352,16 +352,44 @@ ui_out_list_end (struct ui_out *uiout)
ui_out_end (uiout, ui_out_type_list);
}
+struct ui_out_end_cleanup_data
+{
+ struct ui_out *uiout;
+ enum ui_out_type type;
+};
+
static void
-do_list_end (void *uiout)
+do_cleanup_end (void *data)
+{
+ struct ui_out_end_cleanup_data *end_cleanup_data = data;
+ ui_out_end (end_cleanup_data->uiout, end_cleanup_data->type);
+ xfree (end_cleanup_data);
+}
+
+static struct cleanup *
+make_cleanup_ui_out_end (struct ui_out *uiout,
+ enum ui_out_type type)
+{
+ struct ui_out_end_cleanup_data *end_cleanup_data;
+ end_cleanup_data = XMALLOC (struct ui_out_end_cleanup_data);
+ end_cleanup_data->uiout = uiout;
+ end_cleanup_data->type = type;
+ return make_cleanup (do_cleanup_end, end_cleanup_data);
+}
+
+struct cleanup *
+make_cleanup_ui_out_begin_end (struct ui_out *uiout,
+ enum ui_out_type type,
+ const char *id)
{
- ui_out_list_end (uiout);
+ ui_out_begin (uiout, type, id);
+ return make_cleanup_ui_out_end (uiout, type);
}
struct cleanup *
make_cleanup_ui_out_list_end (struct ui_out *uiout)
{
- return make_cleanup (do_list_end, uiout);
+ return make_cleanup_ui_out_end (uiout, ui_out_type_list);
}
void
diff --git a/gdb/ui-out.h b/gdb/ui-out.h
index a537412e0ab..ed2a289f0b5 100644
--- a/gdb/ui-out.h
+++ b/gdb/ui-out.h
@@ -80,6 +80,10 @@ extern void ui_out_begin (struct ui_out *uiout,
extern void ui_out_end (struct ui_out *uiout, enum ui_out_type type);
+extern struct cleanup *ui_out_begin_cleanup_end (struct ui_out *uiout,
+ enum ui_out_type level_type,
+ const char *id);
+
/* A table can be considered a special tupple/list combination with
the implied structure: ``table = { hdr = { header, ... } , body = [ {
field, ... }, ... ] }'' */