about summary refs log tree commit diff
path: root/stdio-common
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-12-22 20:10:10 +0000
committerUlrich Drepper <drepper@redhat.com>2004-12-22 20:10:10 +0000
commita334319f6530564d22e775935d9c91663623a1b4 (patch)
treeb5877475619e4c938e98757d518bb1e9cbead751 /stdio-common
parent0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (diff)
downloadglibc-a334319f6530564d22e775935d9c91663623a1b4.tar.gz
glibc-a334319f6530564d22e775935d9c91663623a1b4.tar.xz
glibc-a334319f6530564d22e775935d9c91663623a1b4.zip
(CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4.
Diffstat (limited to 'stdio-common')
-rw-r--r--stdio-common/Makefile11
-rw-r--r--stdio-common/Versions5
-rw-r--r--stdio-common/_itoa.c5
-rw-r--r--stdio-common/asprintf.c12
-rw-r--r--stdio-common/bits/printf-ldbl.h24
-rw-r--r--stdio-common/bug16.c43
-rw-r--r--stdio-common/bug17.c31
-rw-r--r--stdio-common/ctermid.c36
-rw-r--r--stdio-common/cuserid.c35
-rw-r--r--stdio-common/dprintf.c9
-rw-r--r--stdio-common/errlist.c37
-rw-r--r--stdio-common/flockfile.c30
-rw-r--r--stdio-common/fprintf.c10
-rw-r--r--stdio-common/fscanf.c6
-rw-r--r--stdio-common/ftrylockfile.c31
-rw-r--r--stdio-common/funlockfile.c30
-rw-r--r--stdio-common/fxprintf.c56
-rw-r--r--stdio-common/perror.c7
-rw-r--r--stdio-common/printf-parsemb.c5
-rw-r--r--stdio-common/printf-prs.c7
-rw-r--r--stdio-common/printf.c8
-rw-r--r--stdio-common/printf.h6
-rw-r--r--stdio-common/printf_fp.c139
-rw-r--r--stdio-common/printf_fphex.c493
-rw-r--r--stdio-common/printf_size.c6
-rw-r--r--stdio-common/psignal.c25
-rw-r--r--stdio-common/remove.c33
-rw-r--r--stdio-common/rename.c41
-rw-r--r--stdio-common/renameat.c50
-rw-r--r--stdio-common/scanf.c5
-rw-r--r--stdio-common/siglist.c38
-rw-r--r--stdio-common/snprintf.c8
-rw-r--r--stdio-common/sprintf.c12
-rw-r--r--stdio-common/sscanf.c12
-rw-r--r--stdio-common/tempname.c59
-rw-r--r--stdio-common/test-vfprintf.c8
-rw-r--r--stdio-common/tfformat.c18
-rw-r--r--stdio-common/tmpfile.c66
-rw-r--r--stdio-common/tmpfile64.c3
-rw-r--r--stdio-common/tst-fgets.c20
-rw-r--r--stdio-common/tst-fmemopen2.c68
-rw-r--r--stdio-common/tst-fwrite.c70
-rw-r--r--stdio-common/tst-printf.c11
-rw-r--r--stdio-common/tst-printf.sh14
-rw-r--r--stdio-common/tst-put-error.c33
-rw-r--r--stdio-common/tst-sprintf.c21
-rw-r--r--stdio-common/tst-sprintf2.c82
-rw-r--r--stdio-common/tstdiomisc.c12
-rw-r--r--stdio-common/tstscanf.c4
-rw-r--r--stdio-common/vfprintf.c113
-rw-r--r--stdio-common/vfscanf.c183
-rw-r--r--stdio-common/vprintf.c9
52 files changed, 265 insertions, 1835 deletions
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index 7bd368bdca..3a66f1d021 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 1991-2002, 2003, 2004 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
@@ -21,7 +21,7 @@
 #
 subdir	:= stdio-common
 
-headers	:= stdio_ext.h printf.h bits/printf-ldbl.h
+headers	:= printf.h stdio_ext.h
 
 routines	:=							      \
 	ctermid cuserid							      \
@@ -33,14 +33,14 @@ routines	:=							      \
 	perror psignal							      \
 	tmpfile tmpfile64 tmpnam tmpnam_r tempnam tempname		      \
 	getline getw putw						      \
-	remove rename renameat						      \
+	remove rename							      \
 	flockfile ftrylockfile funlockfile
 
 install-others = $(inst_includedir)/bits/stdio_lim.h
 
 include ../Makeconfig
 
-aux	:= errlist siglist printf-parsemb printf-parsewc fxprintf
+aux	:= errlist siglist printf-parsemb printf-parsewc
 distribute := _itoa.h _itowa.h _i18n_number.h \
 	      printf-parse.h stdio_lim.h.in tst-unbputc.sh tst-printf.sh
 
@@ -53,8 +53,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
 	 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-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
-	 tst-fwrite bug16 bug17 tst-sprintf2
+	 tst-popen tst-unlockedio
 
 test-srcs = tst-unbputc tst-printf
 
diff --git a/stdio-common/Versions b/stdio-common/Versions
index 2f64429346..1dbce1a124 100644
--- a/stdio-common/Versions
+++ b/stdio-common/Versions
@@ -37,7 +37,7 @@ libc {
     tempnam; tmpfile; tmpnam; tmpnam_r;
 
     # v*
-    vfprintf; vfscanf; vprintf;
+    vfprintf; vfscanf; vprintf; 
   }
   GLIBC_2.1 {
     # p*
@@ -46,9 +46,6 @@ libc {
     # t*
     tmpfile; tmpfile64;
   }
-  GLIBC_2.4 {
-    renameat;
-  }
   GLIBC_PRIVATE {
     # global variables
     _itoa_lower_digits;
diff --git a/stdio-common/_itoa.c b/stdio-common/_itoa.c
index 285fde2ab9..f61b23fceb 100644
--- a/stdio-common/_itoa.c
+++ b/stdio-common/_itoa.c
@@ -1,5 +1,5 @@
 /* Internal function for converting integers to ASCII.
-   Copyright (C) 1994, 1995, 1996, 1999, 2000, 2002, 2003, 2004, 2007
+   Copyright (C) 1994, 1995, 1996, 1999, 2000, 2002, 2003, 2004
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Torbjorn Granlund <tege@matematik.su.se>
@@ -269,7 +269,6 @@ _itoa (value, buflim, base, upper_case)
 
     default:
       {
-	char *bufend = buflim;
 #if BITS_PER_MP_LIMB == 64
 	mp_limb_t base_multiplier = brec->base_multiplier;
 	if (brec->flag)
@@ -455,8 +454,6 @@ _itoa (value, buflim, base, upper_case)
 	  }
 	while (n != 0);
 #endif
-	if (buflim == bufend)
-	  *--buflim = '0';
       }
       break;
     }
diff --git a/stdio-common/asprintf.c b/stdio-common/asprintf.c
index 66e766ebfb..2c466d28d5 100644
--- a/stdio-common/asprintf.c
+++ b/stdio-common/asprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1997, 1998, 2002, 2004, 2006
+/* Copyright (C) 1991, 1995, 1997, 1998, 2002, 2004
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -20,7 +20,7 @@
 #include <stdarg.h>
 #include <stdio.h>
 
-#include <libioP.h>
+#include <libio/libioP.h>
 #define vasprintf(s, f, a) _IO_vasprintf (s, f, a)
 #undef __asprintf
 
@@ -28,7 +28,7 @@
    allocated with malloc and stored in *STRING_PTR.  */
 /* VARARGS2 */
 int
-___asprintf (char **string_ptr, const char *format, ...)
+__asprintf (char **string_ptr, const char *format, ...)
 {
   va_list arg;
   int done;
@@ -39,7 +39,5 @@ ___asprintf (char **string_ptr, const char *format, ...)
 
   return done;
 }
-INTDEF2(___asprintf, __asprintf)
-
-ldbl_strong_alias (___asprintf, __asprintf)
-ldbl_weak_alias (___asprintf, asprintf)
+INTDEF(__asprintf)
+weak_alias (__asprintf, asprintf)
diff --git a/stdio-common/bits/printf-ldbl.h b/stdio-common/bits/printf-ldbl.h
deleted file mode 100644
index cbdc3f1cbc..0000000000
--- a/stdio-common/bits/printf-ldbl.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -mlong-double-64 compatibility mode for <printf.h> functions.
-   Copyright (C) 2006 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _PRINTF_H
-# error "Never include <bits/printf-ldbl.h> directly; use <printf.h> instead."
-#endif
-
-__LDBL_REDIR_DECL (printf_size)
diff --git a/stdio-common/bug16.c b/stdio-common/bug16.c
deleted file mode 100644
index 84269f3b6d..0000000000
--- a/stdio-common/bug16.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-struct
-{
-  long double val;
-  const char str[4][7];
-} tests[] =
-{
-  { 0x0.FFFFp+0L, { "0X1P+0", "0X2P-1", "0X4P-2", "0X8P-3" } },
-  { 0x0.FFFFp+1L, { "0X1P+1", "0X2P+0", "0X4P-1", "0X8P-2" } },
-  { 0x0.FFFFp+2L, { "0X1P+2", "0X2P+1", "0X4P+0", "0X8P-1" } },
-  { 0x0.FFFFp+3L, { "0X1P+3", "0X2P+2", "0X4P+1", "0X8P+0" } }
-};
-
-static int
-do_test (void)
-{
-  char buf[100];
-  int ret = 0;
-
-  for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
-    {  
-      snprintf (buf, sizeof (buf), "%.0LA", tests[i].val);
-
-      size_t j;
-      for (j = 0; j < 4; ++j)
-	if (strcmp (buf, tests[i].str[j]) == 0)
-	  break;
-
-      if (j == 4)
-	{
-	  printf ("%zd: got \"%s\", expected \"%s\" or equivalent\n",
-		  i, buf, tests[i].str[0]);
-	  ret = 1;
-	}
-    }
-
-  return ret;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/stdio-common/bug17.c b/stdio-common/bug17.c
deleted file mode 100644
index 2ef398674b..0000000000
--- a/stdio-common/bug17.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-static int
-do_test (void)
-{
-  static const char expect[] = "0, 0, 0";
-  char buf[100];
-  int status = 0;
-
-  static const char fmt1[] = "%0d, %0ld, %0lld";
-  snprintf (buf, sizeof (buf), fmt1, 0, 0L, 0LL);
-  if (strcmp (buf, expect) != 0)
-    {
-      printf ("\"%s\": got \"%s\", expected \"%s\"\n", fmt1, buf, expect);
-      status = 1;
-    }
-
-  static const char fmt2[] = "%0u, %0lu, %0llu";
-  snprintf (buf, sizeof (buf), fmt2, 0u, 0uL, 0uLL);
-  if (strcmp (buf, expect) != 0)
-    {
-      printf ("\"%s\": got \"%s\", expected \"%s\"\n", fmt2, buf, expect);
-      status = 1;
-    }
-
-  return status;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/stdio-common/ctermid.c b/stdio-common/ctermid.c
deleted file mode 100644
index e4d94eada2..0000000000
--- a/stdio-common/ctermid.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <errno.h>
-#include <stdio.h>
-
-
-/* Return the name of the controlling terminal.
-   If S is not NULL, the name is copied into it (it should be at
-   least L_ctermid bytes long), otherwise a static buffer is used.  */
-char *
-ctermid (s)
-     char *s;
-{
-  __set_errno (ENOSYS);
-  return NULL;
-}
-
-
-stub_warning (ctermid)
-#include <stub-tag.h>
diff --git a/stdio-common/cuserid.c b/stdio-common/cuserid.c
deleted file mode 100644
index 826972f4de..0000000000
--- a/stdio-common/cuserid.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stdio.h>
-#include <errno.h>
-
-/* Return the username of the caller.
-   If S is not NULL, it points to a buffer of at least L_cuserid bytes
-   into which the name is copied; otherwise, a static buffer is used.  */
-char *
-cuserid (s)
-     char *s;
-{
-  __set_errno (ENOSYS);
-  return NULL;
-}
-
-
-stub_warning (cuserid)
-#include <stub-tag.h>
diff --git a/stdio-common/dprintf.c b/stdio-common/dprintf.c
index 6d00e10a63..b362e5fa71 100644
--- a/stdio-common/dprintf.c
+++ b/stdio-common/dprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,95,97,98,2002,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1991,95,97,98,2002,2004 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,13 +19,13 @@
 #include <stdarg.h>
 #include <stdio.h>
 
-#include <libioP.h>
+#include <libio/libioP.h>
 #define vdprintf(d, f, a) _IO_vdprintf (d, f, a)
 
 /* Write formatted output to D, according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-__dprintf (int d, const char *format, ...)
+dprintf (int d, const char *format, ...)
 {
   va_list arg;
   int done;
@@ -36,5 +36,4 @@ __dprintf (int d, const char *format, ...)
 
   return done;
 }
-ldbl_hidden_def (__dprintf, dprintf)
-ldbl_strong_alias (__dprintf, dprintf)
+libc_hidden_def (dprintf)
diff --git a/stdio-common/errlist.c b/stdio-common/errlist.c
deleted file mode 100644
index 6a834fc329..0000000000
--- a/stdio-common/errlist.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1991, 1994, 1997, 2005 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stddef.h>
-
-
-const char *const _sys_errlist[] =
-  {
-    "Error 0",			/* 0 */
-    "Argument out of function's domain", /* 1 = EDOM */
-    "Result out of range",	/* 2 = ERANGE */
-    "Operation not implemented", /* 3 = ENOSYS */
-    "Invalid argument",		/* 4 = EINVAL */
-    "Illegal seek",		/* 5 = ESPIPE */
-    "Bad file descriptor",	/* 6 = EBADF */
-    "Cannot allocate memory",	/* 7 = ENOMEM */
-    "Permission denied",	/* 8 = EACCES */
-    "Too many open files in system", /* 9 = ENFILE */
-    "Too many open files",	/* 10 = EMFILE */
-  };
-
-const int _sys_nerr = sizeof (_sys_errlist) / sizeof (_sys_errlist[0]);
diff --git a/stdio-common/flockfile.c b/stdio-common/flockfile.c
deleted file mode 100644
index 571930ee54..0000000000
--- a/stdio-common/flockfile.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Lock I/O stream.  Singlethreaded version.
-   Copyright (C) 1996, 1997, 2000, 2002 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stdio.h>
-
-#undef _IO_flockfile
-
-void
-__flockfile (FILE *stream)
-{
-  /* Do nothing.  Using this version does not do any locking.  */
-}
-weak_alias (__flockfile, flockfile);
-weak_alias (__flockfile, _IO_flockfile)
diff --git a/stdio-common/fprintf.c b/stdio-common/fprintf.c
index 689e80f466..0b99fc8994 100644
--- a/stdio-common/fprintf.c
+++ b/stdio-common/fprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1997, 2002, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1991,97,2002,2004 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,13 +18,12 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-#include <libioP.h>
 
 
 /* Write formatted output to STREAM from the format string FORMAT.  */
 /* VARARGS2 */
 int
-__fprintf (FILE *stream, const char *format, ...)
+fprintf (FILE *stream, const char *format, ...)
 {
   va_list arg;
   int done;
@@ -35,10 +34,9 @@ __fprintf (FILE *stream, const char *format, ...)
 
   return done;
 }
-ldbl_hidden_def (__fprintf, fprintf)
-ldbl_strong_alias (__fprintf, fprintf)
+libc_hidden_def (fprintf)
 
 /* We define the function with the real name here.  But deep down in
    libio the original function _IO_fprintf is also needed.  So make
    an alias.  */
-ldbl_weak_alias (__fprintf, _IO_fprintf)
+weak_alias (fprintf, _IO_fprintf)
diff --git a/stdio-common/fscanf.c b/stdio-common/fscanf.c
index a6b60162cf..58a66eaf30 100644
--- a/stdio-common/fscanf.c
+++ b/stdio-common/fscanf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1997, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1997 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,14 +16,13 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <libioP.h>
 #include <stdarg.h>
 #include <stdio.h>
 
 /* Read formatted input from STREAM according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-__fscanf (FILE *stream, const char *format, ...)
+fscanf (FILE *stream, const char *format, ...)
 {
   va_list arg;
   int done;
@@ -34,4 +33,3 @@ __fscanf (FILE *stream, const char *format, ...)
 
   return done;
 }
-ldbl_strong_alias (__fscanf, fscanf)
diff --git a/stdio-common/ftrylockfile.c b/stdio-common/ftrylockfile.c
deleted file mode 100644
index 7bd3e9b53b..0000000000
--- a/stdio-common/ftrylockfile.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Try locking I/O stream.  Singlethreaded version.
-   Copyright (C) 1996, 1997, 2000, 2002 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stdio.h>
-
-#undef _IO_ftrylockfile
-
-int
-__ftrylockfile (FILE *stream)
-{
-  /* Do nothing.  Using this version does not do any locking.  */
-  return 1;
-}
-weak_alias (__ftrylockfile, ftrylockfile);
-weak_alias (__ftrylockfile, _IO_ftrylockfile)
diff --git a/stdio-common/funlockfile.c b/stdio-common/funlockfile.c
deleted file mode 100644
index 902d29478d..0000000000
--- a/stdio-common/funlockfile.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Unlock I/O stream.  Singlethreaded version.
-   Copyright (C) 1996, 1997, 2000, 2002 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stdio.h>
-
-#undef _IO_funlockfile
-
-void
-__funlockfile (FILE *stream)
-{
-  /* Do nothing.  Using this version does not do any locking.  */
-}
-weak_alias (__funlockfile, _IO_funlockfile)
-weak_alias (__funlockfile, funlockfile);
diff --git a/stdio-common/fxprintf.c b/stdio-common/fxprintf.c
deleted file mode 100644
index f6ba0ca558..0000000000
--- a/stdio-common/fxprintf.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@gnu.org>.
-
-   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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <assert.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <wchar.h>
-#include <string.h>
-#include <libioP.h>
-
-
-int
-__fxprintf (FILE *fp, const char *fmt, ...)
-{
-  if (fp == NULL)
-    fp = stderr;
-
-  va_list ap;
-  va_start (ap, fmt);
-
-  int res;
-  if (_IO_fwide (fp, 0) > 0)
-    {
-      size_t len = strlen (fmt) + 1;
-      wchar_t wfmt[len];
-      for (size_t i = 0; i < len; ++i)
-	{
-	  assert (isascii (fmt[i]));
-	  wfmt[i] = fmt[i];
-	}
-      res = __vfwprintf (fp, wfmt, ap);
-    }
-  else
-    res = INTUSE(_IO_vfprintf) (fp, fmt, ap);
-
-  va_end (ap);
-
-  return res;
-}
diff --git a/stdio-common/perror.c b/stdio-common/perror.c
index 3ee61520f4..f0751375b5 100644
--- a/stdio-common/perror.c
+++ b/stdio-common/perror.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1993,1997,1998,2000-2005 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993,1997,1998,2000-2004 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 +37,10 @@ perror_internal (FILE *fp, const char *s, int errnum)
 
   errstring = __strerror_r (errnum, buf, sizeof buf);
 
-  (void) __fxprintf (fp, "%s%s%s\n", s, colon, errstring);
+  if (_IO_fwide (fp, 0) > 0)
+    (void) __fwprintf (fp, L"%s%s%s\n", s, colon, errstring);
+  else
+    (void) fprintf (fp, "%s%s%s\n", s, colon, errstring);
 }
 
 
diff --git a/stdio-common/printf-parsemb.c b/stdio-common/printf-parsemb.c
index 2f21fc6365..c55b97060c 100644
--- a/stdio-common/printf-parsemb.c
+++ b/stdio-common/printf-parsemb.c
@@ -1,5 +1,5 @@
 /* Helper functions for parsing printf format strings.
-   Copyright (C) 1995-2000,2002,2003,2004,2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-2000, 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of th GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -64,8 +64,7 @@ __find_specmb (const UCHAR_T *format, mbstate_t *ps)
 
       /* Remove any hints of a wrong encoding.  */
       ps->__count = 0;
-      if (! isascii (*format)
-	  && (len = __mbrlen ((const CHAR_T *) format, MB_CUR_MAX, ps)) > 0)
+      if (! isascii (*format) && (len = __mbrlen (format, MB_CUR_MAX, ps)) > 0)
 	format += len;
       else
 	++format;
diff --git a/stdio-common/printf-prs.c b/stdio-common/printf-prs.c
index 015b01f1ed..f3b27d6712 100644
--- a/stdio-common/printf-prs.c
+++ b/stdio-common/printf-prs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995, 1996, 1999, 2000, 2002, 2003, 2004, 2005
+/* Copyright (C) 1991, 1992, 1995, 1996, 1999, 2000, 2002, 2003, 2004
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -67,16 +67,15 @@ parse_printf_format (fmt, n, argtypes)
   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 (f = __find_specmb (f, &mbstate); *f != '\0'; f = spec.next_fmt)
+  for (fmt = __find_specmb (fmt, &mbstate); *fmt != '\0'; fmt = spec.next_fmt)
     {
       /* Parse this spec.  */
-      nargs += __parse_one_specmb (f, nargs, &spec, &max_ref_arg, &mbstate);
+      nargs += __parse_one_specmb (fmt, nargs, &spec, &max_ref_arg, &mbstate);
 
       /* If the width is determined by an argument this is an int.  */
       if (spec.width_arg != -1 && (size_t) spec.width_arg < n)
diff --git a/stdio-common/printf.c b/stdio-common/printf.c
index 4c8f3a2a0c..e28c5837e5 100644
--- a/stdio-common/printf.c
+++ b/stdio-common/printf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006
+/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -17,7 +17,6 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <libioP.h>
 #include <stdarg.h>
 #include <stdio.h>
 
@@ -26,7 +25,7 @@
 /* Write formatted output to stdout from the format string FORMAT.  */
 /* VARARGS1 */
 int
-__printf (const char *format, ...)
+printf (const char *format, ...)
 {
   va_list arg;
   int done;
@@ -39,6 +38,5 @@ __printf (const char *format, ...)
 }
 
 #undef _IO_printf
-ldbl_strong_alias (__printf, printf);
 /* This is for libg++.  */
-ldbl_strong_alias (__printf, _IO_printf);
+strong_alias (printf, _IO_printf);
diff --git a/stdio-common/printf.h b/stdio-common/printf.h
index 360cdcce1d..c16569b59b 100644
--- a/stdio-common/printf.h
+++ b/stdio-common/printf.h
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991-1993,1995-1999,2000,2001,2006
-	Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993,1995-1999,2000,2001 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
@@ -140,9 +139,6 @@ extern int printf_size_info (__const struct printf_info *__restrict
 			     __info, size_t __n, int *__restrict __argtypes)
      __THROW;
 
-#ifdef __LDBL_COMPAT
-# include <bits/printf-ldbl.h>
-#endif
 
 __END_DECLS
 
diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c
index c7a381a69d..ed225e05a6 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, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999,2000,2001,2002,2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
@@ -71,11 +71,7 @@
     {									      \
       register const int outc = (ch);					      \
       if (putc (outc, fp) == EOF)					      \
-	{								      \
-	  if (buffer_malloced)						      \
-	    free (wbuffer);						      \
-	  return -1;							      \
-	}								      \
+	return -1;							      \
       ++done;								      \
     } while (0)
 
@@ -86,11 +82,7 @@
       if (len > 20)							      \
 	{								      \
 	  if (PUT (fp, wide ? (const char *) wptr : ptr, outlen) != outlen)   \
-	    {								      \
-	      if (buffer_malloced)					      \
-		free (wbuffer);						      \
-	      return -1;						      \
-	    }								      \
+	    return -1;							      \
 	  ptr += outlen;						      \
 	  done += outlen;						      \
 	}								      \
@@ -109,11 +101,7 @@
   do									      \
     {									      \
       if (PAD (fp, ch, len) != len)					      \
-	{								      \
-	  if (buffer_malloced)						      \
-	    free (wbuffer);						      \
-	  return -1;							      \
-	}								      \
+	return -1;							      \
       done += len;							      \
     }									      \
   while (0)
@@ -150,9 +138,9 @@ static wchar_t *group_number (wchar_t *buf, wchar_t *bufend,
 
 
 int
-___printf_fp (FILE *fp,
-	      const struct printf_info *info,
-	      const void *const *args)
+__printf_fp (FILE *fp,
+	     const struct printf_info *info,
+	     const void *const *args)
 {
   /* The floating-point value to output.  */
   union
@@ -211,11 +199,6 @@ ___printf_fp (FILE *fp,
   /* Nonzero if this is output on a wide character stream.  */
   int wide = info->wide;
 
-  /* Buffer in which we produce the output.  */
-  wchar_t *wbuffer = NULL;
-  /* Flag whether wbuffer is malloc'ed or not.  */
-  int buffer_malloced = 0;
-
   auto wchar_t hack_digit (void);
 
   wchar_t hack_digit (void)
@@ -792,7 +775,7 @@ ___printf_fp (FILE *fp,
   else
     {
       /* This is a special case.  We don't need a factor because the
-	 numbers are in the range of 1.0 <= |fp| < 8.0.  We simply
+	 numbers are in the range of 0.0 <= fp < 8.0.  We simply
 	 shift it to the right place and divide it by 1.0 to get the
 	 leading digit.	 (Of course this division is not really made.)	*/
       assert (0 <= exponent && exponent < 3 &&
@@ -806,18 +789,17 @@ ___printf_fp (FILE *fp,
 
   {
     int width = info->width;
-    wchar_t *wstartp, *wcp;
+    wchar_t *wbuffer, *wstartp, *wcp;
+    int buffer_malloced;
     int chars_needed;
     int expscale;
     int intdig_max, intdig_no = 0;
-    int fracdig_min;
-    int fracdig_max;
+    int fracdig_min, fracdig_max, fracdig_no = 0;
     int dig_max;
     int significant;
     int ngroups = 0;
-    char spec = _tolower (info->spec);
 
-    if (spec == 'e')
+    if (_tolower (info->spec) == 'e')
       {
 	type = info->spec;
 	intdig_max = 1;
@@ -827,7 +809,7 @@ ___printf_fp (FILE *fp,
 	dig_max = INT_MAX;		/* Unlimited.  */
 	significant = 1;		/* Does not matter here.  */
       }
-    else if (spec == 'f')
+    else if (_tolower (info->spec) == 'f')
       {
 	type = 'f';
 	fracdig_min = fracdig_max = info->prec < 0 ? 6 : info->prec;
@@ -924,9 +906,7 @@ ___printf_fp (FILE *fp,
       }
 
     /* Generate the needed number of fractional digits.	 */
-    int fracdig_no = 0;
-    int added_zeros = 0;
-    while (fracdig_no < fracdig_min + added_zeros
+    while (fracdig_no < fracdig_min
 	   || (fracdig_no < fracdig_max && (fracsize > 1 || frac[0] != 0)))
       {
 	++fracdig_no;
@@ -937,7 +917,7 @@ ___printf_fp (FILE *fp,
 	  {
 	    ++fracdig_max;
 	    if (fracdig_min > 0)
-	      ++added_zeros;
+	      ++fracdig_min;
 	  }
       }
 
@@ -974,23 +954,11 @@ ___printf_fp (FILE *fp,
 	  {
 	    /* Process fractional digits.  Terminate if not rounded or
 	       radix character is reached.  */
-	    int removed = 0;
 	    while (*--wtp != decimalwc && *wtp == L'9')
-	      {
-		*wtp = L'0';
-		++removed;
-	      }
-	    if (removed == fracdig_min && added_zeros > 0)
-	      --added_zeros;
+	      *wtp = '0';
 	    if (*wtp != decimalwc)
 	      /* Round up.  */
 	      (*wtp)++;
-	    else if (__builtin_expect (spec == 'g' && type == 'f' && info->alt,
-				       0))
-	      /* This is a special case: the rounded number is 1.0,
-		 the format is 'g' or 'G', and the alternative format
-		 is selected.  This means the result must be "1.".  */
-	      --added_zeros;
 	  }
 
 	if (fracdig_no == 0 || *wtp == decimalwc)
@@ -1012,12 +980,6 @@ ___printf_fp (FILE *fp,
 		  {
 		    *wstartp = '1';
 		    exponent += expsign == 0 ? 1 : -1;
-
-		    /* The above exponent adjustment could lead to 1.0e-00,
-		       e.g. for 0.999999999.  Make sure exponent 0 always
-		       uses + sign.  */
-		    if (exponent == 0)
-		      expsign = 0;
 		  }
 		else if (intdig_no == dig_max)
 		  {
@@ -1063,7 +1025,7 @@ ___printf_fp (FILE *fp,
 
   do_expo:
     /* Now remove unnecessary '0' at the end of the string.  */
-    while (fracdig_no > fracdig_min + added_zeros && *(wcp - 1) == L'0')
+    while (fracdig_no > fracdig_min && *(wcp - 1) == L'0')
       {
 	--wcp;
 	--fracdig_no;
@@ -1081,46 +1043,26 @@ ___printf_fp (FILE *fp,
     /* Write the exponent if it is needed.  */
     if (type != 'f')
       {
-	if (__builtin_expect (expsign != 0 && exponent == 4 && spec == 'g', 0))
-	  {
-	    /* This is another special case.  The exponent of the number is
-	       really smaller than -4, which requires the 'e'/'E' format.
-	       But after rounding the number has an exponent of -4.  */
-	    assert (wcp >= wstartp + 1);
-	    assert (wstartp[0] == L'1');
-	    __wmemcpy (wstartp, L"0.0001", 6);
-	    wstartp[1] = decimalwc;
-	    if (wcp >= wstartp + 2)
-	      {
-		wmemset (wstartp + 6, L'0', wcp - (wstartp + 2));
-		wcp += 4;
-	      }
-	    else
-	      wcp += 5;
-	  }
-	else
-	  {
-	    *wcp++ = (wchar_t) type;
-	    *wcp++ = expsign ? L'-' : L'+';
+	*wcp++ = (wchar_t) type;
+	*wcp++ = expsign ? L'-' : L'+';
 
-	    /* Find the magnitude of the exponent.	*/
-	    expscale = 10;
-	    while (expscale <= exponent)
-	      expscale *= 10;
+	/* Find the magnitude of the exponent.	*/
+	expscale = 10;
+	while (expscale <= exponent)
+	  expscale *= 10;
 
-	    if (exponent < 10)
-	      /* Exponent always has at least two digits.  */
-	      *wcp++ = L'0';
-	    else
-	      do
-		{
-		  expscale /= 10;
-		  *wcp++ = L'0' + (exponent / expscale);
-		  exponent %= expscale;
-		}
-	      while (expscale > 10);
-	    *wcp++ = L'0' + exponent;
-	  }
+	if (exponent < 10)
+	  /* Exponent always has at least two digits.  */
+	  *wcp++ = L'0';
+	else
+	  do
+	    {
+	      expscale /= 10;
+	      *wcp++ = L'0' + (exponent / expscale);
+	      exponent %= expscale;
+	    }
+	  while (expscale > 10);
+	*wcp++ = L'0' + exponent;
       }
 
     /* Compute number of characters which must be filled with the padding
@@ -1166,12 +1108,8 @@ ___printf_fp (FILE *fp,
 	      buffer = (char *) malloc (2 + chars_needed + decimal_len
 					+ ngroups * thousands_sep_len);
 	      if (buffer == NULL)
-		{
-		  /* Signal an error to the caller.  */
-		  if (buffer_malloced)
-		    free (wbuffer);
-		  return -1;
-		}
+		/* Signal an error to the caller.  */
+		return -1;
 	    }
 	  else
 	    buffer = (char *) alloca (2 + chars_needed + decimal_len
@@ -1215,8 +1153,7 @@ ___printf_fp (FILE *fp,
   }
   return done;
 }
-ldbl_hidden_def (___printf_fp, __printf_fp)
-ldbl_strong_alias (___printf_fp, __printf_fp)
+libc_hidden_def (__printf_fp)
 
 /* Return the number of extra grouping characters that will be inserted
    into a number with INTDIG_MAX integer digits.  */
diff --git a/stdio-common/printf_fphex.c b/stdio-common/printf_fphex.c
deleted file mode 100644
index 4e30d94c61..0000000000
--- a/stdio-common/printf_fphex.c
+++ /dev/null
@@ -1,493 +0,0 @@
-/* Print floating point number in hexadecimal notation according to ISO C99.
-   Copyright (C) 1997-2002,2004,2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <ctype.h>
-#include <ieee754.h>
-#include <math.h>
-#include <printf.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <wchar.h>
-#include "_itoa.h"
-#include "_itowa.h"
-#include <locale/localeinfo.h>
-
-/* #define NDEBUG 1*/		/* Undefine this for debugging assertions.  */
-#include <assert.h>
-
-/* This defines make it possible to use the same code for GNU C library and
-   the GNU I/O library.	 */
-#ifdef USE_IN_LIBIO
-# 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))
-/* We use this file GNU C library and GNU I/O library.	So make
-   names equal.	 */
-# undef putc
-# define putc(c, f) (wide \
-		     ? (int)_IO_putwc_unlocked (c, f) : _IO_putc_unlocked (c, f))
-# define size_t     _IO_size_t
-# define FILE	     _IO_FILE
-#else	/* ! USE_IN_LIBIO */
-# define PUT(f, s, n) fwrite (s, 1, n, f)
-# define PAD(f, c, n) __printf_pad (f, c, n)
-ssize_t __printf_pad (FILE *, char pad, int n) __THROW; /* In vfprintf.c.  */
-#endif	/* USE_IN_LIBIO */
-
-/* Macros for doing the actual output.  */
-
-#define outchar(ch)							      \
-  do									      \
-    {									      \
-      register const int outc = (ch);					      \
-      if (putc (outc, fp) == EOF)					      \
-	return -1;							      \
-      ++done;								      \
-    } while (0)
-
-#define PRINT(ptr, wptr, len)						      \
-  do									      \
-    {									      \
-      register size_t outlen = (len);					      \
-      if (wide)								      \
-	while (outlen-- > 0)						      \
-	  outchar (*wptr++);						      \
-      else								      \
-	while (outlen-- > 0)						      \
-	  outchar (*ptr++);						      \
-    } while (0)
-
-#define PADN(ch, len)							      \
-  do									      \
-    {									      \
-      if (PAD (fp, ch, len) != len)					      \
-	return -1;							      \
-      done += len;							      \
-    }									      \
-  while (0)
-
-#ifndef MIN
-# define MIN(a,b) ((a)<(b)?(a):(b))
-#endif
-
-
-int
-__printf_fphex (FILE *fp,
-		const struct printf_info *info,
-		const void *const *args)
-{
-  /* The floating-point value to output.  */
-  union
-    {
-      union ieee754_double dbl;
-      union ieee854_long_double ldbl;
-    }
-  fpnum;
-
-  /* Locale-dependent representation of decimal point.	*/
-  const char *decimal;
-  wchar_t decimalwc;
-
-  /* "NaN" or "Inf" for the special cases.  */
-  const char *special = NULL;
-  const wchar_t *wspecial = NULL;
-
-  /* Buffer for the generated number string for the mantissa.  The
-     maximal size for the mantissa is 128 bits.  */
-  char numbuf[32];
-  char *numstr;
-  char *numend;
-  wchar_t wnumbuf[32];
-  wchar_t *wnumstr;
-  wchar_t *wnumend;
-  int negative;
-
-  /* The maximal exponent of two in decimal notation has 5 digits.  */
-  char expbuf[5];
-  char *expstr;
-  wchar_t wexpbuf[5];
-  wchar_t *wexpstr;
-  int expnegative;
-  int exponent;
-
-  /* Non-zero is mantissa is zero.  */
-  int zero_mantissa;
-
-  /* The leading digit before the decimal point.  */
-  char leading;
-
-  /* Precision.  */
-  int precision = info->prec;
-
-  /* Width.  */
-  int width = info->width;
-
-  /* Number of characters written.  */
-  int done = 0;
-
-  /* Nonzero if this is output on a wide character stream.  */
-  int wide = info->wide;
-
-
-  /* Figure out the decimal point character.  */
-  if (info->extra == 0)
-    {
-      decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
-      decimalwc = _NL_CURRENT_WORD (LC_NUMERIC, _NL_NUMERIC_DECIMAL_POINT_WC);
-    }
-  else
-    {
-      decimal = _NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT);
-      decimalwc = _NL_CURRENT_WORD (LC_MONETARY,
-				    _NL_MONETARY_DECIMAL_POINT_WC);
-    }
-  /* The decimal point character must never be zero.  */
-  assert (*decimal != '\0' && decimalwc != L'\0');
-
-
-  /* Fetch the argument value.	*/
-#ifndef __NO_LONG_DOUBLE_MATH
-  if (info->is_long_double && sizeof (long double) > sizeof (double))
-    {
-      fpnum.ldbl.d = *(const long double *) args[0];
-
-      /* Check for special values: not a number or infinity.  */
-      if (__isnanl (fpnum.ldbl.d))
-	{
-	  if (isupper (info->spec))
-	    {
-	      special = "NAN";
-	      wspecial = L"NAN";
-	    }
-	  else
-	    {
-	      special = "nan";
-	      wspecial = L"nan";
-	    }
-	  negative = 0;
-	}
-      else
-	{
-	  if (__isinfl (fpnum.ldbl.d))
-	    {
-	      if (isupper (info->spec))
-		{
-		  special = "INF";
-		  wspecial = L"INF";
-		}
-	      else
-		{
-		  special = "inf";
-		  wspecial = L"inf";
-		}
-	    }
-
-	  negative = signbit (fpnum.ldbl.d);
-	}
-    }
-  else
-#endif	/* no long double */
-    {
-      fpnum.dbl.d = *(const double *) args[0];
-
-      /* Check for special values: not a number or infinity.  */
-      if (__isnan (fpnum.dbl.d))
-	{
-	  if (isupper (info->spec))
-	    {
-	      special = "NAN";
-	      wspecial = L"NAN";
-	    }
-	  else
-	    {
-	      special = "nan";
-	      wspecial = L"nan";
-	    }
-	  negative = 0;
-	}
-      else
-	{
-	  if (__isinf (fpnum.dbl.d))
-	    {
-	      if (isupper (info->spec))
-		{
-		  special = "INF";
-		  wspecial = L"INF";
-		}
-	      else
-		{
-		  special = "inf";
-		  wspecial = L"inf";
-		}
-	    }
-
-	  negative = signbit (fpnum.dbl.d);
-	}
-    }
-
-  if (special)
-    {
-      int width = info->width;
-
-      if (negative || info->showsign || info->space)
-	--width;
-      width -= 3;
-
-      if (!info->left && width > 0)
-	PADN (' ', width);
-
-      if (negative)
-	outchar ('-');
-      else if (info->showsign)
-	outchar ('+');
-      else if (info->space)
-	outchar (' ');
-
-      PRINT (special, wspecial, 3);
-
-      if (info->left && width > 0)
-	PADN (' ', width);
-
-      return done;
-    }
-
-  if (info->is_long_double == 0 || sizeof (double) == sizeof (long double))
-    {
-      /* We have 52 bits of mantissa plus one implicit digit.  Since
-	 52 bits are representable without rest using hexadecimal
-	 digits we use only the implicit digits for the number before
-	 the decimal point.  */
-      unsigned long long int num;
-
-      num = (((unsigned long long int) fpnum.dbl.ieee.mantissa0) << 32
-	     | fpnum.dbl.ieee.mantissa1);
-
-      zero_mantissa = num == 0;
-
-      if (sizeof (unsigned long int) > 6)
-	{
-	  wnumstr = _itowa_word (num, wnumbuf + (sizeof wnumbuf) / sizeof (wchar_t), 16,
-				 info->spec == 'A');
-	  numstr = _itoa_word (num, numbuf + sizeof numbuf, 16,
-			       info->spec == 'A');
-	}
-      else
-	{
-	  wnumstr = _itowa (num, wnumbuf + sizeof wnumbuf / sizeof (wchar_t), 16,
-			    info->spec == 'A');
-	  numstr = _itoa (num, numbuf + sizeof numbuf, 16,
-			  info->spec == 'A');
-	}
-
-      /* Fill with zeroes.  */
-      while (wnumstr > wnumbuf + (sizeof wnumbuf - 52) / sizeof (wchar_t))
-	{
-	  *--wnumstr = L'0';
-	  *--numstr = '0';
-	}
-
-      leading = fpnum.dbl.ieee.exponent == 0 ? '0' : '1';
-
-      exponent = fpnum.dbl.ieee.exponent;
-
-      if (exponent == 0)
-	{
-	  if (zero_mantissa)
-	    expnegative = 0;
-	  else
-	    {
-	      /* This is a denormalized number.  */
-	      expnegative = 1;
-	      exponent = IEEE754_DOUBLE_BIAS - 1;
-	    }
-	}
-      else if (exponent >= IEEE754_DOUBLE_BIAS)
-	{
-	  expnegative = 0;
-	  exponent -= IEEE754_DOUBLE_BIAS;
-	}
-      else
-	{
-	  expnegative = 1;
-	  exponent = -(exponent - IEEE754_DOUBLE_BIAS);
-	}
-    }
-#ifdef PRINT_FPHEX_LONG_DOUBLE
-  else
-    PRINT_FPHEX_LONG_DOUBLE;
-#endif
-
-  /* Look for trailing zeroes.  */
-  if (! zero_mantissa)
-    {
-      wnumend = &wnumbuf[sizeof wnumbuf / sizeof wnumbuf[0]];
-      numend = &numbuf[sizeof numbuf / sizeof numbuf[0]];
-      while (wnumend[-1] == L'0')
-	{
-	  --wnumend;
-	  --numend;
-	}
-
-      if (precision == -1)
-	precision = numend - numstr;
-      else if (precision < numend - numstr
-	       && (numstr[precision] > '8'
-		   || (('A' < '0' || 'a' < '0')
-		       && numstr[precision] < '0')
-		   || (numstr[precision] == '8'
-		       && (precision + 1 < numend - numstr
-			   /* Round to even.  */
-			   || (precision > 0
-			       && ((numstr[precision - 1] & 1)
-				   ^ (isdigit (numstr[precision - 1]) == 0)))
-			   || (precision == 0
-			       && ((leading & 1)
-				   ^ (isdigit (leading) == 0)))))))
-	{
-	  /* Round up.  */
-	  int cnt = precision;
-	  while (--cnt >= 0)
-	    {
-	      char ch = numstr[cnt];
-	      /* We assume that the digits and the letters are ordered
-		 like in ASCII.  This is true for the rest of GNU, too.  */
-	      if (ch == '9')
-		{
-		  wnumstr[cnt] = (wchar_t) info->spec;
-		  numstr[cnt] = info->spec;	/* This is tricky,
-		  				   think about it!  */
-		  break;
-		}
-	      else if (tolower (ch) < 'f')
-		{
-		  ++numstr[cnt];
-		  ++wnumstr[cnt];
-		  break;
-		}
-	      else
-		{
-		  numstr[cnt] = '0';
-		  wnumstr[cnt] = L'0';
-		}
-	    }
-	  if (cnt < 0)
-	    {
-	      /* The mantissa so far was fff...f  Now increment the
-		 leading digit.  Here it is again possible that we
-		 get an overflow.  */
-	      if (leading == '9')
-		leading = info->spec;
-	      else if (tolower (leading) < 'f')
-		++leading;
-	      else
-		{
-		  leading = '1';
-		  if (expnegative)
-		    {
-		      exponent -= 4;
-		      if (exponent <= 0)
-			{
-			  exponent = -exponent;
-			  expnegative = 0;
-			}
-		    }
-		  else
-		    exponent += 4;
-		}
-	    }
-	}
-    }
-  else
-    {
-      if (precision == -1)
-	precision = 0;
-      numend = numstr;
-      wnumend = wnumstr;
-    }
-
-  /* Now we can compute the exponent string.  */
-  expstr = _itoa_word (exponent, expbuf + sizeof expbuf, 10, 0);
-  wexpstr = _itowa_word (exponent,
-			 wexpbuf + sizeof wexpbuf / sizeof (wchar_t), 10, 0);
-
-  /* Now we have all information to compute the size.  */
-  width -= ((negative || info->showsign || info->space)
-	    /* Sign.  */
-	    + 2    + 1 + 0 + precision + 1 + 1
-	    /* 0x    h   .   hhh         P   ExpoSign.  */
-	    + ((expbuf + sizeof expbuf) - expstr));
-	    /* Exponent.  */
-
-  /* Count the decimal point.
-     A special case when the mantissa or the precision is zero and the `#'
-     is not given.  In this case we must not print the decimal point.  */
-  if (precision > 0 || info->alt)
-    width -= wide ? 1 : strlen (decimal);
-
-  if (!info->left && info->pad != '0' && width > 0)
-    PADN (' ', width);
-
-  if (negative)
-    outchar ('-');
-  else if (info->showsign)
-    outchar ('+');
-  else if (info->space)
-    outchar (' ');
-
-  outchar ('0');
-  if ('X' - 'A' == 'x' - 'a')
-    outchar (info->spec + ('x' - 'a'));
-  else
-    outchar (info->spec == 'A' ? 'X' : 'x');
-
-  if (!info->left && info->pad == '0' && width > 0)
-    PADN ('0', width);
-
-  outchar (leading);
-
-  if (precision > 0 || info->alt)
-    {
-      const wchar_t *wtmp = &decimalwc;
-      PRINT (decimal, wtmp, wide ? 1 : strlen (decimal));
-    }
-
-  if (precision > 0)
-    {
-      ssize_t tofill = precision - (numend - numstr);
-      PRINT (numstr, wnumstr, MIN (numend - numstr, precision));
-      if (tofill > 0)
-	PADN ('0', tofill);
-    }
-
-  if ('P' - 'A' == 'p' - 'a')
-    outchar (info->spec + ('p' - 'a'));
-  else
-    outchar (info->spec == 'A' ? 'P' : 'p');
-
-  outchar (expnegative ? '-' : '+');
-
-  PRINT (expstr, wexpstr, (expbuf + sizeof expbuf) - expstr);
-
-  if (info->left && info->pad != '0' && width > 0)
-    PADN (info->pad, width);
-
-  return done;
-}
diff --git a/stdio-common/printf_size.c b/stdio-common/printf_size.c
index 957de2f571..32f262ead0 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 Free Software Foundation, Inc.
+   Copyright (C) 1997-2002, 2004 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>.
@@ -86,8 +86,7 @@ extern int __printf_fp (FILE *fp, const struct printf_info *info,
 
 
 int
-__printf_size (FILE *fp, const struct printf_info *info,
-	       const void *const *args)
+printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
 {
   /* Units for the both formats.  */
 #define BINARY_UNITS	" kmgtpezy"
@@ -234,7 +233,6 @@ __printf_size (FILE *fp, const struct printf_info *info,
 
   return done;
 }
-ldbl_strong_alias (__printf_size, printf_size);
 
 /* This is the function used by `vfprintf' to determine number and
    type of the arguments.  */
diff --git a/stdio-common/psignal.c b/stdio-common/psignal.c
index 98049a5871..2e6588c692 100644
--- a/stdio-common/psignal.c
+++ b/stdio-common/psignal.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995, 1996, 1997, 2001, 2002, 2004, 2005
+/* Copyright (C) 1991, 1992, 1995, 1996, 1997, 2001, 2002, 2004
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -24,6 +24,10 @@
 #include <wchar.h>
 
 
+#ifndef	HAVE_GNU_LD
+#define	_sys_siglist	sys_siglist
+#endif
+
 /* Defined in sys_siglist.c.  */
 extern const char *const _sys_siglist[];
 extern const char *const _sys_siglist_internal[] attribute_hidden;
@@ -43,16 +47,29 @@ psignal (int sig, const char *s)
     colon = ": ";
 
   if (sig >= 0 && sig < NSIG && (desc = INTUSE(_sys_siglist)[sig]) != NULL)
-    (void) __fxprintf (NULL, "%s%s%s\n", s, colon, _(desc));
+    {
+      if (_IO_fwide (stderr, 0) > 0)
+	(void) __fwprintf (stderr, L"%s%s%s\n", s, colon, _(desc));
+      else
+	(void) fprintf (stderr, "%s%s%s\n", s, colon, _(desc));
+    }
   else
     {
       char *buf;
 
       if (__asprintf (&buf, _("%s%sUnknown signal %d\n"), s, colon, sig) < 0)
-	(void) __fxprintf (NULL, "%s%s%s\n", s, colon, _("Unknown signal"));
+	{
+	  if (_IO_fwide (stderr, 0) > 0)
+	    (void) __fwprintf (stderr, L"%s%s%s\n", s, colon, _("Unknown signal"));
+	  else
+	    (void) fprintf (stderr, "%s%s%s\n", s, colon, _("Unknown signal"));
+	}
       else
 	{
-	  (void) __fxprintf (NULL, "%s", buf);
+	  if (_IO_fwide (stderr, 0) > 0)
+	    (void) __fwprintf (stderr, L"%s",  buf);
+	  else
+	    (void) fputs (buf, stderr);
 
 	  free (buf);
 	}
diff --git a/stdio-common/remove.c b/stdio-common/remove.c
deleted file mode 100644
index 5dc0e9edf0..0000000000
--- a/stdio-common/remove.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ANSI C `remove' function to delete a file or directory.  Stub version.
-   Copyright (C) 1995,96,97,2002 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <errno.h>
-#include <stdio.h>
-
-int
-remove (file)
-     const char *file;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-libc_hidden_def (remove)
-
-stub_warning (remove)
-#include <stub-tag.h>
diff --git a/stdio-common/rename.c b/stdio-common/rename.c
deleted file mode 100644
index b7d8392179..0000000000
--- a/stdio-common/rename.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stdio.h>
-#include <errno.h>
-
-
-/* Rename the file OLD to NEW.  */
-int
-rename (old, new)
-     const char *old;
-     const char *new;
-{
-  if (old == NULL || new == NULL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-
-stub_warning (rename)
-#include <stub-tag.h>
diff --git a/stdio-common/renameat.c b/stdio-common/renameat.c
deleted file mode 100644
index 1261da88a4..0000000000
--- a/stdio-common/renameat.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 2005, 2006 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-
-
-/* Rename the file OLD relative to OLDFD to NEW relative to NEWFD.  */
-int
-renameat (oldfd, old, newfd, new)
-     int oldfd;
-     const char *old;
-     int newfd;
-     const char *new;
-{
-  if ((oldfd < 0 && oldfd != AT_FDCWD) || (newfd < 0 && newfd != AT_FDCWD))
-    {
-      __set_errno (EBADF);
-      return -1;
-    }
-
-  if (old == NULL || new == NULL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-
-stub_warning (renameat)
-#include <stub-tag.h>
diff --git a/stdio-common/scanf.c b/stdio-common/scanf.c
index d4a4daf726..62c9959651 100644
--- a/stdio-common/scanf.c
+++ b/stdio-common/scanf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1997, 2002, 2004, 2006
+/* Copyright (C) 1991, 1995, 1996, 1997, 2002, 2004
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -26,7 +26,7 @@
 /* Read formatted input from stdin according to the format string FORMAT.  */
 /* VARARGS1 */
 int
-__scanf (const char *format, ...)
+scanf (const char *format, ...)
 {
   va_list arg;
   int done;
@@ -37,4 +37,3 @@ __scanf (const char *format, ...)
 
   return done;
 }
-ldbl_strong_alias (__scanf, scanf)
diff --git a/stdio-common/siglist.c b/stdio-common/siglist.c
deleted file mode 100644
index 80847cd491..0000000000
--- a/stdio-common/siglist.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Define list of all signal numbers and their names.
-   Copyright (C) 1997, 1998, 1999, 2002 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stddef.h>
-#include <signal.h>
-#include <libintl.h>
-
-const char *const _sys_siglist[NSIG] =
-{
-#define init_sig(sig, abbrev, desc)   [sig] = desc,
-#include <siglist.h>
-#undef init_sig
-};
-strong_alias (_sys_siglist, _sys_siglist_internal)
-
-
-const char *const _sys_sigabbrev[NSIG] =
-{
-#define init_sig(sig, abbrev, desc)   [sig] = abbrev,
-#include <siglist.h>
-#undef init_sig
-};
diff --git a/stdio-common/snprintf.c b/stdio-common/snprintf.c
index 00d2082350..ce392f0096 100644
--- a/stdio-common/snprintf.c
+++ b/stdio-common/snprintf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991, 1995, 1997, 1998, 2004, 2006
-   Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1997, 1998, 2004 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,8 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-#include <libioP.h>
+
+#include <libio/libioP.h>
 #define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a)
 
 /* Write formatted output into S, according to the format
@@ -37,4 +37,4 @@ __snprintf (char *s, size_t maxlen, const char *format, ...)
 
   return done;
 }
-ldbl_weak_alias (__snprintf, snprintf)
+weak_alias (__snprintf, snprintf)
diff --git a/stdio-common/sprintf.c b/stdio-common/sprintf.c
index 7f564d5635..249fcb0dde 100644
--- a/stdio-common/sprintf.c
+++ b/stdio-common/sprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1997, 1998, 2002, 2004, 2006
+/* Copyright (C) 1991, 1995, 1997, 1998, 2002, 2004
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -19,13 +19,13 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-#include <libioP.h>
+#include <libio/iolibio.h>
 #define vsprintf(s, f, a) INTUSE(_IO_vsprintf) (s, f, a)
 
 /* Write formatted output into S, according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-__sprintf (char *s, const char *format, ...)
+sprintf (char *s, const char *format, ...)
 {
   va_list arg;
   int done;
@@ -36,6 +36,6 @@ __sprintf (char *s, const char *format, ...)
 
   return done;
 }
-ldbl_hidden_def (__sprintf, sprintf)
-ldbl_strong_alias (__sprintf, sprintf)
-ldbl_strong_alias (__sprintf, _IO_sprintf)
+libc_hidden_def (sprintf)
+
+strong_alias(sprintf, _IO_sprintf)
diff --git a/stdio-common/sscanf.c b/stdio-common/sscanf.c
index 384a6977dc..b36976710b 100644
--- a/stdio-common/sscanf.c
+++ b/stdio-common/sscanf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1998, 2002, 2003, 2004, 2006
+/* Copyright (C) 1991, 1995, 1996, 1998, 2002, 2003, 2004
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -19,13 +19,13 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-#include <libioP.h>
+#include <libio/iolibio.h>
 #define __vsscanf(s, f, a) _IO_vsscanf (s, f, a)
 
 /* Read formatted input from S, according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-__sscanf (const char *s, const char *format, ...)
+sscanf (const char *s, const char *format, ...)
 {
   va_list arg;
   int done;
@@ -36,8 +36,8 @@ __sscanf (const char *s, const char *format, ...)
 
   return done;
 }
-ldbl_hidden_def (__sscanf, sscanf)
-ldbl_strong_alias (__sscanf, sscanf)
+libc_hidden_def (sscanf)
+
 #undef _IO_sscanf
 /* This is for libg++.  */
-ldbl_strong_alias (__sscanf, _IO_sscanf)
+strong_alias (sscanf, _IO_sscanf)
diff --git a/stdio-common/tempname.c b/stdio-common/tempname.c
deleted file mode 100644
index 60c94d6409..0000000000
--- a/stdio-common/tempname.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (C) 1991, 92, 93, 95-98, 99 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#define __need_size_t
-#include <stddef.h>
-#include <stdio.h>
-#include <errno.h>
-
-/* Perform the "SVID path search malarkey" on DIR and PFX.  Write a
-   template suitable for use in __gen_tempname into TMPL, bounded
-   by TMPL_LEN. */
-int
-__path_search (tmpl, tmpl_len, dir, pfx, try_tmpdir)
-     char *tmpl;
-     size_t tmpl_len;
-     const char *dir;
-     const char *pfx;
-     int try_tmpdir;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-stub_warning (__path_search)
-
-/* Generate a (hopefully) unique temporary filename
-   in DIR (if applicable), using template TMPL.
-   KIND determines what to do with that name.  It may be one of:
-     __GT_FILE:		create a file and return a read-write fd.
-     __GT_BIGFILE:	same, but use open64() (or equivalent).
-     __GT_DIR:		create a directory.
-     __GT_NOCREATE:	just find a name not currently in use.
- */
-
-int
-__gen_tempname (tmpl, kind)
-     char *tmpl;
-     int kind;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-stub_warning (__gen_tempname)
-#include <stub-tag.h>
diff --git a/stdio-common/test-vfprintf.c b/stdio-common/test-vfprintf.c
index 342ac471da..a683eac779 100644
--- a/stdio-common/test-vfprintf.c
+++ b/stdio-common/test-vfprintf.c
@@ -1,5 +1,5 @@
 /* Tests of *printf for very large strings.
-   Copyright (C) 2000, 2002, 2003, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
 
@@ -94,7 +94,6 @@ main (void)
       fprintf (fp, "%.*s", 30000, large);
       large[20000] = '\0';
       fprintf (fp, large);
-      fprintf (fp, "%-1.300000000s", "hello");
 
       if (fflush (fp) != 0 || ferror (fp) != 0 || fclose (fp) != 0)
 	{
@@ -109,12 +108,11 @@ main (void)
 		  setlocale (LC_ALL, NULL));
 	  exit (1);
 	}
-      else if (st.st_size != 50000 + 30000 + 19999 + 5)
+      else if (st.st_size != 99999)
 	{
 	  printf ("file size incorrect for locale %s: %jd instead of %jd\n",
 		  setlocale (LC_ALL, NULL),
-		  (intmax_t) st.st_size,
-		  (intmax_t) 50000 + 30000 + 19999 + 5);
+		  (intmax_t) st.st_size, (intmax_t) 99999);
 	  res = 1;
 	}
       else
diff --git a/stdio-common/tfformat.c b/stdio-common/tfformat.c
index d67b3b504d..ea7365b2c9 100644
--- a/stdio-common/tfformat.c
+++ b/stdio-common/tfformat.c
@@ -4012,17 +4012,6 @@ sprint_double_type sprint_doubles[] =
   {__LINE__, 16,			"0x1.0p+4", "%.1a"},
   {__LINE__, 16,			"0x1.00000000000000000000p+4", "%.20a"},
   {__LINE__, 4444.88888888,		"4445", "%2.F"},
-  {__LINE__, 0.956,			"1", "%.0g"},
-  {__LINE__, 1.0956,			"1.", "%#.0g"},
-  {__LINE__, 0.956,			"1.", "%#.0g"},
-  {__LINE__, 0.0956,			"0.1", "%#.0g"},
-  {__LINE__, 0.00956,			"0.01", "%#.0g"},
-  {__LINE__, 0.000956,			"0.001", "%#.0g"},
-  {__LINE__, 0.000098,			"0.0001", "%#.0g"},
-  {__LINE__, 0.0000996,			"0.00010", "%#.2g"},
-  {__LINE__, 9.999999999999999e-05,	"0.0001", "%g"},
-  {__LINE__, 1.0,			"1.000000e+00", "%e"},
-  {__LINE__, .9999999999999999,		"1.000000e+00", "%e"},
 
   {0 }
 
@@ -4034,8 +4023,13 @@ sprint_double_type sprint_doubles[] =
 
 int required_precision = 13;
 
+#if defined(__STDC__) || defined(__cplusplus)
 static int
 matches (register char *result, register const char *desired)
+#else
+int matches(result, desired)
+     register char *result; register const char *desired;
+#endif
 {
     int digits_seen = 0;
     for (;; result++, desired++) {
@@ -4086,7 +4080,7 @@ int main(int argc, char *argv[])
 
   /* And one special test.  */
   {
-    static const char ref[] = "1.7763568394002504646778106689453125e-15";
+    const char ref[] = "1.7763568394002504646778106689453125e-15";
     int i;
     d = 1.0;
     for (i = 1; i < 50; ++i)
diff --git a/stdio-common/tmpfile.c b/stdio-common/tmpfile.c
deleted file mode 100644
index 41f12bc8ba..0000000000
--- a/stdio-common/tmpfile.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Open a stdio stream on an anonymous temporary file.  Generic/POSIX version.
-   Copyright (C) 1991,93,1996-2000,2002,2003 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, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stdio.h>
-#include <unistd.h>
-
-#ifdef USE_IN_LIBIO
-# include <iolibio.h>
-# define __fdopen INTUSE(_IO_fdopen)
-# ifndef tmpfile
-#  define tmpfile __new_tmpfile
-# endif
-#endif
-
-#ifndef GEN_THIS
-# define GEN_THIS __GT_FILE
-#endif
-
-/* This returns a new stream opened on a temporary file (generated
-   by tmpnam).  The file is opened with mode "w+b" (binary read/write).
-   If we couldn't generate a unique filename or the file couldn't
-   be opened, NULL is returned.  */
-FILE *
-tmpfile (void)
-{
-  char buf[FILENAME_MAX];
-  int fd;
-  FILE *f;
-
-  if (__path_search (buf, FILENAME_MAX, NULL, "tmpf", 0))
-    return NULL;
-  fd = __gen_tempname (buf, GEN_THIS);
-  if (fd < 0)
-    return NULL;
-
-  /* Note that this relies on the Unix semantics that
-     a file is not really removed until it is closed.  */
-  (void) __unlink (buf);
-
-  if ((f = __fdopen (fd, "w+b")) == NULL)
-    __close (fd);
-
-  return f;
-}
-
-#if defined USE_IN_LIBIO && GEN_THIS == __GT_FILE /* Not for tmpfile64.  */
-# undef tmpfile
-# include <shlib-compat.h>
-versioned_symbol (libc, __new_tmpfile, tmpfile, GLIBC_2_1);
-#endif
diff --git a/stdio-common/tmpfile64.c b/stdio-common/tmpfile64.c
deleted file mode 100644
index b265aeee56..0000000000
--- a/stdio-common/tmpfile64.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#define GEN_THIS	__GT_BIGFILE
-#define tmpfile		tmpfile64
-#include <tmpfile.c>
diff --git a/stdio-common/tst-fgets.c b/stdio-common/tst-fgets.c
deleted file mode 100644
index 0aa9030e3a..0000000000
--- a/stdio-common/tst-fgets.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Derived from the test case in
-   http://sourceware.org/bugzilla/show_bug.cgi?id=713.  */
-#include <stdio.h>
-
-static int
-do_test (void)
-{
-  FILE *fp = fmemopen ((char *) "hello", 5, "r");
-  char buf[2];
-  char *bp = fgets (buf, sizeof (buf), fp);
-  printf ("fgets: %s\n", bp == buf ? "OK" : "ERROR");
-  int res = bp != buf;
-  bp = fgets_unlocked (buf, sizeof (buf), fp);
-  printf ("fgets_unlocked: %s\n", bp == buf ? "OK" : "ERROR");
-  res |= bp != buf;
-  return res;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/stdio-common/tst-fmemopen2.c b/stdio-common/tst-fmemopen2.c
deleted file mode 100644
index 81beddddef..0000000000
--- a/stdio-common/tst-fmemopen2.c
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-
-
-static int
-do_test (void)
-{
-  int result = 0;
-  char buf[100];
-  FILE *fp = fmemopen (buf, sizeof (buf), "w");
-  if (fp == NULL)
-    {
-      puts ("fmemopen failed");
-      return 0;
-    }
-  static const char str[] = "hello world";
-#define nstr (sizeof (str) - 1)
-  fputs (str, fp);
-  off_t o = ftello (fp);
-  if (o != nstr)
-    {
-      printf ("first ftello returned %ld, expected %zu\n", o, nstr);
-      result = 1;
-    }
-  rewind (fp);
-  o = ftello (fp);
-  if (o != 0)
-    {
-      printf ("second ftello returned %ld, expected %zu\n", o, (off_t) 0);
-      result = 1;
-    }
-  if (fseeko (fp, 0, SEEK_END) != 0)
-    {
-      puts ("fseeko failed");
-      return 1;
-    }
-  o = ftello (fp);
-  if (o != nstr)
-    {
-      printf ("third ftello returned %ld, expected %zu\n", o, nstr);
-      result = 1;
-    }
-  rewind (fp);
-  static const char str2[] = "just hello";
-#define nstr2 (sizeof (str2) - 1)
-  assert (nstr2 < nstr);
-  fputs (str2, fp);
-  o = ftello (fp);
-  if (o != nstr2)
-    {
-      printf ("fourth ftello returned %ld, expected %zu\n", o, nstr2);
-      result = 1;
-    }
-  fclose (fp);
-  static const char str3[] = "just hellod";
-  if (strcmp (buf, str3) != 0)
-    {
-      printf ("final string is \"%s\", expected \"%s\"\n",
-              buf, str3);
-      result = 1;
-    }
-  return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/stdio-common/tst-fwrite.c b/stdio-common/tst-fwrite.c
deleted file mode 100644
index 2986c8932a..0000000000
--- a/stdio-common/tst-fwrite.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Derived from the test case in
-   http://sourceware.org/bugzilla/show_bug.cgi?id=1078.  */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#define OUT_SIZE 10000
-
-
-static int fd;
-
-static void prepare (void);
-#define PREPARE(argc, argv) prepare ()
-
-static int do_test (void);
-#define TEST_FUNCTION do_test ()
-
-#include "../test-skeleton.c"
-
-
-static void
-prepare (void)
-{
-  fd = create_temp_file ("tst-fwrite.", NULL);
-  if (fd == -1)
-    {
-      puts ("cannot create temporary file");
-      exit (1);
-    }
-}
-
-
-static int
-do_test (void)
-{
-  FILE* f = fdopen (fd, "w+");
-  if (f == NULL) {
-    puts ("cannot create stream");
-    return 1;
-  }
-  puts ("Opened temp file");
-
-  if (fwrite ("a", 1, 1, f) != 1)
-    {
-      puts ("1st fwrite failed");
-      return 1;
-    }
-  puts ("Wrote a byte");
-  fflush (f);
-
-  char buffer[10000];
-  size_t i = fread (buffer, 1, sizeof (buffer), f);
-  printf ("Read %zu bytes\n", i);
-
-  for (i = 0; i < OUT_SIZE; i++)
-    {
-      if (fwrite ("n", 1, 1, f) != 1)
-	{
-	  printf ("fwrite in loop round %zu failed\n", i);
-	  return 1;
-	}
-
-      if ((i + 1) % 1000 == 0)
-	printf ("wrote %zu bytes ...\n", i + 1);
-    }
-
-  printf ("Wrote %i bytes [done]\n", OUT_SIZE);
-
-  return 0;
-}
diff --git a/stdio-common/tst-printf.c b/stdio-common/tst-printf.c
index 06fa38ab55..a9db7ad2de 100644
--- a/stdio-common/tst-printf.c
+++ b/stdio-common/tst-printf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,93,95,96,97,98,99, 2000, 2002, 2006
+/* Copyright (C) 1991,92,93,95,96,97,98,99, 2000, 2002
      Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -273,15 +273,6 @@ I am ready for my first lesson today.";
 
   printf ("printf (\"%%hhu\", %u) = %hhu\n", UCHAR_MAX + 2, UCHAR_MAX + 2);
   printf ("printf (\"%%hu\", %u) = %hu\n", USHRT_MAX + 2, USHRT_MAX + 2);
-  printf ("printf (\"%%hhi\", %i) = %hhi\n", UCHAR_MAX + 2, UCHAR_MAX + 2);
-  printf ("printf (\"%%hi\", %i) = %hi\n", USHRT_MAX + 2, USHRT_MAX + 2);
-
-  printf ("printf (\"%%1$hhu\", %2$u) = %1$hhu\n",
-	  UCHAR_MAX + 2, UCHAR_MAX + 2);
-  printf ("printf (\"%%1$hu\", %2$u) = %1$hu\n", USHRT_MAX + 2, USHRT_MAX + 2);
-  printf ("printf (\"%%1$hhi\", %2$i) = %1$hhi\n",
-	  UCHAR_MAX + 2, UCHAR_MAX + 2);
-  printf ("printf (\"%%1$hi\", %2$i) = %1$hi\n", USHRT_MAX + 2, USHRT_MAX + 2);
 
   puts ("--- Should be no further output. ---");
   rfg1 ();
diff --git a/stdio-common/tst-printf.sh b/stdio-common/tst-printf.sh
index f3091d2f96..3655558d16 100644
--- a/stdio-common/tst-printf.sh
+++ b/stdio-common/tst-printf.sh
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Testing of printf.
-# Copyright (C) 2000, 2002, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2000, 2002 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 #
 
@@ -136,12 +136,6 @@ Test ok.
 sprintf (buf, "%07Lo", 040000000000ll) = 40000000000
 printf ("%hhu", 257) = 1
 printf ("%hu", 65537) = 1
-printf ("%hhi", 257) = 1
-printf ("%hi", 65537) = 1
-printf ("%1$hhu", 257) = 1
-printf ("%1$hu", 65537) = 1
-printf ("%1$hhi", 257) = 1
-printf ("%1$hi", 65537) = 1
 --- Should be no further output. ---
 EOF
 cmp - ${common_objpfx}stdio-common/tst-printf.out > /dev/null 2>&1 ||
@@ -252,12 +246,6 @@ Test ok.
 sprintf (buf, "%07Lo", 040000000000ll) = 40000000000
 printf ("%hhu", 257) = 1
 printf ("%hu", 65537) = 1
-printf ("%hhi", 257) = 1
-printf ("%hi", 65537) = 1
-printf ("%1$hhu", 257) = 1
-printf ("%1$hu", 65537) = 1
-printf ("%1$hhi", 257) = 1
-printf ("%1$hi", 65537) = 1
 --- Should be no further output. ---
 EOF
 cmp - ${common_objpfx}stdio-common/tst-printf.out > /dev/null 2>&1 ||
diff --git a/stdio-common/tst-put-error.c b/stdio-common/tst-put-error.c
deleted file mode 100644
index 115dbd509a..0000000000
--- a/stdio-common/tst-put-error.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <errno.h>
-#include <error.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static int
-do_test (void)
-{
-  char tmpl[] = "/tmp/tst-put-error.XXXXXX";
-  int fd = mkstemp (tmpl);
-  if (fd == -1)
-    error (EXIT_FAILURE, errno, "cannot create temporary file");
-  FILE *fp = fdopen (fd, "w");
-  if (fp == NULL)
-    error (EXIT_FAILURE, errno, "fdopen");
-  setlinebuf (fp);
-  close (fd);
-  unlink (tmpl);
-  int n = fprintf (fp, "hello world\n");
-  printf ("fprintf = %d\n", n);
-  if (n >= 0)
-    error (EXIT_FAILURE, 0, "first fprintf succeeded");
-  n = fprintf (fp, "hello world\n");
-  printf ("fprintf = %d\n", n);
-  if (n >= 0)
-    error (EXIT_FAILURE, 0, "second fprintf succeeded");
-  return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/stdio-common/tst-sprintf.c b/stdio-common/tst-sprintf.c
index c04fef18f4..c61d3b50e4 100644
--- a/stdio-common/tst-sprintf.c
+++ b/stdio-common/tst-sprintf.c
@@ -37,26 +37,5 @@ main (void)
       free (dst);
     }
 
-  if (sprintf (buf, "%1$d%3$.*2$s%4$d", 7, 67108863, "x", 8) != 3
-      || strcmp (buf, "7x8") != 0)
-    {
-      printf ("sprintf (buf, \"%%1$d%%3$.*2$s%%4$d\", 7, 67108863, \"x\", 8) produced `%s' output", buf);
-      result = 1;
-    }
-
-  if (sprintf (buf, "%67108863.16\"%d", 7) != 14
-      || strcmp (buf, "%67108863.16\"7") != 0)
-    {
-      printf ("sprintf (buf, \"%%67108863.16\\\"%%d\", 7) produced `%s' output", buf);
-      result = 1;
-    }
-
-  if (sprintf (buf, "%*\"%d", 0x3ffffff, 7) != 11
-      || strcmp (buf, "%67108863\"7") != 0)
-    {
-      printf ("sprintf (buf, \"%%*\\\"%%d\", 0x3ffffff, 7) produced `%s' output", buf);
-      result = 1;
-    }
-
   return result;
 }
diff --git a/stdio-common/tst-sprintf2.c b/stdio-common/tst-sprintf2.c
deleted file mode 100644
index debb68e21f..0000000000
--- a/stdio-common/tst-sprintf2.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-#include <string.h>
-
-int
-main (void)
-{
-  volatile union { long double l; long long x[2]; } u, v;
-  char buf[64];
-  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, "%LaL", u.l);				   \
-      if (strcmp (buf, #val) != 0)					   \
-	{								   \
-	  printf ("Error on line %d: %s != %s\n", __LINE__, buf, #val);	   \
-	  result = 1;							   \
-	}								   \
-      if (sscanf (#val, "%La", &v.l) != 1 || !COMPARE_LDBL (u, v))	   \
-	{								   \
-	  printf ("Error sscanf on line %d: %La != %La\n", __LINE__,	   \
-		  u.l, v.l);						   \
-	  result = 1;							   \
-	}								   \
-      /* printf ("%s %La %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 (0x0.ffffffffffffp-1022L);
-  TEST (0x0.ffffffffffff1p-1022L);
-  TEST (0x0.fffffffffffffp-1022L);
-# endif
-  TEST (0x1p-1022L);
-  TEST (0x1.0000000000001p-1022L);
-  TEST (0x1.00000000001e7p-1022L);
-  TEST (0x1.fffffffffffffp-1022L);
-  TEST (0x1p-1021L);
-  TEST (0x1.00000000000008p-1021L);
-  TEST (0x1.0000000000001p-1021L);
-  TEST (0x1.00000000000018p-1021L);
-  TEST (0x1.0000000000000f8p-1017L);
-  TEST (0x1.0000000000001p-1017L);
-  TEST (0x1.000000000000108p-1017L);
-  TEST (0x1.000000000000dcf8p-1013L);
-  TEST (0x1.000000000000ddp-1013L);
-  TEST (0x1.000000000000dd08p-1013L);
-  TEST (0x1.ffffffffffffffffffffffffffp-1L);
-  TEST (0x1.ffffffffffffffffffffffffff8p-1L);
-  TEST (0x1p+0L);
-  TEST (0x1.000000000000000000000000008p+0L);
-  TEST (0x1.00000000000000000000000001p+0L);
-  TEST (0x1.000000000000000000000000018p+0L);
-  TEST (0x1.23456789abcdef123456789abc8p+0L);
-  TEST (0x1.23456789abcde7123456789abc8p+0L);
-  TEST (0x1.23456789abcdef123456789abc8p+64L);
-  TEST (0x1.23456789abcde7123456789abc8p+64L);
-  TEST (0x1.123456789abcdef123456789p-969L);
-# if LDBL_MANT_DIG == 106
-  TEST (-0x1.2d71957cc1263bbbeb1d365f1e8p-969L);
-  TEST (0x1.23456789abcdef0123456789abp-970L);
-  TEST (0x1.579bde02468acp-1001L);
-  TEST (0x0.abcdef0123456p-1022L);
-  TEST (0x1.abcdef0123456p-1022L);
-  TEST (0x1.abcdef012345678p-1014L);
-  TEST (0x1.abcdef0123456f8p-1014L);
-# endif
-#endif
-  return result;
-}
diff --git a/stdio-common/tstdiomisc.c b/stdio-common/tstdiomisc.c
index db038fa2b0..452a21f9cb 100644
--- a/stdio-common/tstdiomisc.c
+++ b/stdio-common/tstdiomisc.c
@@ -46,9 +46,6 @@ t2 (void)
   return result;
 }
 
-volatile double nanval;
-
-
 static int
 F (void)
 {
@@ -56,9 +53,8 @@ F (void)
   wchar_t wbuf[10];
   int result;
 
-  nanval = NAN;
-
-  snprintf (buf, sizeof buf, "%f %F", nanval, nanval);
+  snprintf (buf, sizeof buf, "%f %F", DBL_MAX * DBL_MAX - DBL_MAX * DBL_MAX,
+	    DBL_MAX * DBL_MAX - DBL_MAX * DBL_MAX);
   result = strcmp (buf, "nan NAN") != 0;
   printf ("expected \"nan NAN\", got \"%s\"\n", buf);
 
@@ -66,7 +62,9 @@ F (void)
   result |= strcmp (buf, "inf INF") != 0;
   printf ("expected \"inf INF\", got \"%s\"\n", buf);
 
-  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%f %F", nanval, nanval);
+  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%f %F",
+	    DBL_MAX * DBL_MAX - DBL_MAX * DBL_MAX,
+	    DBL_MAX * DBL_MAX - DBL_MAX * DBL_MAX);
   result |= wcscmp (wbuf, L"nan NAN") != 0;
   printf ("expected L\"nan NAN\", got L\"%S\"\n", wbuf);
 
diff --git a/stdio-common/tstscanf.c b/stdio-common/tstscanf.c
index 123d733e3f..44ddf49e15 100644
--- a/stdio-common/tstscanf.c
+++ b/stdio-common/tstscanf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,1996-2001,2007 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,96,97,98,99,2000,2001 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
@@ -272,7 +272,7 @@ main (int argc, char **argv)
     res = sscanf ("0x1234", "%lf", &d);
     printf ("res = %d, d = %f\n", res, d);
 
-    if (res != 1 || d != 4660)
+    if (res != 0 || d != 123456.789)
       {
 	fputs ("test failed!\n", stdout);
 	result = 1;
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
index bf5227873b..832a6ed547 100644
--- a/stdio-common/vfprintf.c
+++ b/stdio-common/vfprintf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007
-   Free Software Foundation, Inc.
+/* Copyright (C) 1991-2002, 2003, 2004 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
@@ -65,7 +64,7 @@
 #define UNBUFFERED_P(S) ((S)->_IO_file_flags & _IO_UNBUFFERED)
 
 #ifndef COMPILE_WPRINTF
-# define vfprintf	_IO_vfprintf_internal
+# define vfprintf	_IO_vfprintf
 # define CHAR_T		char
 # define UCHAR_T	unsigned char
 # define INT_T		int
@@ -258,7 +257,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 
 #define NOT_IN_JUMP_RANGE(Ch) ((Ch) < L_(' ') || (Ch) > L_('z'))
 #define CHAR_CLASS(Ch) (jump_table[(INT_T) (Ch) - L_(' ')])
-#ifdef SHARED
+#if defined HAVE_SUBTRACT_LOCAL_LABELS && defined SHARED
   /* 'int' is enough and it saves some space on 64 bit systems.  */
 # define JUMP_TABLE_TYPE const int
 # define JUMP(ChExpr, table)						      \
@@ -530,24 +529,14 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 	    {								      \
 	      if (is_long_num)						      \
 		signed_number = va_arg (ap, long int);			      \
-	      else if (is_char)						      \
-	        signed_number = (signed char) va_arg (ap, unsigned int);      \
-	      else if (!is_short)					      \
+	      else  /* `char' and `short int' will be promoted to `int'.  */  \
 		signed_number = va_arg (ap, int);			      \
-	      else							      \
-		signed_number = (short int) va_arg (ap, unsigned int);	      \
 	    }								      \
 	  else								      \
 	    if (is_long_num)						      \
 	      signed_number = args_value[fspec->data_arg].pa_long_int;	      \
-	    else if (is_char)						      \
-	      signed_number = (signed char)				      \
-		args_value[fspec->data_arg].pa_u_int;			      \
-	    else if (!is_short)						      \
+	    else  /* `char' and `short int' will be promoted to `int'.  */    \
 	      signed_number = args_value[fspec->data_arg].pa_int;	      \
-	    else							      \
-	      signed_number = (short int)				      \
-		args_value[fspec->data_arg].pa_u_int;			      \
 									      \
 	  is_negative = signed_number < 0;				      \
 	  number.word = is_negative ? (- signed_number) : signed_number;      \
@@ -769,9 +758,6 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 									      \
 	if (fspec == NULL)						      \
 	  {								      \
-	    if (__ldbl_is_dbl)						      \
-	      is_long_double = 0;					      \
-									      \
 	    struct printf_info info = { .prec = prec,			      \
 					.width = width,			      \
 					.spec = spec,			      \
@@ -799,11 +785,6 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 	else								      \
 	  {								      \
 	    ptr = (const void *) &args_value[fspec->data_arg];		      \
-	    if (__ldbl_is_dbl)						      \
-	      {								      \
-		fspec->data_arg_type = PA_DOUBLE;			      \
-		fspec->info.is_long_double = 0;				      \
-	      }								      \
 									      \
 	    function_done = __printf_fp (s, &fspec->info, &ptr);	      \
 	  }								      \
@@ -827,9 +808,6 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 									      \
 	if (fspec == NULL)						      \
 	  {								      \
-	    if (__ldbl_is_dbl)						      \
-	      is_long_double = 0;					      \
-									      \
 	    struct printf_info info = { .prec = prec,			      \
 					.width = width,			      \
 					.spec = spec,			      \
@@ -856,8 +834,6 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 	else								      \
 	  {								      \
 	    ptr = (const void *) &args_value[fspec->data_arg];		      \
-	    if (__ldbl_is_dbl)						      \
-	      fspec->info.is_long_double = 0;				      \
 									      \
 	    function_done = __printf_fphex (s, &fspec->info, &ptr);	      \
 	  }								      \
@@ -1025,11 +1001,10 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 	    const char *mbs = (const char *) string;			      \
 	    mbstate_t mbstate;						      \
 									      \
-	    len = prec != -1 ? __strnlen (mbs, (size_t) prec) : strlen (mbs); \
+	    len = prec != -1 ? (size_t) prec : strlen (mbs);		      \
 									      \
 	    /* Allocate dynamically an array which definitely is long	      \
-	       enough for the wide character version.  Each byte in the	      \
-	       multi-byte string can produce at most one wide character.  */  \
+	       enough for the wide character version.  */		      \
 	    if (__libc_use_alloca (len * sizeof (wchar_t)))		      \
 	      string = (CHAR_T *) alloca (len * sizeof (wchar_t));	      \
 	    else if ((string = (CHAR_T *) malloc (len * sizeof (wchar_t)))    \
@@ -1160,26 +1135,19 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 		else							      \
 		  {							      \
 		    /* In case we have a multibyte character set the	      \
-		       situation is more complicated.  We must not copy	      \
+		       situation is more compilcated.  We must not copy	      \
 		       bytes at the end which form an incomplete character. */\
-		    size_t ignore_size = (unsigned) prec > 1024 ? 1024 : prec;\
-		    wchar_t ignore[ignore_size];			      \
+		    wchar_t ignore[prec];				      \
 		    const char *str2 = string;				      \
-		    const char *strend = string + prec;			      \
-		    if (strend < string)				      \
-		      strend = (const char *) UINTPTR_MAX;		      \
-									      \
 		    mbstate_t ps;					      \
-		    memset (&ps, '\0', sizeof (ps));			      \
-									      \
-		    while (str2 != NULL && str2 < strend)		      \
-		      if (__mbsnrtowcs (ignore, &str2, strend - str2,	      \
-					ignore_size, &ps) == (size_t) -1)     \
-			{						      \
-			  done = -1;					      \
-			  goto all_done;				      \
-			}						      \
 									      \
+		    memset (&ps, '\0', sizeof (ps));			      \
+		    if (__mbsnrtowcs (ignore, &str2, prec, prec, &ps)	      \
+			== (size_t) -1)					      \
+		      {							      \
+			done = -1;					      \
+			goto all_done;					      \
+		      }							      \
 		    if (str2 == NULL)					      \
 		      len = strlen (string);				      \
 		    else						      \
@@ -1315,7 +1283,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
   /* Process whole format string.  */
   do
     {
-#ifdef SHARED
+#if defined HAVE_SUBTRACT_LOCAL_LABELS && defined SHARED
 # define REF(Name) &&do_##Name - &&do_form_unknown
 #else
 # define REF(Name) &&do_##Name
@@ -1626,8 +1594,6 @@ do_positional:
     /* Just a counter.  */
     size_t cnt;
 
-    free (workstart);
-    workstart = NULL;
 
     if (grouping == (const char *) -1)
       {
@@ -1738,15 +1704,7 @@ do_positional:
 	T (PA_INT|PA_FLAG_LONG_LONG, pa_long_long_int, long long int);
 	T (PA_FLOAT, pa_double, double);	/* Promoted.  */
 	T (PA_DOUBLE, pa_double, double);
-	case PA_DOUBLE|PA_FLAG_LONG_DOUBLE:
-	  if (__ldbl_is_dbl)
-	    {
-	      args_value[cnt].pa_double = va_arg (ap_save, double);
-	      args_type[cnt] &= ~PA_FLAG_LONG_DOUBLE;
-	    }
-	  else
-	    args_value[cnt].pa_long_double = va_arg (ap_save, long double);
-	  break;
+	T (PA_DOUBLE|PA_FLAG_LONG_DOUBLE, pa_long_double, long double);
 	T (PA_STRING, pa_string, const char *);
 	T (PA_WSTRING, pa_wstring, const wchar_t *);
 	T (PA_POINTER, pa_pointer, void *);
@@ -1768,7 +1726,7 @@ do_positional:
     for (; (size_t) nspecs_done < nspecs; ++nspecs_done)
       {
 #undef REF
-#ifdef SHARED
+#if defined HAVE_SUBTRACT_LOCAL_LABELS && defined SHARED
 # define REF(Name) &&do2_##Name - &&do_form_unknown
 #else
 # define REF(Name) &&do2_##Name
@@ -1802,9 +1760,7 @@ do_positional:
 	int use_outdigits = specs[nspecs_done].info.i18n;
 	char pad = specs[nspecs_done].info.pad;
 	CHAR_T spec = specs[nspecs_done].info.spec;
-
-	workstart = NULL;
-	workend = &work_buffer[sizeof (work_buffer) / sizeof (CHAR_T)];
+	CHAR_T *workstart = NULL;
 
 	/* Fill in last information.  */
 	if (specs[nspecs_done].width_arg != -1)
@@ -1900,7 +1856,8 @@ do_positional:
 	    break;
 	  }
 
-	free (workstart);
+	if (__builtin_expect (workstart != NULL, 0))
+	  free (workstart);
 	workstart = NULL;
 
 	/* Write the following constant string.  */
@@ -1928,7 +1885,7 @@ printf_unknown (FILE *s, const struct printf_info *info,
 
 {
   int done = 0;
-  CHAR_T work_buffer[MAX (sizeof (info->width), sizeof (info->prec)) * 3];
+  CHAR_T work_buffer[MAX (info->width, info->spec) + 32];
   CHAR_T *const workend
     = &work_buffer[sizeof (work_buffer) / sizeof (CHAR_T)];
   register CHAR_T *w;
@@ -2197,11 +2154,25 @@ buffered_vfprintf (register _IO_FILE *s, const CHAR_T *format,
 }
 
 #undef vfprintf
-#ifdef COMPILE_WPRINTF
+#ifdef strong_alias
+/* This is for glibc.  */
+# ifdef COMPILE_WPRINTF
 strong_alias (_IO_vfwprintf, __vfwprintf);
-ldbl_weak_alias (_IO_vfwprintf, vfwprintf);
+weak_alias (_IO_vfwprintf, vfwprintf);
+# else
+strong_alias (_IO_vfprintf, vfprintf);
+libc_hidden_def (vfprintf)
+INTDEF(_IO_vfprintf)
+# endif
 #else
-ldbl_strong_alias (_IO_vfprintf_internal, vfprintf);
-ldbl_hidden_def (_IO_vfprintf_internal, vfprintf)
-ldbl_strong_alias (_IO_vfprintf_internal, _IO_vfprintf);
+# if defined __ELF__ || defined __GNU_LIBRARY__
+#  include <gnu-stabs.h>
+#  ifdef weak_alias
+#   ifdef COMPILE_WPRINTF
+weak_alias (_IO_vfwprintf, vfwprintf);
+#   else
+weak_alias (_IO_vfprintf, vfprintf);
+#   endif
+#  endif
+# endif
 #endif
diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c
index 6671602291..c641d2d371 100644
--- a/stdio-common/vfscanf.c
+++ b/stdio-common/vfscanf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2002, 2003, 2004 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
@@ -144,6 +144,11 @@
 			  if (done == 0) done = EOF;			      \
 			  goto errout;					      \
 			} while (0)
+#define memory_error() do {						      \
+			  __set_errno (ENOMEM);				      \
+			  done = EOF;					      \
+			  goto errout;					      \
+			} while (0)
 #define ARGCHECK(s, format)						      \
   do									      \
     {									      \
@@ -173,12 +178,18 @@
    Return the number of assignments made, or -1 for an input error.  */
 #ifdef COMPILE_WSCANF
 int
-_IO_vfwscanf (_IO_FILE *s, const wchar_t *format, _IO_va_list argptr,
-	      int *errp)
+_IO_vfwscanf (s, format, argptr, errp)
+     _IO_FILE *s;
+     const wchar_t *format;
+     _IO_va_list argptr;
+     int *errp;
 #else
 int
-_IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
-		      int *errp)
+_IO_vfscanf (s, format, argptr, errp)
+     _IO_FILE *s;
+     const char *format;
+     _IO_va_list argptr;
+     int *errp;
 #endif
 {
   va_list arg;
@@ -349,7 +360,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	      do
 		{
 		  c = inchar ();
-		  if (__builtin_expect (c == EOF, 0))
+		  if (c == EOF)
 		    input_error ();
 		  else if (c != (unsigned char) *f++)
 		    {
@@ -377,7 +388,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	  c = inchar ();
 
 	  /* Characters other than format specs must just match.  */
-	  if (__builtin_expect (c == EOF, 0))
+	  if (c == EOF)
 	    input_error ();
 
 	  /* We saw white space char as the last character in the format
@@ -385,12 +396,12 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	  if (skip_space)
 	    {
 	      while (ISSPACE (c))
-		if (__builtin_expect (inchar () == EOF, 0))
+		if (inchar () == EOF)
 		  input_error ();
 	      skip_space = 0;
 	    }
 
-	  if (__builtin_expect (c != fc, 0))
+	  if (c != fc)
 	    {
 	      ungetc (c, s);
 	      conv_error ();
@@ -526,7 +537,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	}
 
       /* End of the format string?  */
-      if (__builtin_expect (*f == L_('\0'), 0))
+      if (*f == L_('\0'))
 	conv_error ();
 
       /* Find the conversion specifier.  */
@@ -538,7 +549,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	  int save_errno = errno;
 	  errno = 0;
 	  do
-	    if (__builtin_expect (inchar () == EOF && errno == EINTR, 0))
+	    if (inchar () == EOF && errno == EINTR)
 	      input_error ();
 	  while (ISSPACE (c));
 	  errno = save_errno;
@@ -550,9 +561,9 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	{
 	case L_('%'):	/* Must match a literal '%'.  */
 	  c = inchar ();
-	  if (__builtin_expect (c == EOF, 0))
+	  if (c == EOF)
 	    input_error ();
-	  if (__builtin_expect (c != fc, 0))
+	  if (c != fc)
 	    {
 	      ungetc_not_eof (c, s);
 	      conv_error ();
@@ -618,7 +629,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 		}
 
 	      c = inchar ();
-	      if (__builtin_expect (c == EOF, 0))
+	      if (c == EOF)
 		input_error ();
 
 	      if (width == -1)
@@ -634,7 +645,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 		  size_t n;
 
 		  n = __wcrtomb (!(flags & SUPPRESS) ? str : NULL, c, &state);
-		  if (__builtin_expect (n == (size_t) -1, 0))
+		  if (n == (size_t) -1)
 		    /* No valid wide character.  */
 		    input_error ();
 
@@ -669,7 +680,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	    }
 
 	  c = inchar ();
-	  if (__builtin_expect (c == EOF, 0))
+	  if (c == EOF)
 	    input_error ();
 
 #ifdef COMPILE_WSCANF
@@ -707,14 +718,14 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 		      {
 			/* Possibly correct character, just not enough
 			   input.  */
-			if (__builtin_expect (inchar () == EOF, 0))
+			if (inchar () == EOF)
 			  encode_error ();
 
 			buf[0] = c;
 			continue;
 		      }
 
-		    if (__builtin_expect (n != 1, 0))
+		    if (n != 1)
 		      encode_error ();
 
 		    /* We have a match.  */
@@ -758,7 +769,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	      STRING_ARG (str, char);
 
 	      c = inchar ();
-	      if (__builtin_expect (c == EOF, 0))
+	      if (c == EOF)
 		input_error ();
 
 #ifdef COMPILE_WSCANF
@@ -821,7 +832,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 
 		    n = __wcrtomb (!(flags & SUPPRESS) ? str : NULL, c,
 				   &state);
-		    if (__builtin_expect (n == (size_t) -1, 0))
+		    if (n == (size_t) -1)
 		      encode_error ();
 
 		    assert (n <= MB_CUR_MAX);
@@ -929,7 +940,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	    STRING_ARG (wstr, wchar_t);
 
 	    c = inchar ();
-	    if (__builtin_expect (c == EOF,  0))
+	    if (c == EOF)
 	      input_error ();
 
 #ifndef COMPILE_WSCANF
@@ -1004,14 +1015,14 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 			{
 			  /* Possibly correct character, just not enough
 			     input.  */
-			  if (__builtin_expect (inchar () == EOF, 0))
+			  if (inchar () == EOF)
 			    encode_error ();
 
 			  buf[0] = c;
 			  continue;
 			}
 
-		      if (__builtin_expect (n != 1, 0))
+		      if (n != 1)
 			encode_error ();
 
 		      /* We have a match.  */
@@ -1106,7 +1117,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 
 	number:
 	  c = inchar ();
-	  if (__builtin_expect (c == EOF, 0))
+	  if (c == EOF)
 	    input_error ();
 
 	  /* Check for a sign.  */
@@ -1145,7 +1156,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	  if (base == 0)
 	    base = 10;
 
-	  if (base == 10 && __builtin_expect ((flags & I18N) != 0, 0))
+	  if (base == 10 && (flags & I18N) != 0)
 	    {
 	      int from_level;
 	      int to_level;
@@ -1505,14 +1516,12 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	    {
 	      /* There was no number.  If we are supposed to read a pointer
 		 we must recognize "(nil)" as well.  */
-	      if (__builtin_expect (wpsize == 0
-				    && read_pointer
-				    && (width < 0 || width >= 0)
-				    && c == '('
-				    && TOLOWER (inchar ()) == L_('n')
-				    && TOLOWER (inchar ()) == L_('i')
-				    && TOLOWER (inchar ()) == L_('l')
-				    && inchar () == L_(')'), 1))
+	      if (wpsize == 0 && read_pointer && (width < 0 || width >= 0)
+		  && c == '('
+		  && TOLOWER (inchar ()) == L_('n')
+		  && TOLOWER (inchar ()) == L_('i')
+		  && TOLOWER (inchar ()) == L_('l')
+		  && inchar () == L_(')'))
 		/* We must produce the value of a NULL pointer.  A single
 		   '0' digit is enough.  */
 		ADDW (L_('0'));
@@ -1545,7 +1554,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	      else
 		num.ul = __strtoul_internal (wp, &tw, base, flags & GROUP);
 	    }
-	  if (__builtin_expect (wp == tw, 0))
+	  if (wp == tw)
 	    conv_error ();
 
 	  if (!(flags & SUPPRESS))
@@ -1590,23 +1599,21 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	case L_('a'):
 	case L_('A'):
 	  c = inchar ();
-	  if (__builtin_expect (c == EOF, 0))
+	  if (c == EOF)
 	    input_error ();
 
-	  got_dot = got_e = 0;
-
 	  /* Check for a sign.  */
 	  if (c == L_('-') || c == L_('+'))
 	    {
 	      negative = c == L_('-');
-	      if (__builtin_expect (width == 0 || inchar () == EOF, 0))
+	      if (width == 0 || inchar () == EOF)
 		/* EOF is only an input error before we read any chars.  */
 		conv_error ();
 	      if (! ISDIGIT (c) && TOLOWER (c) != L_('i')
 		  && TOLOWER (c) != L_('n'))
 		{
 #ifdef COMPILE_WSCANF
-		  if (__builtin_expect (c != decimal, 0))
+		  if (c != decimal)
 		    {
 		      /* This is no valid number.  */
 		      ungetc (c, s);
@@ -1622,16 +1629,17 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 		  const char *cmpp = decimal;
 		  int avail = width > 0 ? width : INT_MAX;
 
-		  while ((unsigned char) *cmpp == c && avail-- > 0)
+		  while ((unsigned char) *cmpp == c && avail > 0)
 		    if (*++cmpp == '\0')
 		      break;
 		    else
 		      {
 			if (inchar () == EOF)
 			  break;
+			--avail;
 		      }
 
-		  if (__builtin_expect (*cmpp != '\0', 0))
+		  if (*cmpp != '\0')
 		    {
 		      /* This is no valid number.  */
 		      while (1)
@@ -1644,17 +1652,6 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 
 		      conv_error ();
 		    }
-		  else
-		    {
-                     /* Add all the characters.  */
-                     for (cmpp = decimal; *cmpp != '\0'; ++cmpp)
-                       ADDW ((unsigned char) *cmpp);
-                     if (width > 0)
-                       width = avail;
-                     got_dot = 1;
-
-		      c = inchar ();
-		    }
 		  if (width > 0)
 		    width = avail;
 #endif
@@ -1670,16 +1667,12 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	    {
 	      /* Maybe "nan".  */
 	      ADDW (c);
-	      if (__builtin_expect (width == 0
-				    || inchar () == EOF
-				    || TOLOWER (c) != L_('a'), 0))
+	      if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('a'))
 		conv_error ();
 	      if (width > 0)
 		--width;
 	      ADDW (c);
-	      if (__builtin_expect (width == 0
-				    || inchar () == EOF
-				    || TOLOWER (c) != L_('n'), 0))
+	      if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('n'))
 		conv_error ();
 	      if (width > 0)
 		--width;
@@ -1691,16 +1684,12 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	    {
 	      /* Maybe "inf" or "infinity".  */
 	      ADDW (c);
-	      if (__builtin_expect (width == 0
-				    || inchar () == EOF
-				    || TOLOWER (c) != L_('n'), 0))
+	      if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('n'))
 		conv_error ();
 	      if (width > 0)
 		--width;
 	      ADDW (c);
-	      if (__builtin_expect (width == 0
-				    || inchar () == EOF
-				    || TOLOWER (c) != L_('f'), 0))
+	      if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('f'))
 		conv_error ();
 	      if (width > 0)
 		--width;
@@ -1714,30 +1703,26 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 			--width;
 		      /* Now we have to read the rest as well.  */
 		      ADDW (c);
-		      if (__builtin_expect (width == 0
-					    || inchar () == EOF
-					    || TOLOWER (c) != L_('n'), 0))
+		      if (width == 0 || inchar () == EOF
+			  || TOLOWER (c) != L_('n'))
 			conv_error ();
 		      if (width > 0)
 			--width;
 		      ADDW (c);
-		      if (__builtin_expect (width == 0
-					    || inchar () == EOF
-					    || TOLOWER (c) != L_('i'), 0))
+		      if (width == 0 || inchar () == EOF
+			  || TOLOWER (c) != L_('i'))
 			conv_error ();
 		      if (width > 0)
 			--width;
 		      ADDW (c);
-		      if (__builtin_expect (width == 0
-					    || inchar () == EOF
-					    || TOLOWER (c) != L_('t'), 0))
+		      if (width == 0 || inchar () == EOF
+			  || TOLOWER (c) != L_('t'))
 			conv_error ();
 		      if (width > 0)
 			--width;
 		      ADDW (c);
-		      if (__builtin_expect (width == 0
-					    || inchar () == EOF
-					    || TOLOWER (c) != L_('y'), 0))
+		      if (width == 0 || inchar () == EOF
+			  || TOLOWER (c) != L_('y'))
 			conv_error ();
 		      if (width > 0)
 			--width;
@@ -1774,6 +1759,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 		}
 	    }
 
+	  got_dot = got_e = 0;
 	  do
 	    {
 	      if (ISDIGIT (c))
@@ -1887,20 +1873,20 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 
 	  /* Have we read any character?  If we try to read a number
 	     in hexadecimal notation and we have read only the `0x'
-	     prefix this is an error.  */
-	  if (__builtin_expect (wpsize == 0 || (is_hexa && wpsize == 2), 0))
+	     prefix or no exponent this is an error.  */
+	  if (wpsize == 0 || (is_hexa && (wpsize == 2 || ! got_e)))
 	    conv_error ();
 
 	scan_float:
 	  /* Convert the number.  */
 	  ADDW (L_('\0'));
-	  if ((flags & LONGDBL) && !__ldbl_is_dbl)
+	  if (flags & LONGDBL)
 	    {
 	      long double d = __strtold_internal (wp, &tw, flags & GROUP);
 	      if (!(flags & SUPPRESS) && tw != wp)
 		*ARG (long double *) = negative ? -d : d;
 	    }
-	  else if (flags & (LONG | LONGDBL))
+	  else if (flags & LONG)
 	    {
 	      double d = __strtod_internal (wp, &tw, flags & GROUP);
 	      if (!(flags & SUPPRESS) && tw != wp)
@@ -1913,7 +1899,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 		*ARG (float *) = negative ? -d : d;
 	    }
 
-	  if (__builtin_expect (tw == wp, 0))
+	  if (tw == wp)
 	    conv_error ();
 
 	  if (!(flags & SUPPRESS))
@@ -1953,7 +1939,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 
 	  while ((fc = *f++) != L'\0' && fc != L']');
 
-	  if (__builtin_expect (fc == L'\0', 0))
+	  if (fc == L'\0')
 	    conv_error ();
 	  wp = (wchar_t *) f - 1;
 #else
@@ -1989,7 +1975,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	      /* Add the character to the flag map.  */
 	      wp[fc] = 1;
 
-	  if (__builtin_expect (fc == '\0', 0))
+	  if (fc == '\0')
 	    conv_error();
 #endif
 
@@ -1997,7 +1983,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	    {
 	      size_t now = read_in;
 #ifdef COMPILE_WSCANF
-	      if (__builtin_expect (inchar () == WEOF, 0))
+	      if (inchar () == WEOF)
 		input_error ();
 
 	      do
@@ -2102,7 +2088,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	      size_t cnt = 0;
 	      mbstate_t cstate;
 
-	      if (__builtin_expect (inchar () == EOF, 0))
+	      if (inchar () == EOF)
 		input_error ();
 
 	      memset (&cstate, '\0', sizeof (cstate));
@@ -2179,13 +2165,13 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 		}
 	      while (inchar () != EOF);
 
-	      if (__builtin_expect (cnt != 0, 0))
+	      if (cnt != 0)
 		/* We stopped in the middle of recognizing another
 		   character.  That's a problem.  */
 		encode_error ();
 #endif
 
-	      if (__builtin_expect (now == read_in, 0))
+	      if (now == read_in)
 		/* We haven't succesfully read any character.  */
 		conv_error ();
 
@@ -2210,7 +2196,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	    {
 	      size_t now = read_in;
 
-	      if (__builtin_expect (inchar () == EOF, 0))
+	      if (inchar () == EOF)
 		input_error ();
 
 #ifdef COMPILE_WSCANF
@@ -2312,7 +2298,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 		    }
 
 		  n = __wcrtomb (!(flags & SUPPRESS) ? str : NULL, c, &state);
-		  if (__builtin_expect (n == (size_t) -1, 0))
+		  if (n == (size_t) -1)
 		    encode_error ();
 
 		  assert (n <= MB_CUR_MAX);
@@ -2369,7 +2355,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 	      while (--width > 0 && inchar () != EOF);
 #endif
 
-	      if (__builtin_expect (now == read_in, 0))
+	      if (now == read_in)
 		/* We haven't succesfully read any character.  */
 		conv_error ();
 
@@ -2463,15 +2449,18 @@ __vfwscanf (FILE *s, const wchar_t *format, va_list argptr)
 {
   return _IO_vfwscanf (s, format, argptr, NULL);
 }
-ldbl_weak_alias (__vfwscanf, vfwscanf)
 #else
 int
-___vfscanf (FILE *s, const char *format, va_list argptr)
+__vfscanf (FILE *s, const char *format, va_list argptr)
 {
-  return _IO_vfscanf_internal (s, format, argptr, NULL);
+  return INTUSE(_IO_vfscanf) (s, format, argptr, NULL);
 }
-ldbl_strong_alias (_IO_vfscanf_internal, _IO_vfscanf)
-ldbl_strong_alias (___vfscanf, __vfscanf)
-ldbl_hidden_def (___vfscanf, __vfscanf)
-ldbl_weak_alias (___vfscanf, vfscanf)
+libc_hidden_def (__vfscanf)
+#endif
+
+#ifdef COMPILE_WSCANF
+weak_alias (__vfwscanf, vfwscanf)
+#else
+weak_alias (__vfscanf, vfscanf)
+INTDEF(_IO_vfscanf)
 #endif
diff --git a/stdio-common/vprintf.c b/stdio-common/vprintf.c
index 5c9cac494a..a8c4a53cd8 100644
--- a/stdio-common/vprintf.c
+++ b/stdio-common/vprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1993, 1995, 1997, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1993, 1995, 1997 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,16 +19,15 @@
 #include <stdarg.h>
 #undef	__OPTIMIZE__	/* Avoid inline `vprintf' function.  */
 #include <stdio.h>
-#include <libioP.h>
 
 #undef	vprintf
 
 /* Write formatted output to stdout according to the
    format string FORMAT, using the argument list in ARG.  */
 int
-__vprintf (const char *format, __gnuc_va_list arg)
+vprintf (format, arg)
+     const char *format;
+     __gnuc_va_list arg;
 {
   return vfprintf (stdout, format, arg);
 }
-
-ldbl_strong_alias (__vprintf, vprintf)