]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - stdio-common/printf-prs.c
Deprecate external use of libio.h and _G_config.h.
[thirdparty/glibc.git] / stdio-common / printf-prs.c
index f3b27d67120b568add6b52a45e1b5ccd64ef952c..d63855612a669cadbcfdff35b395b505400584dc 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995, 1996, 1999, 2000, 2002, 2003, 2004
-   Free Software Foundation, Inc.
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -13,9 +12,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
 #include <stdio.h>
 #include <printf.h>
@@ -38,7 +36,7 @@
 # define PUT(F, S, N)  _IO_sputn (F, S, N)
 # define PAD(Padchar)                                                        \
   if (width > 0)                                                             \
-    done += INTUSE(_IO_padn) (s, Padchar, width)
+    done += _IO_padn (s, Padchar, width)
 #else
 # define vfprintf      vfwprintf
 # define CHAR_T                wchar_t
 
 
 size_t
-parse_printf_format (fmt, n, argtypes)
-      const char *fmt;
-      size_t n;
-      int *argtypes;
+parse_printf_format (const char *fmt, size_t n, int *argtypes)
 {
   size_t nargs;                        /* Number of arguments.  */
   size_t max_ref_arg;          /* Highest index used in a positional arg.  */
   struct printf_spec spec;
-  mbstate_t mbstate;
+  const unsigned char *f = (const unsigned char *) fmt;
 
   nargs = 0;
   max_ref_arg = 0;
 
   /* Search for format specifications.  */
-  for (fmt = __find_specmb (fmt, &mbstate); *fmt != '\0'; fmt = spec.next_fmt)
+  for (f = __find_specmb (f); *f != '\0'; f = spec.next_fmt)
     {
       /* Parse this spec.  */
-      nargs += __parse_one_specmb (fmt, nargs, &spec, &max_ref_arg, &mbstate);
+      nargs += __parse_one_specmb (f, nargs, &spec, &max_ref_arg);
 
       /* If the width is determined by an argument this is an int.  */
       if (spec.width_arg != -1 && (size_t) spec.width_arg < n)
@@ -97,7 +92,8 @@ parse_printf_format (fmt, n, argtypes)
            /* We have more than one argument for this format spec.  We must
                call the arginfo function again to determine all the types.  */
            (void) (*__printf_arginfo_table[spec.info.spec])
-             (&spec.info, n - spec.data_arg, &argtypes[spec.data_arg]);
+             (&spec.info, n - spec.data_arg, &argtypes[spec.data_arg],
+              &spec.size);
            break;
          }
     }