diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2012-07-22 19:58:41 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2012-07-22 19:58:41 +0200 |
commit | ef724a37cdb3012efb5b7233eb8b450ad91d3d69 (patch) | |
tree | 2334455220f417223cc1a75aebe76302cdffdf5a /stdio-common | |
parent | 6f276c2517990f6569b961b4d4919cbce570ac45 (diff) | |
parent | 47e5dcdf349a1aea5c8997104ef785412f0d34fa (diff) |
Merge branch 'baseline' into refs/top-bases/tschwinge/Roger_Whittaker
Conflicts:
configure
configure.in
elf/rtld.c
misc/syslog.c
sysdeps/gnu/configure
sysdeps/gnu/configure.in
sysdeps/mach/hurd/accept4.c
sysdeps/mach/hurd/bits/posix_opt.h
sysdeps/mach/hurd/dup3.c
sysdeps/mach/hurd/i386/init-first.c
sysdeps/mach/hurd/kernel-features.h
sysdeps/mach/hurd/readlinkat.c
Diffstat (limited to 'stdio-common')
30 files changed, 371 insertions, 155 deletions
diff --git a/stdio-common/Makefile b/stdio-common/Makefile index 8cf6335bb5..a29924bc7c 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -51,12 +51,13 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \ scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10 \ scanf11 scanf12 tst-tmpnam tst-cookie tst-obprintf tst-sscanf \ tst-swprintf tst-fseek tst-fmemopen test-vfprintf tst-gets \ - tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 bug15 \ + tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 \ tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \ tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \ bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \ scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24 \ - bug-vfprintf-nargs tst-long-dbl-fphex tst-fphex-wide + bug-vfprintf-nargs tst-long-dbl-fphex tst-fphex-wide tst-sprintf3 \ + bug25 test-srcs = tst-unbputc tst-printf @@ -120,7 +121,6 @@ tst-swprintf-ENV = LOCPATH=$(common-objpfx)localedata test-vfprintf-ENV = LOCPATH=$(common-objpfx)localedata scanf13-ENV = LOCPATH=$(common-objpfx)localedata bug14-ENV = LOCPATH=$(common-objpfx)localedata -bug15-ENV = LOCPATH=$(common-objpfx)localedata tst-grouping-ENV = LOCPATH=$(common-objpfx)localedata ifneq (,$(filter %REENTRANT, $(defines))) diff --git a/stdio-common/_itoa.c b/stdio-common/_itoa.c index 3dfff8ff64..ebb3e857c6 100644 --- a/stdio-common/_itoa.c +++ b/stdio-common/_itoa.c @@ -1,6 +1,5 @@ /* Internal function for converting integers to ASCII. - Copyright (C) 1994, 1995, 1996, 1999, 2000, 2002, 2003, 2004, 2007 - Free Software Foundation, Inc. + Copyright (C) 1994-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Torbjorn Granlund <tege@matematik.su.se> and Ulrich Drepper <drepper@gnu.org>. @@ -79,7 +78,7 @@ struct base_table_t /* We do not compile _itoa if we always can use _itoa_word. */ -#if LLONG_MAX != LONG_MAX +#if _ITOA_NEEDED /* Local variables. */ const struct base_table_t _itoa_base_table[] attribute_hidden = { @@ -160,27 +159,13 @@ const struct base_table_t _itoa_base_table[] attribute_hidden = }; #endif -/* Lower-case digits. */ -extern const char _itoa_lower_digits[]; -extern const char _itoa_lower_digits_internal[] attribute_hidden; -/* Upper-case digits. */ -extern const char _itoa_upper_digits[]; -extern const char _itoa_upper_digits_internal[] attribute_hidden; - - char * -_itoa_word (unsigned long value, char *buflim, +_itoa_word (_ITOA_WORD_TYPE value, char *buflim, unsigned int base, int upper_case) { const char *digits = (upper_case -#if !defined NOT_IN_libc || defined IS_IN_rtld - ? INTUSE(_itoa_upper_digits) - : INTUSE(_itoa_lower_digits) -#else ? _itoa_upper_digits - : _itoa_lower_digits -#endif - ); + : _itoa_lower_digits); switch (base) { @@ -204,7 +189,7 @@ _itoa_word (unsigned long value, char *buflim, #undef SPECIAL -#if LLONG_MAX != LONG_MAX +#if _ITOA_NEEDED char * _itoa (value, buflim, base, upper_case) unsigned long long int value; @@ -213,8 +198,8 @@ _itoa (value, buflim, base, upper_case) int upper_case; { const char *digits = (upper_case - ? INTUSE(_itoa_upper_digits) - : INTUSE(_itoa_lower_digits)); + ? _itoa_upper_digits + : _itoa_lower_digits); const struct base_table_t *brec = &_itoa_base_table[base - 2]; switch (base) @@ -470,7 +455,8 @@ _itoa (value, buflim, base, upper_case) #endif char * -_fitoa_word (unsigned long value, char *buf, unsigned int base, int upper_case) +_fitoa_word (_ITOA_WORD_TYPE value, char *buf, unsigned int base, + int upper_case) { char tmpbuf[sizeof (value) * 4]; /* Worst case length: base 2. */ char *cp = _itoa_word (value, tmpbuf + sizeof (value) * 4, base, upper_case); @@ -479,7 +465,7 @@ _fitoa_word (unsigned long value, char *buf, unsigned int base, int upper_case) return buf; } -#if LLONG_MAX != LONG_MAX +#if _ITOA_NEEDED char * _fitoa (unsigned long long value, char *buf, unsigned int base, int upper_case) { diff --git a/stdio-common/asprintf.c b/stdio-common/asprintf.c index 1f58a20678..c98de3f902 100644 --- a/stdio-common/asprintf.c +++ b/stdio-common/asprintf.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991, 1995, 1997, 1998, 2002, 2004, 2006 - Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -38,7 +37,7 @@ ___asprintf (char **string_ptr, const char *format, ...) return done; } -INTDEF2(___asprintf, __asprintf) +ldbl_hidden_def (___asprintf, __asprintf) ldbl_strong_alias (___asprintf, __asprintf) ldbl_weak_alias (___asprintf, asprintf) diff --git a/stdio-common/bug15.c b/stdio-common/bug15.c deleted file mode 100644 index 825ca2f980..0000000000 --- a/stdio-common/bug15.c +++ /dev/null @@ -1,10 +0,0 @@ -#include <stdio.h> -#include <locale.h> - -int -main (void) -{ - char buf[10]; - setlocale (LC_ALL, "vi_VN.TCVN-5712"); - return sprintf (buf, "%.*s", 2, "vi") != 2; -} diff --git a/stdio-common/bug22.c b/stdio-common/bug22.c index 2228388b47..b26399acb7 100644 --- a/stdio-common/bug22.c +++ b/stdio-common/bug22.c @@ -1,12 +1,22 @@ /* BZ #5424 */ #include <stdio.h> +#include <errno.h> +/* INT_MAX + 1 */ #define N 2147483648 +/* (INT_MAX / 2) + 2 */ +#define N2 1073741825 + +/* INT_MAX - 3 */ +#define N3 2147483644 + #define STRINGIFY(S) #S #define MAKE_STR(S) STRINGIFY(S) #define SN MAKE_STR(N) +#define SN2 MAKE_STR(N2) +#define SN3 MAKE_STR(N3) static int do_test (void) @@ -20,13 +30,27 @@ do_test (void) return 1; } - ret = fprintf (fp, "%" SN "d%" SN "d", 1, 1); + ret = fprintf (fp, "%" SN "d", 1); + printf ("ret = %d\n", ret); + if (ret != -1 || errno != EOVERFLOW) + return 1; + + ret = fprintf (fp, "%." SN "d", 1); + printf ("ret = %d\n", ret); + if (ret != -1 || errno != EOVERFLOW) + return 1; + + ret = fprintf (fp, "%." SN3 "d", 1); + printf ("ret = %d\n", ret); + if (ret != -1 || errno != EOVERFLOW) + return 1; + ret = fprintf (fp, "%" SN2 "d%" SN2 "d", 1, 1); printf ("ret = %d\n", ret); - return ret != -1; + return ret != -1 || errno != EOVERFLOW; } -#define TIMEOUT 30 +#define TIMEOUT 60 #define TEST_FUNCTION do_test () #include "../test-skeleton.c" diff --git a/stdio-common/bug25.c b/stdio-common/bug25.c new file mode 100644 index 0000000000..30c133974b --- /dev/null +++ b/stdio-common/bug25.c @@ -0,0 +1,70 @@ +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +static const char expected[] = "\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55\ +\n\ +a\n\ +abbcd55%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; + +static int +do_test (void) +{ + char *buf = malloc (strlen (expected) + 1); + snprintf (buf, strlen (expected) + 1, + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + "a", "b", "c", "d", 5); + return strcmp (buf, expected) != 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/stdio-common/fxprintf.c b/stdio-common/fxprintf.c index 3c1341485d..a63cf5426f 100644 --- a/stdio-common/fxprintf.c +++ b/stdio-common/fxprintf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. +/* Copyright (C) 2005-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.org>. @@ -47,7 +47,7 @@ __fxprintf (FILE *fp, const char *fmt, ...) res = __vfwprintf (fp, wfmt, ap); } else - res = INTUSE(_IO_vfprintf) (fp, fmt, ap); + res = _IO_vfprintf (fp, fmt, ap); va_end (ap); diff --git a/stdio-common/getw.c b/stdio-common/getw.c index 2cd5ab0a80..34b82c3de6 100644 --- a/stdio-common/getw.c +++ b/stdio-common/getw.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1997, 1998, 2002, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -18,7 +18,7 @@ #include <stdio.h> #include <libio/iolibio.h> -#define fread(p, m, n, s) INTUSE(_IO_fread) (p, m, n, s) +#define fread(p, m, n, s) _IO_fread (p, m, n, s) /* Read a word (int) from STREAM. */ int diff --git a/stdio-common/isoc99_fscanf.c b/stdio-common/isoc99_fscanf.c index 6e5e33d68f..4b689fa0ba 100644 --- a/stdio-common/isoc99_fscanf.c +++ b/stdio-common/isoc99_fscanf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1997, 2006, 2007 Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -31,7 +31,7 @@ __isoc99_fscanf (FILE *stream, const char *format, ...) stream->_flags2 |= _IO_FLAGS2_SCANF_STD; va_start (arg, format); - done = INTUSE(_IO_vfscanf) (stream, format, arg, NULL); + done = _IO_vfscanf (stream, format, arg, NULL); va_end (arg); _IO_release_lock (stream); diff --git a/stdio-common/isoc99_scanf.c b/stdio-common/isoc99_scanf.c index d91ef94bbc..2e04e700e4 100644 --- a/stdio-common/isoc99_scanf.c +++ b/stdio-common/isoc99_scanf.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2002, 2004, 2006, 2007 - Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -33,7 +32,7 @@ __isoc99_scanf (const char *format, ...) stdin->_flags2 |= _IO_FLAGS2_SCANF_STD; va_start (arg, format); - done = INTUSE(_IO_vfscanf) (stdin, format, arg, NULL); + done = _IO_vfscanf (stdin, format, arg, NULL); va_end (arg); _IO_release_lock (stdin); diff --git a/stdio-common/isoc99_vfscanf.c b/stdio-common/isoc99_vfscanf.c index 658d5ff361..bd6087bd6e 100644 --- a/stdio-common/isoc99_vfscanf.c +++ b/stdio-common/isoc99_vfscanf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1997, 2006, 2007 Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -27,7 +27,7 @@ __isoc99_vfscanf (FILE *stream, const char *format, _IO_va_list args) _IO_acquire_lock_clear_flags2 (stream); stream->_flags2 |= _IO_FLAGS2_SCANF_STD; - done = INTUSE(_IO_vfscanf) (stream, format, args, NULL); + done = _IO_vfscanf (stream, format, args, NULL); _IO_release_lock (stream); return done; } diff --git a/stdio-common/isoc99_vscanf.c b/stdio-common/isoc99_vscanf.c index c9c187cb3a..4d9f3b820b 100644 --- a/stdio-common/isoc99_vscanf.c +++ b/stdio-common/isoc99_vscanf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1997, 2006, 2007 Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -27,7 +27,7 @@ __isoc99_vscanf (const char *format, _IO_va_list args) _IO_acquire_lock_clear_flags2 (stdin); stdin->_flags2 |= _IO_FLAGS2_SCANF_STD; - done = INTUSE(_IO_vfscanf) (stdin, format, args, NULL); + done = _IO_vfscanf (stdin, format, args, NULL); _IO_release_lock (stdin); return done; } diff --git a/stdio-common/isoc99_vsscanf.c b/stdio-common/isoc99_vsscanf.c index 628856a6d0..a6dc007dd2 100644 --- a/stdio-common/isoc99_vsscanf.c +++ b/stdio-common/isoc99_vsscanf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,1997-2003,2006,2007,2009 Free Software Foundation, Inc. +/* Copyright (C) 1993-2012 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 @@ -40,7 +40,7 @@ __isoc99_vsscanf (const char *string, const char *format, _IO_va_list args) _IO_JUMPS (&sf._sbf) = &_IO_str_jumps; _IO_str_init_static_internal (&sf, (char*)string, 0, NULL); sf._sbf._f._flags2 |= _IO_FLAGS2_SCANF_STD; - ret = INTUSE(_IO_vfscanf) (&sf._sbf._f, format, args, NULL); + ret = _IO_vfscanf (&sf._sbf._f, format, args, NULL); return ret; } libc_hidden_def (__isoc99_vsscanf) diff --git a/stdio-common/itoa-digits.c b/stdio-common/itoa-digits.c index b0a652d6cf..e38f48405e 100644 --- a/stdio-common/itoa-digits.c +++ b/stdio-common/itoa-digits.c @@ -1,5 +1,5 @@ /* Digits. - Copyright (C) 1994,1995,1996,1999,2000,2002 Free Software Foundation, Inc. + Copyright (C) 1994-2012 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 @@ -16,7 +16,9 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#include <_itoa.h> + /* Lower-case digits. */ const char _itoa_lower_digits[36] = "0123456789abcdefghijklmnopqrstuvwxyz"; -INTVARDEF(_itoa_lower_digits) +libc_hidden_data_def (_itoa_lower_digits) diff --git a/stdio-common/itoa-udigits.c b/stdio-common/itoa-udigits.c index 39f9549c9c..215af7126e 100644 --- a/stdio-common/itoa-udigits.c +++ b/stdio-common/itoa-udigits.c @@ -1,5 +1,5 @@ /* Digits. - Copyright (C) 1994,1995,1996,1999,2000,2002 Free Software Foundation, Inc. + Copyright (C) 1994-2012 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 @@ -16,7 +16,9 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#include <_itoa.h> + /* Upper-case digits. */ const char _itoa_upper_digits[36] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -INTVARDEF(_itoa_upper_digits) +libc_hidden_data_def (_itoa_upper_digits) diff --git a/stdio-common/printf-parse.h b/stdio-common/printf-parse.h index 72665dcec2..3aa0274249 100644 --- a/stdio-common/printf-parse.h +++ b/stdio-common/printf-parse.h @@ -68,16 +68,27 @@ union printf_arg #ifndef DONT_NEED_READ_INT /* Read a simple integer from a string and update the string pointer. It is assumed that the first character is a digit. */ -static unsigned int +static int read_int (const UCHAR_T * *pstr) { - unsigned int retval = **pstr - L_('0'); + int retval = **pstr - L_('0'); while (ISDIGIT (*++(*pstr))) - { - retval *= 10; - retval += **pstr - L_('0'); - } + if (retval >= 0) + { + if (INT_MAX / 10 < retval) + retval = -1; + else + { + int digit = **pstr - L_('0'); + + retval *= 10; + if (INT_MAX - digit < retval) + retval = -1; + else + retval += digit; + } + } return retval; } diff --git a/stdio-common/printf-parsemb.c b/stdio-common/printf-parsemb.c index 2bdb5e65ab..a45ac74e06 100644 --- a/stdio-common/printf-parsemb.c +++ b/stdio-common/printf-parsemb.c @@ -87,12 +87,15 @@ __parse_one_specmb (const UCHAR_T *format, size_t posn, n = read_int (&format); - if (n > 0 && *format == L_('$')) + if (n != 0 && *format == L_('$')) /* Is positional parameter. */ { ++format; /* Skip the '$'. */ - spec->data_arg = n - 1; - *max_ref_arg = MAX (*max_ref_arg, n); + if (n != -1) + { + spec->data_arg = n - 1; + *max_ref_arg = MAX (*max_ref_arg, n); + } } else /* Oops; that was actually the width and/or 0 padding flag. @@ -160,10 +163,13 @@ __parse_one_specmb (const UCHAR_T *format, size_t posn, /* The width argument might be found in a positional parameter. */ n = read_int (&format); - if (n > 0 && *format == L_('$')) + if (n != 0 && *format == L_('$')) { - spec->width_arg = n - 1; - *max_ref_arg = MAX (*max_ref_arg, n); + if (n != -1) + { + spec->width_arg = n - 1; + *max_ref_arg = MAX (*max_ref_arg, n); + } ++format; /* Skip '$'. */ } } @@ -177,9 +183,13 @@ __parse_one_specmb (const UCHAR_T *format, size_t posn, } } else if (ISDIGIT (*format)) - /* Constant width specification. */ - spec->info.width = read_int (&format); + { + int n = read_int (&format); + /* Constant width specification. */ + if (n != -1) + spec->info.width = n; + } /* Get the precision. */ spec->prec_arg = -1; /* -1 means none given; 0 means explicit 0. */ @@ -196,10 +206,13 @@ __parse_one_specmb (const UCHAR_T *format, size_t posn, { n = read_int (&format); - if (n > 0 && *format == L_('$')) + if (n != 0 && *format == L_('$')) { - spec->prec_arg = n - 1; - *max_ref_arg = MAX (*max_ref_arg, n); + if (n != -1) + { + spec->prec_arg = n - 1; + *max_ref_arg = MAX (*max_ref_arg, n); + } ++format; } } @@ -213,7 +226,12 @@ __parse_one_specmb (const UCHAR_T *format, size_t posn, } } else if (ISDIGIT (*format)) - spec->info.prec = read_int (&format); + { + int n = read_int (&format); + + if (n != -1) + spec->info.prec = n; + } else /* "%.?" is treated like "%.0?". */ spec->info.prec = 0; diff --git a/stdio-common/printf-prs.c b/stdio-common/printf-prs.c index 68a9c61a13..32f08bac16 100644 --- a/stdio-common/printf-prs.c +++ b/stdio-common/printf-prs.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991, 1992, 1995, 1996, 1999, 2000, 2002-2005, 2007, 2009 - Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -37,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 diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c index 46f9e3e904..5f3c904254 100644 --- a/stdio-common/printf_fp.c +++ b/stdio-common/printf_fp.c @@ -1,5 +1,5 @@ /* Floating point output for `printf'. - Copyright (C) 1995-2003, 2006-2008, 2011 Free Software Foundation, Inc. + Copyright (C) 1995-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. @@ -56,7 +56,7 @@ /* This defines make it possible to use the same code for GNU C library and the GNU I/O library. */ #define PUT(f, s, n) _IO_sputn (f, s, n) -#define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : INTUSE(_IO_padn) (f, c, n)) +#define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : _IO_padn (f, c, n)) /* We use this file GNU C library and GNU I/O library. So make names equal. */ #undef putc diff --git a/stdio-common/printf_fphex.c b/stdio-common/printf_fphex.c index 97ed83be98..13491455d1 100644 --- a/stdio-common/printf_fphex.c +++ b/stdio-common/printf_fphex.c @@ -1,5 +1,5 @@ /* Print floating point number in hexadecimal notation according to ISO C99. - Copyright (C) 1997-2002,2004,2006,2011 Free Software Foundation, Inc. + Copyright (C) 1997-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -36,7 +36,7 @@ the GNU I/O library. */ #include <libioP.h> #define PUT(f, s, n) _IO_sputn (f, s, n) -#define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : INTUSE(_IO_padn) (f, c, n)) +#define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : _IO_padn (f, c, n)) /* We use this file GNU C library and GNU I/O library. So make names equal. */ #undef putc diff --git a/stdio-common/printf_size.c b/stdio-common/printf_size.c index 06cbb064ab..9f870065a3 100644 --- a/stdio-common/printf_size.c +++ b/stdio-common/printf_size.c @@ -1,5 +1,5 @@ /* Print size value using units for orders of magnitude. - Copyright (C) 1997-2002, 2004, 2006, 2011 Free Software Foundation, Inc. + Copyright (C) 1997-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Based on a proposal by Larry McVoy <lm@sgi.com>. @@ -28,7 +28,7 @@ /* This defines make it possible to use the same code for GNU C library and the GNU I/O library. */ #define PUT(f, s, n) _IO_sputn (f, s, n) -#define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : INTUSE(_IO_padn) (f, c, n)) +#define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : _IO_padn (f, c, n)) /* We use this file GNU C library and GNU I/O library. So make names equal. */ #undef putc diff --git a/stdio-common/psiginfo.c b/stdio-common/psiginfo.c index eb758c481a..9701fcd8a7 100644 --- a/stdio-common/psiginfo.c +++ b/stdio-common/psiginfo.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, 2010 Free Software Foundation, Inc. +/* Copyright (C) 2009-2012 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 @@ -26,11 +26,6 @@ #include <not-cancel.h> -/* Defined in sys_siglist.c. */ -extern const char *const _sys_siglist[]; -extern const char *const _sys_siglist_internal[] attribute_hidden; - - #define MF(l) MF1 (l) #define MF1(l) str_##l #define C(s1, s2) C1 (s1, s2) @@ -84,7 +79,7 @@ psiginfo (const siginfo_t *pinfo, const char *s) const char *desc; if (pinfo->si_signo >= 0 && pinfo->si_signo < NSIG - && ((desc = INTUSE(_sys_siglist)[pinfo->si_signo]) != NULL + && ((desc = _sys_siglist[pinfo->si_signo]) != NULL #ifdef SIGRTMIN || (pinfo->si_signo >= SIGRTMIN && pinfo->si_signo < SIGRTMAX) #endif diff --git a/stdio-common/psignal.c b/stdio-common/psignal.c index 23026f9b18..309803a978 100644 --- a/stdio-common/psignal.c +++ b/stdio-common/psignal.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991, 1992, 1995, 1996, 1997, 2001, 2002, 2004, 2005, 2009 - Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -22,12 +21,6 @@ #include <libintl.h> #include <wchar.h> - -/* Defined in sys_siglist.c. */ -extern const char *const _sys_siglist[]; -extern const char *const _sys_siglist_internal[] attribute_hidden; - - /* Print out on stderr a line consisting of the test in S, a colon, a space, a message describing the meaning of the signal number SIG and a newline. If S is NULL or "", the colon and space are omitted. */ @@ -41,7 +34,7 @@ psignal (int sig, const char *s) else colon = ": "; - if (sig >= 0 && sig < NSIG && (desc = INTUSE(_sys_siglist)[sig]) != NULL) + if (sig >= 0 && sig < NSIG && (desc = _sys_siglist[sig]) != NULL) (void) __fxprintf (NULL, "%s%s%s\n", s, colon, _(desc)); else { diff --git a/stdio-common/putw.c b/stdio-common/putw.c index ecfdcd8b6d..09902bfc63 100644 --- a/stdio-common/putw.c +++ b/stdio-common/putw.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1997, 1998, 2002, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -17,7 +17,7 @@ #include <stdio.h> #include <libio/iolibio.h> -#define fwrite(p, n, m, s) INTUSE(_IO_fwrite) (p, n, m, s) +#define fwrite(p, n, m, s) _IO_fwrite (p, n, m, s) /* Write the word (int) W to STREAM. */ int diff --git a/stdio-common/scanf.c b/stdio-common/scanf.c index e7ef18dcb7..0a8eecf01f 100644 --- a/stdio-common/scanf.c +++ b/stdio-common/scanf.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2002, 2004, 2006 - Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -31,7 +30,7 @@ __scanf (const char *format, ...) int done; va_start (arg, format); - done = INTUSE(_IO_vfscanf) (stdin, format, arg, NULL); + done = _IO_vfscanf (stdin, format, arg, NULL); va_end (arg); return done; diff --git a/stdio-common/sprintf.c b/stdio-common/sprintf.c index 817844a442..00be3bdcc0 100644 --- a/stdio-common/sprintf.c +++ b/stdio-common/sprintf.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991, 1995, 1997, 1998, 2002, 2004, 2006 - Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -19,7 +18,7 @@ #include <stdarg.h> #include <stdio.h> #include <libioP.h> -#define vsprintf(s, f, a) INTUSE(_IO_vsprintf) (s, f, a) +#define vsprintf(s, f, a) _IO_vsprintf (s, f, a) /* Write formatted output into S, according to the format string FORMAT. */ /* VARARGS2 */ diff --git a/stdio-common/tmpfile.c b/stdio-common/tmpfile.c index 113999b184..c6da9acb0b 100644 --- a/stdio-common/tmpfile.c +++ b/stdio-common/tmpfile.c @@ -1,6 +1,5 @@ /* Open a stdio stream on an anonymous temporary file. Generic/POSIX version. - Copyright (C) 1991,1993,1996-2000,2002,2003,2007,2009,2011 - Free Software Foundation, Inc. + Copyright (C) 1991-2012 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 @@ -22,7 +21,7 @@ #include <unistd.h> #include <iolibio.h> -#define __fdopen INTUSE(_IO_fdopen) +#define __fdopen _IO_fdopen #ifndef tmpfile # define tmpfile __new_tmpfile #endif diff --git a/stdio-common/tst-sprintf3.c b/stdio-common/tst-sprintf3.c new file mode 100644 index 0000000000..d56f247310 --- /dev/null +++ b/stdio-common/tst-sprintf3.c @@ -0,0 +1,90 @@ +/* Copyright (C) 2012 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 + 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. + + 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 + 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, see + <http://www.gnu.org/licenses/>. */ + +/* Test bug #13941. */ + +#include <float.h> +#include <math.h> +#include <stdio.h> +#include <string.h> + +int +main (void) +{ +#if LDBL_MANT_DIG >= 106 + volatile union { long double l; long long x[2]; } u, v; + char buf[64]; +#endif + int result = 0; + +#if LDBL_MANT_DIG == 106 || LDBL_MANT_DIG == 113 +# define COMPARE_LDBL(u, v) \ + ((u).l == (v).l && (u).x[0] == (v).x[0] && (u).x[1] == (v).x[1]) +#else +# define COMPARE_LDBL(u, v) ((u).l == (v).l) +#endif + +#define TEST(val) \ + do \ + { \ + u.l = (val); \ + snprintf (buf, sizeof buf, "%.30LgL", u.l); \ + if (strcmp (buf, #val) != 0) \ + { \ + printf ("Error on line %d: %s != %s\n", __LINE__, buf, #val); \ + result = 1; \ + } \ + if (sscanf (#val, "%Lg", &v.l) != 1 || !COMPARE_LDBL (u, v)) \ + { \ + printf ("Error sscanf on line %d: %.30Lg != %.30Lg\n", __LINE__, \ + u.l, v.l); \ + result = 1; \ + } \ + /* printf ("%s %Lg %016Lx %016Lx\n", #val, u.l, u.x[0], u.x[1]); */ \ + } \ + while (0) + +#if LDBL_MANT_DIG >= 106 +# if LDBL_MANT_DIG == 106 + TEST (2.22507385850719347803989925739e-308L); + TEST (2.22507385850719397210554509863e-308L); + TEST (2.22507385850720088902458687609e-308L); +# endif + TEST (2.22507385850720138309023271733e-308L); + TEST (2.22507385850720187715587855858e-308L); + TEST (2.2250738585074419930597574044e-308L); + TEST (4.45014771701440227211481959342e-308L); + TEST (4.45014771701440276618046543466e-308L); + TEST (4.45014771701440375431175711716e-308L); + TEST (4.45014771701440474244304879965e-308L); + TEST (7.12023634722304600689881138745e-307L); + TEST (1.13923781555569064960474854133e-305L); + TEST (1.13777777777777776389998996996L); + TEST (1.13777777777777765287768750745L); + TEST (20988295479420645138.2044444444L); + TEST (20988295479420643090.2044444444L); + TEST (2.14668699894294423266045294316e-292L); +# if LDBL_MANT_DIG == 106 + TEST (-2.35993711055432139266626434123e-292L); + TEST (6.26323524637968345414769634658e-302L); + TEST (1.49327164802066885331814201989e-308L); + TEST (3.71834550652787023640837473722e-308L); + TEST (9.51896449671134907001349268087e-306L); +# endif +#endif + return result; +} diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index 1e904833a3..d569034253 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2011, 2012 Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -67,10 +67,10 @@ do { \ unsigned int _val = val; \ assert ((unsigned int) done < (unsigned int) INT_MAX); \ - if (__builtin_expect ((unsigned int) INT_MAX - (unsigned int) done \ - < _val, 0)) \ + if (__builtin_expect (INT_MAX - done < _val, 0)) \ { \ done = -1; \ + __set_errno (EOVERFLOW); \ goto all_done; \ } \ done += _val; \ @@ -88,7 +88,7 @@ # define PUT(F, S, N) _IO_sputn ((F), (S), (N)) # define PAD(Padchar) \ if (width > 0) \ - done_add (INTUSE(_IO_padn) (s, (Padchar), width)) + done_add (_IO_padn (s, (Padchar), width)) # define PUTC(C, F) _IO_putc_unlocked (C, F) # define ORIENT if (_IO_vtable_offset (s) == 0 && _IO_fwide (s, -1) != -1)\ return -1 @@ -141,12 +141,17 @@ do \ { \ assert ((size_t) done <= (size_t) INT_MAX); \ - if ((size_t) PUT (s, (String), (Len)) != (size_t) (Len) \ - || (size_t) INT_MAX - (size_t) done < (size_t) (Len)) \ + if ((size_t) PUT (s, (String), (Len)) != (size_t) (Len)) \ { \ done = -1; \ goto all_done; \ } \ + if (__builtin_expect (INT_MAX - done < (Len), 0)) \ + { \ + done = -1; \ + __set_errno (EOVERFLOW); \ + goto all_done; \ + } \ done += (Len); \ } \ while (0) @@ -1435,10 +1440,21 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) const UCHAR_T *tmp; /* Temporary value. */ tmp = ++f; - if (ISDIGIT (*tmp) && read_int (&tmp) && *tmp == L_('$')) - /* The width comes from a positional parameter. */ - goto do_positional; + if (ISDIGIT (*tmp)) + { + int pos = read_int (&tmp); + if (pos == -1) + { + __set_errno (EOVERFLOW); + done = -1; + goto all_done; + } + + if (pos && *tmp == L_('$')) + /* The width comes from a positional parameter. */ + goto do_positional; + } width = va_arg (ap, int); /* Negative width means left justified. */ @@ -1449,9 +1465,9 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) left = 1; } - if (__builtin_expect (width >= (size_t) -1 / sizeof (CHAR_T) - 32, 0)) + if (__builtin_expect (width >= INT_MAX / sizeof (CHAR_T) - 32, 0)) { - __set_errno (ERANGE); + __set_errno (EOVERFLOW); done = -1; goto all_done; } @@ -1481,9 +1497,10 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) LABEL (width): width = read_int (&f); - if (__builtin_expect (width >= (size_t) -1 / sizeof (CHAR_T) - 32, 0)) + if (__builtin_expect (width == -1 + || width >= INT_MAX / sizeof (CHAR_T) - 32, 0)) { - __set_errno (ERANGE); + __set_errno (EOVERFLOW); done = -1; goto all_done; } @@ -1518,10 +1535,21 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) const UCHAR_T *tmp; /* Temporary value. */ tmp = ++f; - if (ISDIGIT (*tmp) && read_int (&tmp) > 0 && *tmp == L_('$')) - /* The precision comes from a positional parameter. */ - goto do_positional; + if (ISDIGIT (*tmp)) + { + int pos = read_int (&tmp); + + if (pos == -1) + { + __set_errno (EOVERFLOW); + done = -1; + goto all_done; + } + if (pos && *tmp == L_('$')) + /* The precision comes from a positional parameter. */ + goto do_positional; + } prec = va_arg (ap, int); /* If the precision is negative the precision is omitted. */ @@ -1529,15 +1557,26 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) prec = -1; } else if (ISDIGIT (*f)) - prec = read_int (&f); + { + prec = read_int (&f); + + /* The precision was specified in this case as an extremely + large positive value. */ + if (prec == -1) + { + __set_errno (EOVERFLOW); + done = -1; + goto all_done; + } + } else prec = 0; if (prec > width && prec > sizeof (work_buffer) / sizeof (work_buffer[0]) - 32) { - if (__builtin_expect (prec >= (size_t) -1 / sizeof (CHAR_T) - 32, 0)) + if (__builtin_expect (prec >= INT_MAX / sizeof (CHAR_T) - 32, 0)) { - __set_errno (ERANGE); + __set_errno (EOVERFLOW); done = -1; goto all_done; } @@ -1710,9 +1749,9 @@ do_positional: + sizeof (*args_type)); /* Check for potential integer overflow. */ - if (__builtin_expect (nargs > SIZE_MAX / bytes_per_arg, 0)) + if (__builtin_expect (nargs > INT_MAX / bytes_per_arg, 0)) { - __set_errno (ERANGE); + __set_errno (EOVERFLOW); done = -1; goto all_done; } @@ -2188,18 +2227,18 @@ _IO_helper_overflow (_IO_FILE *s, int c) static const struct _IO_jump_t _IO_helper_jumps = { JUMP_INIT_DUMMY, - JUMP_INIT (finish, INTUSE(_IO_wdefault_finish)), + JUMP_INIT (finish, _IO_wdefault_finish), JUMP_INIT (overflow, _IO_helper_overflow), JUMP_INIT (underflow, _IO_default_underflow), - JUMP_INIT (uflow, INTUSE(_IO_default_uflow)), - JUMP_INIT (pbackfail, (_IO_pbackfail_t) INTUSE(_IO_wdefault_pbackfail)), - JUMP_INIT (xsputn, INTUSE(_IO_wdefault_xsputn)), - JUMP_INIT (xsgetn, INTUSE(_IO_wdefault_xsgetn)), + JUMP_INIT (uflow, _IO_default_uflow), + JUMP_INIT (pbackfail, (_IO_pbackfail_t) _IO_wdefault_pbackfail), + JUMP_INIT (xsputn, _IO_wdefault_xsputn), + JUMP_INIT (xsgetn, _IO_wdefault_xsgetn), JUMP_INIT (seekoff, _IO_default_seekoff), JUMP_INIT (seekpos, _IO_default_seekpos), JUMP_INIT (setbuf, _IO_default_setbuf), JUMP_INIT (sync, _IO_default_sync), - JUMP_INIT (doallocate, INTUSE(_IO_wdefault_doallocate)), + JUMP_INIT (doallocate, _IO_wdefault_doallocate), JUMP_INIT (read, _IO_default_read), JUMP_INIT (write, _IO_default_write), JUMP_INIT (seek, _IO_default_seek), @@ -2210,18 +2249,18 @@ static const struct _IO_jump_t _IO_helper_jumps = static const struct _IO_jump_t _IO_helper_jumps = { JUMP_INIT_DUMMY, - JUMP_INIT (finish, INTUSE(_IO_default_finish)), + JUMP_INIT (finish, _IO_default_finish), JUMP_INIT (overflow, _IO_helper_overflow), JUMP_INIT (underflow, _IO_default_underflow), - JUMP_INIT (uflow, INTUSE(_IO_default_uflow)), - JUMP_INIT (pbackfail, INTUSE(_IO_default_pbackfail)), - JUMP_INIT (xsputn, INTUSE(_IO_default_xsputn)), - JUMP_INIT (xsgetn, INTUSE(_IO_default_xsgetn)), + JUMP_INIT (uflow, _IO_default_uflow), + JUMP_INIT (pbackfail, _IO_default_pbackfail), + JUMP_INIT (xsputn, _IO_default_xsputn), + JUMP_INIT (xsgetn, _IO_default_xsgetn), JUMP_INIT (seekoff, _IO_default_seekoff), JUMP_INIT (seekpos, _IO_default_seekpos), JUMP_INIT (setbuf, _IO_default_setbuf), JUMP_INIT (sync, _IO_default_sync), - JUMP_INIT (doallocate, INTUSE(_IO_default_doallocate)), + JUMP_INIT (doallocate, _IO_default_doallocate), JUMP_INIT (read, _IO_default_read), JUMP_INIT (write, _IO_default_write), JUMP_INIT (seek, _IO_default_seek), @@ -2267,7 +2306,7 @@ buffered_vfprintf (register _IO_FILE *s, const CHAR_T *format, /* Now print to helper instead. */ #ifndef COMPILE_WPRINTF - result = INTUSE(_IO_vfprintf) (hp, format, args); + result = _IO_vfprintf (hp, format, args); #else result = vfprintf (hp, format, args); #endif @@ -2308,4 +2347,5 @@ ldbl_weak_alias (_IO_vfwprintf, vfwprintf); ldbl_strong_alias (_IO_vfprintf_internal, vfprintf); ldbl_hidden_def (_IO_vfprintf_internal, vfprintf) ldbl_strong_alias (_IO_vfprintf_internal, _IO_vfprintf); +ldbl_hidden_def (_IO_vfprintf_internal, _IO_vfprintf) #endif diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c index ae251556e3..23a8ac7694 100644 --- a/stdio-common/vfscanf.c +++ b/stdio-common/vfscanf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2007, 2010, 2011, 2012 Free Software Foundation, Inc. +/* Copyright (C) 1991-2012 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 @@ -77,9 +77,9 @@ #ifdef COMPILE_WSCANF # define ungetc(c, s) ((void) (c == WEOF \ || (--read_in, \ - INTUSE(_IO_sputbackwc) (s, c)))) + _IO_sputbackwc (s, c)))) # define ungetc_not_eof(c, s) ((void) (--read_in, \ - INTUSE(_IO_sputbackwc) (s, c))) + _IO_sputbackwc (s, c))) # define inchar() (c == WEOF ? ((errno = inchar_errno), WEOF) \ : ((c = _IO_getwc_unlocked (s)), \ (void) (c != WEOF \ @@ -109,9 +109,9 @@ #else # define ungetc(c, s) ((void) ((int) c == EOF \ || (--read_in, \ - INTUSE(_IO_sputbackc) (s, (unsigned char) c)))) + _IO_sputbackc (s, (unsigned char) c)))) # define ungetc_not_eof(c, s) ((void) (--read_in, \ - INTUSE(_IO_sputbackc) (s, (unsigned char) c))) + _IO_sputbackc (s, (unsigned char) c))) # define inchar() (c == EOF ? ((errno = inchar_errno), EOF) \ : ((c = _IO_getc_unlocked (s)), \ (void) (c != EOF \ @@ -2941,6 +2941,7 @@ ___vfscanf (FILE *s, const char *format, va_list argptr) return _IO_vfscanf_internal (s, format, argptr, NULL); } ldbl_strong_alias (_IO_vfscanf_internal, _IO_vfscanf) +ldbl_hidden_def (_IO_vfscanf_internal, _IO_vfscanf) ldbl_strong_alias (___vfscanf, __vfscanf) ldbl_hidden_def (___vfscanf, __vfscanf) ldbl_weak_alias (___vfscanf, vfscanf) |