Prevent problems with section alignment by not shrinking the .rsrc section.
[deliverable/binutils-gdb.git] / gdb / ui-out.c
index 2edb14050023eb972f774de1818ff4652cb492e5..60d18eee2bb0829213c84d836459edff41dc0ff3 100644 (file)
@@ -1,6 +1,6 @@
 /* Output generating routines for GDB.
 
 /* Output generating routines for GDB.
 
-   Copyright (C) 1999-2014 Free Software Foundation, Inc.
+   Copyright (C) 1999-2016 Free Software Foundation, Inc.
 
    Contributed by Cygnus Solutions.
    Written by Fernando Nasser for Cygnus.
 
    Contributed by Cygnus Solutions.
    Written by Fernando Nasser for Cygnus.
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include <string.h>
 #include "expression.h"                /* For language.h */
 #include "language.h"
 #include "ui-out.h"
 #include "expression.h"                /* For language.h */
 #include "language.h"
 #include "ui-out.h"
-#include "gdb_assert.h"
 
 /* table header structures */
 
 
 /* table header structures */
 
@@ -33,18 +31,12 @@ struct ui_out_hdr
   {
     int colno;
     int width;
   {
     int colno;
     int width;
-    int alignment;
+    enum ui_align alignment;
     char *col_name;
     char *colhdr;
     struct ui_out_hdr *next;
   };
 
     char *col_name;
     char *colhdr;
     struct ui_out_hdr *next;
   };
 
-/* Maintain a stack so that the info applicable to the inner most list
-   is always available.  Stack/nested level 0 is reserved for the
-   top-level result.  */
-
-enum { MAX_UI_OUT_LEVELS = 8 };
-
 struct ui_out_level
   {
     /* Count each field; the first element is for non-list fields.  */
 struct ui_out_level
   {
     /* Count each field; the first element is for non-list fields.  */
@@ -125,8 +117,7 @@ current_level (struct ui_out *uiout)
 /* Create a new level, of TYPE.  Return the new level's index.  */
 static int
 push_level (struct ui_out *uiout,
 /* Create a new level, of TYPE.  Return the new level's index.  */
 static int
 push_level (struct ui_out *uiout,
-           enum ui_out_type type,
-           const char *id)
+           enum ui_out_type type)
 {
   struct ui_out_level *current;
 
 {
   struct ui_out_level *current;
 
@@ -155,85 +146,6 @@ pop_level (struct ui_out *uiout,
   return uiout->level + 1;
 }
 
   return uiout->level + 1;
 }
 
-
-/* These are the default implementation functions.  */
-
-static void default_table_begin (struct ui_out *uiout, int nbrofcols,
-                                int nr_rows, const char *tblid);
-static void default_table_body (struct ui_out *uiout);
-static void default_table_end (struct ui_out *uiout);
-static void default_table_header (struct ui_out *uiout, int width,
-                                 enum ui_align alig, const char *col_name,
-                                 const char *colhdr);
-static void default_begin (struct ui_out *uiout,
-                          enum ui_out_type type,
-                          int level, const char *id);
-static void default_end (struct ui_out *uiout,
-                        enum ui_out_type type,
-                        int level);
-static void default_field_int (struct ui_out *uiout, int fldno, int width,
-                              enum ui_align alig,
-                              const char *fldname,
-                              int value);
-static void default_field_skip (struct ui_out *uiout, int fldno, int width,
-                               enum ui_align alig,
-                               const char *fldname);
-static void default_field_string (struct ui_out *uiout, int fldno, int width,
-                                 enum ui_align align,
-                                 const char *fldname,
-                                 const char *string);
-static void default_field_fmt (struct ui_out *uiout, int fldno,
-                              int width, enum ui_align align,
-                              const char *fldname,
-                              const char *format,
-                              va_list args) ATTRIBUTE_PRINTF (6, 0);
-static void default_spaces (struct ui_out *uiout, int numspaces);
-static void default_text (struct ui_out *uiout, const char *string);
-static void default_message (struct ui_out *uiout, int verbosity,
-                            const char *format,
-                            va_list args) ATTRIBUTE_PRINTF (3, 0);
-static void default_wrap_hint (struct ui_out *uiout, char *identstring);
-static void default_flush (struct ui_out *uiout);
-static void default_data_destroy (struct ui_out *uiout);
-
-/* This is the default ui-out implementation functions vector.  */
-
-const struct ui_out_impl default_ui_out_impl =
-{
-  default_table_begin,
-  default_table_body,
-  default_table_end,
-  default_table_header,
-  default_begin,
-  default_end,
-  default_field_int,
-  default_field_skip,
-  default_field_string,
-  default_field_fmt,
-  default_spaces,
-  default_text,
-  default_message,
-  default_wrap_hint,
-  default_flush,
-  NULL,
-  default_data_destroy,
-  0, /* Does not need MI hacks.  */
-};
-
-/* The default ui_out */
-
-struct ui_out def_uiout =
-{
-  0,                           /* flags */
-  &default_ui_out_impl,                /* impl */
-};
-
-/* Pointer to current ui_out */
-/* FIXME: This should not be a global, but something passed down from main.c
-   or top.c.  */
-
-struct ui_out *current_uiout = &def_uiout;
-
 /* These are the interfaces to implementation functions.  */
 
 static void uo_table_begin (struct ui_out *uiout, int nbrofcols,
 /* These are the interfaces to implementation functions.  */
 
 static void uo_table_begin (struct ui_out *uiout, int nbrofcols,
@@ -271,14 +183,14 @@ static void uo_data_destroy (struct ui_out *uiout);
 
 extern void _initialize_ui_out (void);
 static void append_header_to_list (struct ui_out *uiout, int width,
 
 extern void _initialize_ui_out (void);
 static void append_header_to_list (struct ui_out *uiout, int width,
-                                  int alignment, const char *col_name,
+                                  enum ui_align alignment, const char *col_name,
                                   const char *colhdr);
 static int get_next_header (struct ui_out *uiout, int *colno, int *width,
                                   const char *colhdr);
 static int get_next_header (struct ui_out *uiout, int *colno, int *width,
-                           int *alignment, char **colhdr);
+                           enum ui_align *alignment, char **colhdr);
 static void clear_header_list (struct ui_out *uiout);
 static void clear_table (struct ui_out *uiout);
 static void verify_field (struct ui_out *uiout, int *fldno, int *width,
 static void clear_header_list (struct ui_out *uiout);
 static void clear_table (struct ui_out *uiout);
 static void verify_field (struct ui_out *uiout, int *fldno, int *width,
-                         int *align);
+                         enum ui_align *align);
 
 /* exported functions (ui_out API) */
 
 
 /* exported functions (ui_out API) */
 
@@ -362,7 +274,7 @@ and before table_body."));
 static void
 do_cleanup_table_end (void *data)
 {
 static void
 do_cleanup_table_end (void *data)
 {
-  struct ui_out *ui_out = data;
+  struct ui_out *ui_out = (struct ui_out *) data;
 
   ui_out_table_end (ui_out);
 }
 
   ui_out_table_end (ui_out);
 }
@@ -397,12 +309,12 @@ specified after table_body."));
   {
     int fldno;
     int width;
   {
     int fldno;
     int width;
-    int align;
+    enum ui_align align;
 
     verify_field (uiout, &fldno, &width, &align);
   }
 
 
     verify_field (uiout, &fldno, &width, &align);
   }
 
-  new_level = push_level (uiout, type, id);
+  new_level = push_level (uiout, type);
 
   /* If the push puts us at the same level as a table row entry, we've
      got a new table row.  Put the header pointer back to the start.  */
 
   /* If the push puts us at the same level as a table row entry, we've
      got a new table row.  Put the header pointer back to the start.  */
@@ -431,7 +343,8 @@ struct ui_out_end_cleanup_data
 static void
 do_cleanup_end (void *data)
 {
 static void
 do_cleanup_end (void *data)
 {
-  struct ui_out_end_cleanup_data *end_cleanup_data = data;
+  struct ui_out_end_cleanup_data *end_cleanup_data
+    = (struct ui_out_end_cleanup_data *) data;
 
   ui_out_end (end_cleanup_data->uiout, end_cleanup_data->type);
   xfree (end_cleanup_data);
 
   ui_out_end (end_cleanup_data->uiout, end_cleanup_data->type);
   xfree (end_cleanup_data);
@@ -472,7 +385,7 @@ ui_out_field_int (struct ui_out *uiout,
 {
   int fldno;
   int width;
 {
   int fldno;
   int width;
-  int align;
+  enum ui_align align;
 
   verify_field (uiout, &fldno, &width, &align);
 
 
   verify_field (uiout, &fldno, &width, &align);
 
@@ -488,7 +401,7 @@ ui_out_field_fmt_int (struct ui_out *uiout,
 {
   int fldno;
   int width;
 {
   int fldno;
   int width;
-  int align;
+  enum ui_align align;
 
   verify_field (uiout, &fldno, &width, &align);
 
 
   verify_field (uiout, &fldno, &width, &align);
 
@@ -512,16 +425,13 @@ ui_out_field_stream (struct ui_out *uiout,
                     const char *fldname,
                     struct ui_file *stream)
 {
                     const char *fldname,
                     struct ui_file *stream)
 {
-  long length;
-  char *buffer = ui_file_xstrdup (stream, &length);
-  struct cleanup *old_cleanup = make_cleanup (xfree, buffer);
+  std::string buffer = ui_file_as_string (stream);
 
 
-  if (length > 0)
-    ui_out_field_string (uiout, fldname, buffer);
+  if (!buffer.empty ())
+    ui_out_field_string (uiout, fldname, buffer.c_str ());
   else
     ui_out_field_skip (uiout, fldname);
   ui_file_rewind (stream);
   else
     ui_out_field_skip (uiout, fldname);
   ui_file_rewind (stream);
-  do_cleanups (old_cleanup);
 }
 
 /* Used to omit a field.  */
 }
 
 /* Used to omit a field.  */
@@ -532,7 +442,7 @@ ui_out_field_skip (struct ui_out *uiout,
 {
   int fldno;
   int width;
 {
   int fldno;
   int width;
-  int align;
+  enum ui_align align;
 
   verify_field (uiout, &fldno, &width, &align);
 
 
   verify_field (uiout, &fldno, &width, &align);
 
@@ -546,7 +456,7 @@ ui_out_field_string (struct ui_out *uiout,
 {
   int fldno;
   int width;
 {
   int fldno;
   int width;
-  int align;
+  enum ui_align align;
 
   verify_field (uiout, &fldno, &width, &align);
 
 
   verify_field (uiout, &fldno, &width, &align);
 
@@ -562,7 +472,7 @@ ui_out_field_fmt (struct ui_out *uiout,
   va_list args;
   int fldno;
   int width;
   va_list args;
   int fldno;
   int width;
-  int align;
+  enum ui_align align;
 
   /* Will not align, but has to call anyway.  */
   verify_field (uiout, &fldno, &width, &align);
 
   /* Will not align, but has to call anyway.  */
   verify_field (uiout, &fldno, &width, &align);
@@ -659,111 +569,6 @@ ui_out_is_mi_like_p (struct ui_out *uiout)
   return uiout->impl->is_mi_like_p;
 }
 
   return uiout->impl->is_mi_like_p;
 }
 
-/* Default gdb-out hook functions.  */
-
-static void
-default_table_begin (struct ui_out *uiout, int nbrofcols,
-                    int nr_rows,
-                    const char *tblid)
-{
-}
-
-static void
-default_table_body (struct ui_out *uiout)
-{
-}
-
-static void
-default_table_end (struct ui_out *uiout)
-{
-}
-
-static void
-default_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
-                     const char *col_name,
-                     const char *colhdr)
-{
-}
-
-static void
-default_begin (struct ui_out *uiout,
-              enum ui_out_type type,
-              int level,
-              const char *id)
-{
-}
-
-static void
-default_end (struct ui_out *uiout,
-            enum ui_out_type type,
-            int level)
-{
-}
-
-static void
-default_field_int (struct ui_out *uiout, int fldno, int width,
-                  enum ui_align align,
-                  const char *fldname, int value)
-{
-}
-
-static void
-default_field_skip (struct ui_out *uiout, int fldno, int width,
-                   enum ui_align align, const char *fldname)
-{
-}
-
-static void
-default_field_string (struct ui_out *uiout,
-                     int fldno,
-                     int width,
-                     enum ui_align align,
-                     const char *fldname,
-                     const char *string)
-{
-}
-
-static void
-default_field_fmt (struct ui_out *uiout, int fldno, int width,
-                  enum ui_align align,
-                  const char *fldname,
-                  const char *format,
-                  va_list args)
-{
-}
-
-static void
-default_spaces (struct ui_out *uiout, int numspaces)
-{
-}
-
-static void
-default_text (struct ui_out *uiout, const char *string)
-{
-}
-
-static void
-default_message (struct ui_out *uiout, int verbosity,
-                const char *format,
-                va_list args)
-{
-}
-
-static void
-default_wrap_hint (struct ui_out *uiout, char *identstring)
-{
-}
-
-static void
-default_flush (struct ui_out *uiout)
-{
-}
-
-static void
-default_data_destroy (struct ui_out *uiout)
-{
-}
-
 /* Interface to the implementation functions.  */
 
 void
 /* Interface to the implementation functions.  */
 
 void
@@ -807,8 +612,8 @@ uo_table_header (struct ui_out *uiout, int width, enum ui_align align,
 static void
 clear_table (struct ui_out *uiout)
 {
 static void
 clear_table (struct ui_out *uiout)
 {
-  if (uiout->table.id)
-    xfree (uiout->table.id);
+  xfree (uiout->table.id);
+  uiout->table.id = NULL;
   clear_header_list (uiout);
 }
 
   clear_header_list (uiout);
 }
 
@@ -958,7 +763,7 @@ clear_header_list (struct ui_out *uiout)
 static void
 append_header_to_list (struct ui_out *uiout,
                       int width,
 static void
 append_header_to_list (struct ui_out *uiout,
                       int width,
-                      int alignment,
+                      enum ui_align alignment,
                       const char *col_name,
                       const char *colhdr)
 {
                       const char *col_name,
                       const char *colhdr)
 {
@@ -1004,7 +809,7 @@ static int
 get_next_header (struct ui_out *uiout,
                 int *colno,
                 int *width,
 get_next_header (struct ui_out *uiout,
                 int *colno,
                 int *width,
-                int *alignment,
+                enum ui_align *alignment,
                 char **colhdr)
 {
   /* There may be no headers at all or we may have used all columns.  */
                 char **colhdr)
 {
   /* There may be no headers at all or we may have used all columns.  */
@@ -1025,7 +830,8 @@ get_next_header (struct ui_out *uiout,
    available/applicable).  */
 
 static void
    available/applicable).  */
 
 static void
-verify_field (struct ui_out *uiout, int *fldno, int *width, int *align)
+verify_field (struct ui_out *uiout, int *fldno, int *width,
+             enum ui_align *align)
 {
   struct ui_out_level *current = current_level (uiout);
   char *text;
 {
   struct ui_out_level *current = current_level (uiout);
   char *text;
@@ -1092,7 +898,7 @@ ui_out_query_field (struct ui_out *uiout, int colno,
   return 0;
 }
 
   return 0;
 }
 
-/* Initalize private members at startup.  */
+/* Initialize private members at startup.  */
 
 struct ui_out *
 ui_out_new (const struct ui_out_impl *impl, void *data,
 
 struct ui_out *
 ui_out_new (const struct ui_out_impl *impl, void *data,
@@ -1114,6 +920,7 @@ ui_out_new (const struct ui_out_impl *impl, void *data,
   current->field_count = 0;
   VEC_safe_push (ui_out_level_p, uiout->levels, current);
 
   current->field_count = 0;
   VEC_safe_push (ui_out_level_p, uiout->levels, current);
 
+  uiout->table.id = NULL;
   uiout->table.header_first = NULL;
   uiout->table.header_last = NULL;
   uiout->table.header_next = NULL;
   uiout->table.header_first = NULL;
   uiout->table.header_last = NULL;
   uiout->table.header_next = NULL;
This page took 0.029337 seconds and 4 git commands to generate.