-/* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
+/* Copyright (C) 1994-2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>.
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
+ As a special exception, if you link the code in this file with
+ files compiled with a GNU compiler to produce an executable,
+ that does not cause the resulting executable to be covered by
+ the GNU Lesser General Public License. This exception does not
+ however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ This exception applies to code released by its copyright holders
+ in files containing the exception. */
#include "libioP.h"
#include "strfile.h"
-
-typedef struct
-{
- _IO_strfile f;
- /* This is used for the characters which do not fit in the buffer
- provided by the user. */
- char overflow_buf[64];
-} _IO_strnfile;
-
-
-static int _IO_strn_overflow __P ((_IO_FILE *fp, int c));
+static int _IO_strn_overflow (FILE *fp, int c) __THROW;
static int
-_IO_strn_overflow (fp, c)
- _IO_FILE *fp;
- int c;
+_IO_strn_overflow (FILE *fp, int c)
{
/* When we come to here this means the user supplied buffer is
filled. But since we must return the number of characters which
}
-static struct _IO_jump_t _IO_strn_jumps =
+const struct _IO_jump_t _IO_strn_jumps libio_vtable attribute_hidden =
{
JUMP_INIT_DUMMY,
JUMP_INIT(finish, _IO_str_finish),
int
-_IO_vsnprintf (string, maxlen, format, args)
- char *string;
- _IO_size_t maxlen;
- const char *format;
- _IO_va_list args;
+__vsnprintf_internal (char *string, size_t maxlen, const char *format,
+ va_list args, unsigned int mode_flags)
{
_IO_strnfile sf;
int ret;
#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
- sf.f._sbf._f._lock = &lock;
+ sf.f._sbf._f._lock = NULL;
#endif
/* We need to handle the special case where MAXLEN is 0. Use the
maxlen = sizeof (sf.overflow_buf);
}
- _IO_init ((_IO_FILE *) &sf, 0);
- _IO_JUMPS ((_IO_FILE *) &sf) = &_IO_strn_jumps;
- _IO_str_init_static ((_IO_FILE *) &sf, string, maxlen - 1, string);
- ret = _IO_vfprintf ((_IO_FILE *) &sf, format, args);
+ _IO_no_init (&sf.f._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
+ _IO_JUMPS (&sf.f._sbf) = &_IO_strn_jumps;
+ string[0] = '\0';
+ _IO_str_init_static_internal (&sf.f, string, maxlen - 1, string);
+ ret = __vfprintf_internal (&sf.f._sbf._f, format, args, mode_flags);
if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
*sf.f._sbf._f._IO_write_ptr = '\0';
return ret;
}
-#ifdef weak_alias
-weak_alias (_IO_vsnprintf, __vsnprintf)
-weak_alias (_IO_vsnprintf, vsnprintf)
-#endif
+int
+___vsnprintf (char *string, size_t maxlen, const char *format, va_list args)
+{
+ return __vsnprintf_internal (string, maxlen, format, args, 0);
+}
+ldbl_weak_alias (___vsnprintf, __vsnprintf)
+ldbl_weak_alias (___vsnprintf, vsnprintf)