(root)/
gcc-13.2.0/
libiberty/
xvasprintf.c
       1  /* Implement the xvasprintf function.
       2     Copyright (C) 2014-2023 Free Software Foundation, Inc.
       3     Contributed by Manuel Lopez-Ibanez.
       4  
       5  This file is part of the libiberty library.
       6  Libiberty is free software; you can redistribute it and/or
       7  modify it under the terms of the GNU Library General Public
       8  License as published by the Free Software Foundation; either
       9  version 2 of the License, or (at your option) any later version.
      10  
      11  Libiberty is distributed in the hope that it will be useful,
      12  but WITHOUT ANY WARRANTY; without even the implied warranty of
      13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14  Library General Public License for more details.
      15  
      16  You should have received a copy of the GNU Library General Public
      17  License along with libiberty; see the file COPYING.LIB.  If not, write
      18  to the Free Software Foundation, Inc., 51 Franklin Street - Fifth
      19  Floor, Boston, MA 02110-1301, USA.  */
      20  
      21  #ifdef HAVE_CONFIG_H
      22  #include "config.h"
      23  #endif
      24  #include <ansidecl.h>
      25  #include <stdarg.h>
      26  #if !defined (va_copy) && defined (__va_copy)
      27  # define va_copy(d,s)  __va_copy((d),(s))
      28  #endif
      29  #include <stdio.h>
      30  #ifdef HAVE_STRING_H
      31  #include <string.h>
      32  #endif
      33  #include "libiberty.h"
      34  #include "vprintf-support.h"
      35  
      36  /*
      37  
      38  @deftypefn Replacement char* xvasprintf (const char *@var{format}, va_list @var{args})
      39  
      40  Print to allocated string without fail.  If @code{xvasprintf} fails,
      41  this will print a message to @code{stderr} (using the name set by
      42  @code{xmalloc_set_program_name}, if any) and then call @code{xexit}.
      43  
      44  @end deftypefn
      45  
      46  */
      47  
      48  char *
      49  xvasprintf (const char *format,
      50  #if defined (_BSD_VA_LIST_) && defined (__FreeBSD__)
      51             _BSD_VA_LIST_ args)
      52  #else
      53             va_list args)
      54  #endif
      55  {
      56    char *result;
      57    int total_width = libiberty_vprintf_buffer_size (format, args);
      58    result = (char *) xmalloc (total_width);
      59    vsprintf (result, format, args);
      60    return result;
      61  }