Home | History | Annotate | Line # | Download | only in libasprintf
      1 /* Formatted output to strings.
      2    Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc.
      3 
      4    This program is free software; you can redistribute it and/or modify it
      5    under the terms of the GNU Library General Public License as published
      6    by the Free Software Foundation; either version 2, or (at your option)
      7    any later version.
      8 
      9    This program 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 GNU
     12    Library General Public License for more details.
     13 
     14    You should have received a copy of the GNU Library General Public
     15    License along with this program; if not, write to the Free Software
     16    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
     17    USA.  */
     18 
     19 #include <config.h>
     20 
     21 /* Specification.  */
     22 #include "vasprintf.h"
     23 
     24 #include <errno.h>
     25 #include <limits.h>
     26 #include <stdlib.h>
     27 
     28 #include "vasnprintf.h"
     29 
     30 /* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW.  */
     31 #ifndef EOVERFLOW
     32 # define EOVERFLOW E2BIG
     33 #endif
     34 
     35 int
     36 vasprintf (char **resultp, const char *format, va_list args)
     37 {
     38   size_t length;
     39   char *result = vasnprintf (NULL, &length, format, args);
     40   if (result == NULL)
     41     return -1;
     42 
     43   if (length > INT_MAX)
     44     {
     45       free (result);
     46       errno = EOVERFLOW;
     47       return -1;
     48     }
     49 
     50   *resultp = result;
     51   /* Return the number of resulting bytes, excluding the trailing NUL.  */
     52   return length;
     53 }
     54