Home | History | Annotate | Line # | Download | only in binutils
      1      1.1  christos /* demanguse.c -- libiberty demangler usage
      2  1.1.1.3  christos    Copyright (C) 2021-2025 Free Software Foundation, Inc.
      3      1.1  christos 
      4      1.1  christos    This file is part of GNU Binutils.
      5      1.1  christos 
      6      1.1  christos    This program is free software; you can redistribute it and/or modify
      7      1.1  christos    it under the terms of the GNU General Public License as published by
      8      1.1  christos    the Free Software Foundation; either version 3 of the License, or
      9      1.1  christos    (at your option) any later version.
     10      1.1  christos 
     11      1.1  christos    This program is distributed in the hope that it will be useful,
     12      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14      1.1  christos    GNU General Public License for more details.
     15      1.1  christos 
     16      1.1  christos    You should have received a copy of the GNU General Public License
     17      1.1  christos    along with this program; if not, write to the Free Software
     18      1.1  christos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
     19      1.1  christos    02110-1301, USA.  */
     20      1.1  christos 
     21      1.1  christos #include <stdio.h>
     22      1.1  christos #include <string.h>
     23      1.1  christos #include "demangle.h"
     24      1.1  christos #include "demanguse.h"
     25      1.1  christos 
     26      1.1  christos /* Print the list of demangling styles to STREAM.  A one line MSG is
     27      1.1  christos    printed before the styles.  Output is limited to 80 columns, with
     28      1.1  christos    continuation lines being indented by leading spaces in MSG.  */
     29      1.1  christos 
     30      1.1  christos void
     31      1.1  christos display_demangler_styles (FILE *stream, const char *msg)
     32      1.1  christos {
     33      1.1  christos   const struct demangler_engine *info = libiberty_demanglers;
     34      1.1  christos   int col;
     35      1.1  christos   int lead_spaces = 0;
     36      1.1  christos   const char *cont = "";
     37      1.1  christos 
     38      1.1  christos   while (msg[lead_spaces] == ' ')
     39      1.1  christos     ++lead_spaces;
     40      1.1  christos   col = fprintf (stream, "%s", msg);
     41      1.1  christos   while (info->demangling_style_name)
     42      1.1  christos     {
     43      1.1  christos       if (col + strlen (info->demangling_style_name) >= 75)
     44      1.1  christos 	{
     45      1.1  christos 	  fprintf (stream, "%.1s\n", cont);
     46      1.1  christos 	  col = fprintf (stream, "%.*s", lead_spaces, msg);
     47      1.1  christos 	  cont = "";
     48      1.1  christos 	}
     49      1.1  christos       col += fprintf (stream, "%s\"%s\"", cont, info->demangling_style_name);
     50      1.1  christos       cont = ", ";
     51      1.1  christos       ++info;
     52      1.1  christos     }
     53      1.1  christos   fprintf (stream, "\n");
     54      1.1  christos }
     55