/* Implement the vsnprintf function.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003-2019 Free Software Foundation, Inc.
Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
This file is part of the libiberty library. This library is free
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
/*
-@deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, va_list @var{ap})
+@deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, @
+ const char *@var{format}, va_list @var{ap})
-This function is similar to vsprintf, but it will print at most
-@var{n} characters. On error the return value is -1, otherwise it
-returns the number of characters that would have been printed had
-@var{n} been sufficiently large, regardless of the actual value of
-@var{n}. Note some pre-C99 system libraries do not implement this
-correctly so users cannot generally rely on the return value if the
-system version of this function is used.
+This function is similar to @code{vsprintf}, but it will write to
+@var{buf} at most @code{@var{n}-1} bytes of text, followed by a
+terminating null byte, for a total of @var{n} bytes. On error the
+return value is -1, otherwise it returns the number of characters that
+would have been printed had @var{n} been sufficiently large,
+regardless of the actual value of @var{n}. Note some pre-C99 system
+libraries do not implement this correctly so users cannot generally
+rely on the return value if the system version of this function is
+used.
@end deftypefn
#include "config.h"
#include "ansidecl.h"
-#ifdef ANSI_PROTOTYPES
#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
/* This implementation relies on a working vasprintf. */
int
-vsnprintf (s, n, format, ap)
- char * s;
- size_t n;
- const char *format;
- va_list ap;
+vsnprintf (char *s, size_t n, const char *format, va_list ap)
{
char *buf = 0;
int result = vasprintf (&buf, format, ap);
#define VERIFY(P) do { if (!(P)) abort(); } while (0)
static int ATTRIBUTE_PRINTF_3
-checkit VPARAMS ((char *s, size_t n, const char *format, ...))
+checkit (char *s, size_t n, const char *format, ...)
{
int result;
- VA_OPEN (ap, format);
- VA_FIXEDARG (ap, char *, s);
- VA_FIXEDARG (ap, size_t, n);
- VA_FIXEDARG (ap, const char *, format);
+ va_list ap;
+ va_start (ap, format);
result = vsnprintf (s, n, format, ap);
- VA_CLOSE (ap);
+ va_end (ap);
return result;
}
-extern int main PARAMS ((void));
+extern int main (void);
int
-main ()
+main (void)
{
char buf[128];
int status;