(root)/
tar-1.35/
gnu/
vasprintf.c
       1  /* Formatted output to strings.
       2     Copyright (C) 1999, 2002, 2006-2023 Free Software Foundation, Inc.
       3  
       4     This file is free software: you can redistribute it and/or modify
       5     it under the terms of the GNU Lesser General Public License as
       6     published by the Free Software Foundation; either version 2.1 of the
       7     License, or (at your option) any later version.
       8  
       9     This file is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12     GNU Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public License
      15     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      16  
      17  #include <config.h>
      18  
      19  /* Specification.  */
      20  #ifdef IN_LIBASPRINTF
      21  # include "vasprintf.h"
      22  #else
      23  # include <stdio.h>
      24  #endif
      25  
      26  #include <errno.h>
      27  #include <limits.h>
      28  #include <stdlib.h>
      29  
      30  #include "vasnprintf.h"
      31  
      32  int
      33  vasprintf (char **resultp, const char *format, va_list args)
      34  {
      35    size_t length;
      36    char *result = vasnprintf (NULL, &length, format, args);
      37    if (result == NULL)
      38      return -1;
      39  
      40    if (length > INT_MAX)
      41      {
      42        free (result);
      43        errno = EOVERFLOW;
      44        return -1;
      45      }
      46  
      47    *resultp = result;
      48    /* Return the number of resulting bytes, excluding the trailing NUL.  */
      49    return length;
      50  }