]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - libio/vsnprintf.c
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / libio / vsnprintf.c
index 5ac2317579a17dd5fe15120ba2c9b9eb0e494683..8c09c81d9ae14d41d256254a155bc3f0f816f76b 100644 (file)
@@ -1,47 +1,36 @@
-/* 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
@@ -75,7 +64,7 @@ _IO_strn_overflow (fp, c)
 }
 
 
-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),
@@ -101,17 +90,13 @@ static struct _IO_jump_t _IO_strn_jumps =
 
 
 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
@@ -122,17 +107,21 @@ _IO_vsnprintf (string, maxlen, format, args)
       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)