about summary refs log tree commit diff
path: root/stdio
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1995-10-17 00:41:39 +0000
committerRoland McGrath <roland@gnu.org>1995-10-17 00:41:39 +0000
commitdeab9deadc372fe1a367aef2e78c0d8f2885bf23 (patch)
tree367eaf76a86934f3883f950da5719ca581185ca5 /stdio
parent10fd03c6014206b3775be893727f282c4c709ebf (diff)
downloadglibc-deab9deadc372fe1a367aef2e78c0d8f2885bf23.tar.gz
glibc-deab9deadc372fe1a367aef2e78c0d8f2885bf23.tar.xz
glibc-deab9deadc372fe1a367aef2e78c0d8f2885bf23.zip
* Makefile (subdirs): Replace stdio with stdio-common and $(stdio).
	* configure.in: Grok arg --enable-libio.
	($stdio = libio): Define USE_IN_LIBIO.
	* config.h.in (USE_IN_LIBIO): Add #undef.
	* config.make.in (stdio): New variable, set by configure.
	* Makeconfig (stdio): New variable.
	* stdio.h [USE_IN_LIBIO]: Include libio/stdio.h instead of
	stdio/stdio.h.
	* stdio-common/Makefile: New file.
	* stdio/Makefile: Half the contents moved to stdio-common/Makefile.
	* stdio/_itoa.c: Moved to stdio-common.
	* stdio/_itoa.h: Moved to stdio-common.
	* stdio/asprintf.c: Moved to stdio-common.
	* stdio/bug1.c: Moved to stdio-common.
	* stdio/bug1.input: Moved to stdio-common.
	* stdio/bug2.c: Moved to stdio-common.
	* stdio/bug3.c: Moved to stdio-common.
	* stdio/bug4.c: Moved to stdio-common.
	* stdio/bug5.c: Moved to stdio-common.
	* stdio/bug6.c: Moved to stdio-common.
	* stdio/bug6.input: Moved to stdio-common.
	* stdio/bug7.c: Moved to stdio-common.
	* stdio/dprintf.c: Moved to stdio-common.
	* stdio/errnobug.c: Moved to stdio-common.
	* stdio/getline.c: Moved to stdio-common.
	* stdio/getw.c: Moved to stdio-common.
	* stdio/perror.c: Moved to stdio-common.
	* stdio/printf-parse.h: Moved to stdio-common.
	* stdio/printf-prs.c: Moved to stdio-common.
	* stdio/printf.c: Moved to stdio-common.
	* stdio/printf.h: Moved to stdio-common.
	* stdio/printf_fp.c: Moved to stdio-common.
	* stdio/psignal.c: Moved to stdio-common.
	* stdio/putw.c: Moved to stdio-common.
	* stdio/reg-printf.c: Moved to stdio-common.
	* stdio/scanf.c: Moved to stdio-common.
	* stdio/snprintf.c: Moved to stdio-common.
	* stdio/sprintf.c: Moved to stdio-common.
	* stdio/sscanf.c: Moved to stdio-common.
	* stdio/tempnam.c: Moved to stdio-common.
	* stdio/temptest.c: Moved to stdio-common.
	* stdio/test-fseek.c: Moved to stdio-common.
	* stdio/test-fwrite.c: Moved to stdio-common.
	* stdio/test-popen.c: Moved to stdio-common.
	* stdio/test_rdwr.c: Moved to stdio-common.
	* stdio/tmpfile.c: Moved to stdio-common.
	* stdio/tmpnam.c: Moved to stdio-common.
	* stdio/tst-fileno.c: Moved to stdio-common.
	* stdio/tst-printf.c: Moved to stdio-common.
	* stdio/tstgetln.c: Moved to stdio-common.
	* stdio/tstgetln.input: Moved to stdio-common.
	* stdio/tstscanf.c: Moved to stdio-common.
	* stdio/tstscanf.input: Moved to stdio-common.
	* stdio/vfprintf.c: Moved to stdio-common.
	* stdio/vfscanf.c: Moved to stdio-common.
	* stdio/vprintf.c: Moved to stdio-common.
	* stdio/xbug.c: Moved to stdio-common.
	* sysdeps/generic/Makefile (siglist.c rules): Do this in subdir
	stdio-common instead of stdio.
	* sysdeps/unix/Makefile (errlist.c rules): Likewise.
	* stdio-common/asprintf.c [USE_IN_LIBIO]: Call libio primitive
	function.
	* stdio-common/dprintf.c: Likewise.
	* stdio-common/printf.c: Likewise.
	* stdio-common/scanf.c: Likewise.
	* stdio-common/snprintf.c: Likewise.
	* stdio-common/sprintf.c: Likewise.
	* stdio-common/sscanf.c: Likewise.
	* stdio-common/vprintf.c: Likewise.

	* Makerules: Include $(+depfiles) directly instead of generating
	depend-$(subdir).
	(depend-$(subdir)): Target removed.
	(common-clean): Don't remove depend-$(subdir).
Diffstat (limited to 'stdio')
-rw-r--r--stdio/Makefile26
-rw-r--r--stdio/_itoa.c418
-rw-r--r--stdio/_itoa.h32
-rw-r--r--stdio/asprintf.c39
-rw-r--r--stdio/bug1.c28
-rw-r--r--stdio/bug1.input1
-rw-r--r--stdio/bug2.c12
-rw-r--r--stdio/bug3.c52
-rw-r--r--stdio/bug4.c50
-rw-r--r--stdio/bug5.c60
-rw-r--r--stdio/bug6.c27
-rw-r--r--stdio/bug6.input1
-rw-r--r--stdio/bug7.c53
-rw-r--r--stdio/dprintf.c37
-rw-r--r--stdio/errnobug.c60
-rw-r--r--stdio/fprintf.c38
-rw-r--r--stdio/fscanf.c38
-rw-r--r--stdio/getline.c33
-rw-r--r--stdio/getw.c33
-rw-r--r--stdio/perror.c42
-rw-r--r--stdio/printf-parse.h388
-rw-r--r--stdio/printf-prs.c72
-rw-r--r--stdio/printf.c37
-rw-r--r--stdio/printf.h124
-rw-r--r--stdio/printf_fp.c990
-rw-r--r--stdio/psignal.c49
-rw-r--r--stdio/putw.c31
-rw-r--r--stdio/reg-printf.c47
-rw-r--r--stdio/scanf.c37
-rw-r--r--stdio/snprintf.c39
-rw-r--r--stdio/sprintf.c37
-rw-r--r--stdio/sscanf.c37
-rw-r--r--stdio/tempnam.c50
-rw-r--r--stdio/temptest.c31
-rw-r--r--stdio/test-fseek.c67
-rw-r--r--stdio/test-fwrite.c68
-rw-r--r--stdio/test-popen.c67
-rw-r--r--stdio/test_rdwr.c130
-rw-r--r--stdio/tmpfile.c43
-rw-r--r--stdio/tmpnam.c42
-rw-r--r--stdio/tst-fileno.c37
-rw-r--r--stdio/tst-printf.c298
-rw-r--r--stdio/tstgetln.c46
-rw-r--r--stdio/tstgetln.input3
-rw-r--r--stdio/tstscanf.c100
-rw-r--r--stdio/tstscanf.input7
-rw-r--r--stdio/vasprintf.c86
-rw-r--r--stdio/vdprintf.c51
-rw-r--r--stdio/vfprintf.c858
-rw-r--r--stdio/vfscanf.c624
-rw-r--r--stdio/vprintf.c33
-rw-r--r--stdio/vscanf.c32
-rw-r--r--stdio/vsnprintf.c56
-rw-r--r--stdio/vsprintf.c50
-rw-r--r--stdio/vsscanf.c58
-rw-r--r--stdio/xbug.c63
56 files changed, 5 insertions, 5863 deletions
diff --git a/stdio/Makefile b/stdio/Makefile
index 955d7f1fcd..a15aa56aff 100644
--- a/stdio/Makefile
+++ b/stdio/Makefile
@@ -21,39 +21,23 @@
 #
 subdir	:= stdio
 
-headers	:= stdio.h stdio_lim.h printf.h
+headers	:= stdio.h
 
 routines	:=							      \
-	ctermid cuserid							      \
 	feof ferror clearerr fileno					      \
 	newstream fopen freopen fdopen fopncook fmemopen		      \
 	setbuf setvbuf setbuffer setlinebuf				      \
 	fseek ftell rewind fgetpos fsetpos				      \
-	vfprintf vprintf printf_fp reg-printf printf-prs _itoa		      \
-	vsnprintf vsprintf vasprintf	      				      \
-	fprintf printf snprintf sprintf asprintf			      \
-	dprintf vdprintf						      \
-	vfscanf vscanf vsscanf						      \
-	fscanf scanf sscanf						      \
 	fread fwrite							      \
 	ungetc								      \
-	fgetc getc getchar getw						      \
-	fputc putc putchar putw						      \
+	fgetc getc getchar						      \
+	fputc putc putchar						      \
 	fgets gets fputs puts						      \
-	getdelim getline						      \
-	perror psignal							      \
-	tmpfile tmpnam tempnam tempname					      \
+	getdelim							      \
 	fclose fflush							      \
-	remove rename							      \
 	memstream obstream						      \
 	internals sysd-stdio pipestream stdio_init libc_fatal
-aux	:= errlist siglist defs glue
-distribute := _itoa.h printf-parse.h
-
-tests := tst-printf tstscanf test_rdwr test-popen tstgetln test-fseek \
-	 temptest tst-fileno test-fwrite \
-	 xbug errnobug \
-	 bug1 bug2 bug3 bug4 bug5 bug6 bug7
+aux	:= defs glue
 
 
 include ../Rules
diff --git a/stdio/_itoa.c b/stdio/_itoa.c
deleted file mode 100644
index caa8179624..0000000000
--- a/stdio/_itoa.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/* Internal function for converting integers to ASCII.
-Copyright (C) 1994, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Torbjorn Granlund <tege@matematik.su.se>
-and Ulrich Drepper <drepper@gnu.ai.mit.edu>.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <gmp-mparam.h>
-#include "../stdlib/gmp.h"
-#include "../stdlib/gmp-impl.h"
-#include "../stdlib/longlong.h"
-
-#include "_itoa.h"
-
-
-/* Canonize environment.  For some architectures not all values might
-   be defined in the GMP header files.  */
-#ifndef UMUL_TIME
-# define UMUL_TIME 1
-#endif
-#ifndef UDIV_TIME
-# define UDIV_TIME 1
-#endif
-
-/* Control memory layout.  */
-#ifdef PACK
-# undef PACK
-# define PACK __attribute__ ((packed))
-#else
-# define PACK
-#endif
-
-
-/* Declare local types.  */
-struct base_table_t
-{
-#if (UDIV_TIME > 2 * UMUL_TIME)
-  mp_limb base_multiplier;
-#endif
-  char flag;
-  char post_shift;
-#if BITS_PER_MP_LIMB == 32
-  struct
-    {
-      char normalization_steps;
-      char ndigits;
-      mp_limb base PACK;
-#if UDIV_TIME > 2 * UMUL_TIME
-      mp_limb base_ninv PACK;
-#endif
-    } big;
-#endif
-};
-
-/* To reduce the memory needed we include some fields of the tables
-   only confitionally.  */
-#if BITS_PER_MP_LIMB == 32
-# if UDIV_TIME > 2 * UMUL_TIME
-#  define SEL1(X) X,
-#  define SEL2(X) ,X
-# else
-#  define SEL1(X)
-#  define SEL2(X)
-# endif
-#endif
-
-
-/* Local variables.  */
-static const struct base_table_t base_table[] =
-{
-#if BITS_PER_MP_LIMB == 64
-  /*  2 */ {0ul, 1, 1},
-  /*  3 */ {0xaaaaaaaaaaaaaaabul, 0, 1},
-  /*  4 */ {0ul, 1, 2},
-  /*  5 */ {0xcccccccccccccccdul, 0, 2},
-  /*  6 */ {0xaaaaaaaaaaaaaaabul, 0, 2},
-  /*  7 */ {0x2492492492492493ul, 1, 3},
-  /*  8 */ {0ul, 1, 3},
-  /*  9 */ {0xe38e38e38e38e38ful, 0, 3},
-  /* 10 */ {0xcccccccccccccccdul, 0, 3},
-  /* 11 */ {0x2e8ba2e8ba2e8ba3ul, 0, 1},
-  /* 12 */ {0xaaaaaaaaaaaaaaabul, 0, 3},
-  /* 13 */ {0x4ec4ec4ec4ec4ec5ul, 0, 2},
-  /* 14 */ {0x2492492492492493ul, 1, 4},
-  /* 15 */ {0x8888888888888889ul, 0, 3},
-  /* 16 */ {0ul, 1, 4},
-  /* 17 */ {0xf0f0f0f0f0f0f0f1ul, 0, 4},
-  /* 18 */ {0xe38e38e38e38e38ful, 0, 4},
-  /* 19 */ {0xd79435e50d79435ful, 0, 4},
-  /* 20 */ {0xcccccccccccccccdul, 0, 4},
-  /* 21 */ {0x8618618618618619ul, 1, 5},
-  /* 22 */ {0x2e8ba2e8ba2e8ba3ul, 0, 2},
-  /* 23 */ {0x642c8590b21642c9ul, 1, 5},
-  /* 24 */ {0xaaaaaaaaaaaaaaabul, 0, 4},
-  /* 25 */ {0x47ae147ae147ae15ul, 1, 5},
-  /* 26 */ {0x4ec4ec4ec4ec4ec5ul, 0, 3},
-  /* 27 */ {0x97b425ed097b425ful, 0, 4},
-  /* 28 */ {0x2492492492492493ul, 1, 5},
-  /* 29 */ {0x1a7b9611a7b9611bul, 1, 5},
-  /* 30 */ {0x8888888888888889ul, 0, 4},
-  /* 31 */ {0x0842108421084211ul, 1, 5},
-  /* 32 */ {0ul, 1, 5},
-  /* 33 */ {0x0f83e0f83e0f83e1ul, 0, 1},
-  /* 34 */ {0xf0f0f0f0f0f0f0f1ul, 0, 5},
-  /* 35 */ {0xea0ea0ea0ea0ea0ful, 0, 5},
-  /* 36 */ {0xe38e38e38e38e38ful, 0, 5}
-#endif
-#if BITS_PER_MP_LIMB == 32
-  /*  2 */ {SEL1(0ul) 1, 1, {0, 31, 0x80000000ul SEL2(0xfffffffful)}},
-  /*  3 */ {SEL1(0xaaaaaaabul) 0, 1, {0, 20, 0xcfd41b91ul SEL2(0x3b563c24ul)}},
-  /*  4 */ {SEL1(0ul) 1, 2, {1, 15, 0x40000000ul SEL2(0xfffffffful)}},
-  /*  5 */ {SEL1(0xcccccccdul) 0, 2, {1, 13, 0x48c27395ul SEL2(0xc25c2684ul)}},
-  /*  6 */ {SEL1(0xaaaaaaabul) 0, 2, {0, 12, 0x81bf1000ul SEL2(0xf91bd1b6ul)}},
-  /*  7 */ {SEL1(0x24924925ul) 1, 3, {1, 11, 0x75db9c97ul SEL2(0x1607a2cbul)}},
-  /*  8 */ {SEL1(0ul) 1, 3, {1, 10, 0x40000000ul SEL2(0xfffffffful)}},
-  /*  9 */ {SEL1(0x38e38e39ul) 0, 1, {0, 10, 0xcfd41b91ul SEL2(0x3b563c24ul)}},
-  /* 10 */ {SEL1(0xcccccccdul) 0, 3, {2, 9, 0x3b9aca00ul SEL2(0x12e0be82ul)}},
-  /* 11 */ {SEL1(0xba2e8ba3ul) 0, 3, {0, 9, 0x8c8b6d2bul SEL2(0xd24cde04ul)}},
-  /* 12 */ {SEL1(0xaaaaaaabul) 0, 3, {3, 8, 0x19a10000ul SEL2(0x3fa39ab5ul)}},
-  /* 13 */ {SEL1(0x4ec4ec4ful) 0, 2, {2, 8, 0x309f1021ul SEL2(0x50f8ac5ful)}},
-  /* 14 */ {SEL1(0x24924925ul) 1, 4, {1, 8, 0x57f6c100ul SEL2(0x74843b1eul)}},
-  /* 15 */ {SEL1(0x88888889ul) 0, 3, {0, 8, 0x98c29b81ul SEL2(0xad0326c2ul)}},
-  /* 16 */ {SEL1(0ul) 1, 4, {3, 7, 0x10000000ul SEL2(0xfffffffful)}},
-  /* 17 */ {SEL1(0xf0f0f0f1ul) 0, 4, {3, 7, 0x18754571ul SEL2(0x4ef0b6bdul)}},
-  /* 18 */ {SEL1(0x38e38e39ul) 0, 2, {2, 7, 0x247dbc80ul SEL2(0xc0fc48a1ul)}},
-  /* 19 */ {SEL1(0xaf286bcbul) 1, 5, {2, 7, 0x3547667bul SEL2(0x33838942ul)}},
-  /* 20 */ {SEL1(0xcccccccdul) 0, 4, {1, 7, 0x4c4b4000ul SEL2(0xad7f29abul)}},
-  /* 21 */ {SEL1(0x86186187ul) 1, 5, {1, 7, 0x6b5a6e1dul SEL2(0x313c3d15ul)}},
-  /* 22 */ {SEL1(0xba2e8ba3ul) 0, 4, {0, 7, 0x94ace180ul SEL2(0xb8cca9e0ul)}},
-  /* 23 */ {SEL1(0xb21642c9ul) 0, 4, {0, 7, 0xcaf18367ul SEL2(0x42ed6de9ul)}},
-  /* 24 */ {SEL1(0xaaaaaaabul) 0, 4, {4, 6, 0x0b640000ul SEL2(0x67980e0bul)}},
-  /* 25 */ {SEL1(0x51eb851ful) 0, 3, {4, 6, 0x0e8d4a51ul SEL2(0x19799812ul)}},
-  /* 26 */ {SEL1(0x4ec4ec4ful) 0, 3, {3, 6, 0x1269ae40ul SEL2(0xbce85396ul)}},
-  /* 27 */ {SEL1(0x2f684bdbul) 1, 5, {3, 6, 0x17179149ul SEL2(0x62c103a9ul)}},
-  /* 28 */ {SEL1(0x24924925ul) 1, 5, {3, 6, 0x1cb91000ul SEL2(0x1d353d43ul)}},
-  /* 29 */ {SEL1(0x8d3dcb09ul) 0, 4, {2, 6, 0x23744899ul SEL2(0xce1deceaul)}},
-  /* 30 */ {SEL1(0x88888889ul) 0, 4, {2, 6, 0x2b73a840ul SEL2(0x790fc511ul)}},
-  /* 31 */ {SEL1(0x08421085ul) 1, 5, {2, 6, 0x34e63b41ul SEL2(0x35b865a0ul)}},
-  /* 32 */ {SEL1(0ul) 1, 5, {1, 6, 0x40000000ul SEL2(0xfffffffful)}},
-  /* 33 */ {SEL1(0x3e0f83e1ul) 0, 3, {1, 6, 0x4cfa3cc1ul SEL2(0xa9aed1b3ul)}},
-  /* 34 */ {SEL1(0xf0f0f0f1ul) 0, 5, {1, 6, 0x5c13d840ul SEL2(0x63dfc229ul)}},
-  /* 35 */ {SEL1(0xd41d41d5ul) 1, 6, {1, 6, 0x6d91b519ul SEL2(0x2b0fee30ul)}},
-  /* 36 */ {SEL1(0x38e38e39ul) 0, 3, {0, 6, 0x81bf1000ul SEL2(0xf91bd1b6ul)}}
-#endif
-};
-
-/* Lower-case digits.  */
-static const char _itoa_lower_digits[]
-	= "0123456789abcdefghijklmnopqrstuvwxyz";
-/* Upper-case digits.  */
-static const char _itoa_upper_digits[]
-	= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-
-char *
-_itoa (value, buflim, base, upper_case)
-     unsigned long long int value;
-     char *buflim;
-     unsigned int base;
-     int upper_case;
-{
-  const char *digits = upper_case ? _itoa_upper_digits : _itoa_lower_digits;
-  char *bp = buflim;
-  const struct base_table_t *brec = &base_table[base - 2];
-
-  switch (base)
-    {
-#define RUN_2N(BITS)							  \
-      do								  \
-        {								  \
-	  /* `unsigned long long int' always has 64 bits.  */		  \
-	  mp_limb work_hi = value >> (64 - BITS_PER_MP_LIMB);		  \
-									  \
-	  if (BITS_PER_MP_LIMB == 32)					  \
-	    if (work_hi != 0)						  \
-	      {								  \
-		mp_limb work_lo;					  \
-		int cnt;						  \
-									  \
-		work_lo = value & 0xfffffffful;				  \
-		for (cnt = BITS_PER_MP_LIMB / BITS; cnt > 0; --cnt)	  \
-		  {							  \
-		    *--bp = digits[work_lo & ((1ul << BITS) - 1)];	  \
-		    work_lo >>= BITS;					  \
-		  }							  \
-		if (BITS_PER_MP_LIMB % BITS != 0)			  \
-		  {							  \
-		    work_lo |= ((work_hi				  \
-				 & ((1 << BITS - BITS_PER_MP_LIMB % BITS) \
-				    - 1))				  \
-				<< BITS_PER_MP_LIMB % BITS);		  \
-		    *--bp = digits[work_lo];				  \
-		    work_hi >>= BITS - BITS_PER_MP_LIMB % BITS;		  \
-		  }							  \
-	      }								  \
-	    else							  \
-	      work_hi = value & 0xfffffffful;				  \
-	  do								  \
-	    {								  \
-	      *--bp = digits[work_hi & ((1 << BITS) - 1)];		  \
-	      work_hi >>= BITS;						  \
-	    }								  \
-	  while (work_hi != 0);						  \
-	}								  \
-      while (0)
-    case 8:
-      RUN_2N (3);
-      break;
-
-    case 16:
-      RUN_2N (4);
-      break;
-
-    default:
-      {
-#if BITS_PER_MP_LIMB == 64
-	mp_limb base_multiplier = brec->base_multiplier;
-	if (brec->flag)
-	  while (value != 0)
-	    {
-	      mp_limb quo, rem, x, dummy;
-
-	      umul_ppmm (x, dummy, value, base_multiplier);
-	      quo = (x + ((value - x) >> 1)) >> (brec->post_shift - 1);
-	      rem = value - quo * base;
-	      *--bp = digits[rem];
-	      value = quo;
-	    }
-	else
-	  while (value != 0)
-	    {
-	      mp_limb quo, rem, x, dummy;
-
-	      umul_ppmm (x, dummy, value, base_multiplier);
-	      quo = x >> brec->post_shift;
-	      rem = value - quo * base;
-	      *--bp = digits[rem];
-	      value = quo;
-	    }
-#endif
-#if BITS_PER_MP_LIMB == 32
-	mp_limb t[3];
-	int n;
-
-	/* First convert x0 to 1-3 words in base s->big.base.
-	   Optimize for frequent cases of 32 bit numbers.  */
-	if ((mp_limb) (value >> 32) >= 1)
-	  {
-	    int big_normalization_steps = brec->big.normalization_steps;
-	    mp_limb big_base_norm = brec->big.base << big_normalization_steps;
-
-	    if ((mp_limb) (value >> 32) >= brec->big.base)
-	      {
-		mp_limb x1hi, x1lo, r;
-		/* If you want to optimize this, take advantage of
-		   that the quotient in the first udiv_qrnnd will
-		   always be very small.  It might be faster just to
-		   subtract in a tight loop.  */
-
-#if UDIV_TIME > 2 * UMUL_TIME
-		mp_limb x, xh, xl;
-
-		if (big_normalization_steps == 0)
-		  xh = 0;
-		else
-		  xh = (mp_limb) (value >> 64 - big_normalization_steps);
-		xl = (mp_limb) (value >> 32 - big_normalization_steps);
-		udiv_qrnnd_preinv (x1hi, r, xh, xl, big_base_norm,
-				   brec->big.base_ninv);
-
-		xl = ((mp_limb) value) << big_normalization_steps;
-		udiv_qrnnd_preinv (x1lo, x, r, xl, big_base_norm,
-				   big_normalization_steps);
-		t[2] = x >> big_normalization_steps;
-
-		if (big_normalization_steps == 0)
-		  xh = x1hi;
-		else
-		  xh = ((x1hi << big_normalization_steps)
-			| (x1lo >> 32 - big_normalization_steps));
-		xl = x1lo << big_normalization_steps;
-		udiv_qrnnd_preinv (t[0], x, xh, xl, big_base_norm,
-				   big_normalization_steps);
-		t[1] = x >> big_normalization_steps;
-#elif UDIV_NEEDS_NORMALIZATION
-		mp_limb x, xh, xl;
-
-		if (big_normalization_steps == 0)
-		  xh = 0;
-		else
-		  xh = (mp_limb) (value >> 64 - big_normalization_steps);
-		xl = (mp_limb) (value >> 32 - big_normalization_steps);
-		udiv_qrnnd (x1hi, r, xh, xl, big_base_norm);
-
-		xl = ((mp_limb) value) << big_normalization_steps;
-		udiv_qrnnd (x1lo, x, r, xl, big_base_norm);
-		t[2] = x >> big_normalization_steps;
-
-		if (big_normalization_steps == 0)
-		  xh = x1hi;
-		else
-		  xh = ((x1hi << big_normalization_steps)
-			| (x1lo >> 32 - big_normalization_steps));
-		xl = x1lo << big_normalization_steps;
-		udiv_qrnnd (t[0], x, xh, xl, big_base_norm);
-		t[1] = x >> big_normalization_steps;
-#else
-		udiv_qrnnd (x1hi, r, 0, (mp_limb) (value >> 32),
-			    brec->big.base);
-		udiv_qrnnd (x1lo, t[2], r, (mp_limb) value, brec->big.base);
-		udiv_qrnnd (t[0], t[1], x1hi, x1lo, brec->big.base);
-#endif
-		n = 3;
-	      }
-	    else
-	      {
-#if (UDIV_TIME > 2 * UMUL_TIME)
-		mp_limb x;
-
-		value <<= brec->big.normalization_steps;
-		udiv_qrnnd_preinv (t[0], x, (mp_limb) (value >> 32),
-				   (mp_limb) value, big_base_norm,
-				   brec->big.base_ninv);
-		t[1] = x >> brec->big.normalization_steps;
-#elif UDIV_NEEDS_NORMALIZATION
-		mp_limb x;
-
-		value <<= big_normalization_steps;
-		udiv_qrnnd (t[0], x, (mp_limb) (value >> 32),
-			    (mp_limb) value, big_base_norm);
-		t[1] = x >> big_normalization_steps;
-#else
-		udiv_qrnnd (t[0], t[1], (mp_limb) (value >> 32),
-			    (mp_limb) value, brec->big.base);
-#endif
-		n = 2;
-	      }
-	  }
-	else
-	  {
-	    t[0] = value;
-	    n = 1;
-	  }
-
-	/* Convert the 1-3 words in t[], word by word, to ASCII.  */
-	do
-	  {
-	    mp_limb ti = t[--n];
-	    int ndig_for_this_limb = 0;
-
-#if UDIV_TIME > 2 * UMUL_TIME
-	    mp_limb base_multiplier = brec->base_multiplier;
-	    if (brec->flag)
-	      while (ti != 0)
-		{
-		  mp_limb quo, rem, x, dummy;
-
-		  umul_ppmm (x, dummy, ti, base_multiplier);
-		  quo = (x + ((ti - x) >> 1)) >> (brec->post_shift - 1);
-		  rem = ti - quo * base;
-		  *--bp = digits[rem];
-		  ti = quo;
-		  ++ndig_for_this_limb;
-		}
-	    else
-	      while (ti != 0)
-		{
-		  mp_limb quo, rem, x, dummy;
-
-		  umul_ppmm (x, dummy, ti, base_multiplier);
-		  quo = x >> brec->post_shift;
-		  rem = ti - quo * base;
-		  *--bp = digits[rem];
-		  ti = quo;
-		  ++ndig_for_this_limb;
-		}
-#else
-	    while (ti != 0)
-	      {
-		mp_limb quo, rem;
-
-		quo = ti / base;
-		rem = ti % base;
-		*--bp = digits[rem];
-		ti = quo;
-		++ndig_for_this_limb;
-	      }
-#endif
-	    /* If this wasn't the most significant word, pad with zeros.  */
-	    if (n != 0)
-	      while (ndig_for_this_limb < brec->big.ndigits)
-		{
-		  *--bp = '0';
-		  ++ndig_for_this_limb;
-		}
-	  }
-	while (n != 0);
-#endif
-      }
-      break;
-    }
-
-  return bp;
-}
diff --git a/stdio/_itoa.h b/stdio/_itoa.h
deleted file mode 100644
index ab3d1d1d3a..0000000000
--- a/stdio/_itoa.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Internal function for converting integers to ASCII.
-Copyright (C) 1994, 1995 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#ifndef _ITOA_H
-#define _ITOA_H
-#include <sys/cdefs.h>
-
-/* Convert VALUE into ASCII in base BASE (2..36).
-   Write backwards starting the character just before BUFLIM.
-   Return the address of the first (left-to-right) character in the number.
-   Use upper case letters iff UPPER_CASE is nonzero.  */
-
-extern char *_itoa __P ((unsigned long long int value, char *buflim,
-			 unsigned int base, int upper_case));
-
-#endif	/* itoa.h */
diff --git a/stdio/asprintf.c b/stdio/asprintf.c
deleted file mode 100644
index 9b69800f73..0000000000
--- a/stdio/asprintf.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-
-/* Write formatted output from FORMAT to a string which is
-   allocated with malloc and stored in *STRING_PTR.  */
-/* VARARGS2 */
-int
-DEFUN(asprintf, (string_ptr, format),
-      char **string_ptr AND CONST char *format DOTS)
-{
-  va_list arg;
-  int done;
-
-  va_start(arg, format);
-  done = vasprintf(string_ptr, format, arg);
-  va_end(arg);
-
-  return done;
-}
diff --git a/stdio/bug1.c b/stdio/bug1.c
deleted file mode 100644
index 755bc4231b..0000000000
--- a/stdio/bug1.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <ansidecl.h>
-#include <stdio.h>
-#include <string.h>
-
-int
-DEFUN_VOID(main)
-{
-  char *bp;
-  size_t size;
-  FILE *stream;
-  int lose = 0;
-
-  stream = open_memstream (&bp, &size);
-  fprintf (stream, "hello");
-  fflush (stream);
-  printf ("buf = %s, size = %d\n", bp, size);
-  lose |= size != 5;
-  lose |= strncmp (bp, "hello", size);
-  fprintf (stream, ", world");
-  fclose (stream);
-  printf ("buf = %s, size = %d\n", bp, size);
-  lose |= size != 12;
-  lose |= strncmp (bp, "hello, world", 12);
-
-  puts (lose ? "Test FAILED!" : "Test succeeded.");
-
-  return lose;
-}
diff --git a/stdio/bug1.input b/stdio/bug1.input
deleted file mode 100644
index 5595fa46c0..0000000000
--- a/stdio/bug1.input
+++ /dev/null
@@ -1 +0,0 @@
-95
diff --git a/stdio/bug2.c b/stdio/bug2.c
deleted file mode 100644
index 2b34c890bf..0000000000
--- a/stdio/bug2.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <ansidecl.h>
-#include <stdio.h>
-
-int
-DEFUN_VOID(main)
-{
-  int i;
-  puts ("This should print \"wow = I\" for I from 0 to 39 inclusive.");
-  for (i = 0; i < 40; i++)
-    printf ("%s = %d\n", "wow", i);
-  return 0;
-}
diff --git a/stdio/bug3.c b/stdio/bug3.c
deleted file mode 100644
index 1684720b9f..0000000000
--- a/stdio/bug3.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <ansidecl.h>
-#include <stdio.h>
-#include <string.h>
-
-int
-DEFUN_VOID(main)
-{
-  FILE *f;
-  int i;
-
-  f = fopen("/tmp/bugtest", "w+");
-  for (i=0; i<9000; i++)
-    putc ('x', f);
-  fseek (f, 8180L, 0);
-  fwrite ("Where does this text go?", 1, 24, f);
-  fflush (f);
-
-  rewind (f);
-  for (i=0; i<9000; i++)
-    {
-      int j;
-
-      if ((j = getc(f)) != 'x')
-	{
-	  if (i != 8180)
-	    {
-	      printf ("Test FAILED!");
-	      return 1;
-	    }
-	  else
-	    {
-	      char buf[25];
-
-	      buf[0] = j;
-	      fread (buf + 1, 1, 23, f);
-	      buf[24] = '\0';
-	      if (strcmp (buf, "Where does this text go?") != 0)
-		{
-		  printf ("%s\nTest FAILED!\n", buf);
-		  return 1;
-		}
-	      i += 23;
-	    }
-	}
-    }
-
-  fclose(f);
-
-  puts ("Test succeeded.");
-
-  return 0;
-}
diff --git a/stdio/bug4.c b/stdio/bug4.c
deleted file mode 100644
index 00abf3c502..0000000000
--- a/stdio/bug4.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifdef _LIBC
-#include <ansidecl.h>
-#endif
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-
-int stdio_block_read = 1, stdio_block_write = 1;
-
-int
-DEFUN(main, (argc, argv),
-      int argc AND char **argv)
-{
-  FILE *f;
-  int i;
-  char buffer[31];
-
-  while ((i = getopt (argc, argv, "rw")) != EOF)
-    switch (i)
-      {
-      case 'r':
-	stdio_block_read = 0;
-	break;
-      case 'w':
-	stdio_block_write = 0;
-	break;
-      }
-
-  f = fopen("/tmp/bugtest", "w+");
-  for (i=0; i<9000; i++) {
-    putc('x', f);
-  }
-  fseek(f, 8180L, 0);
-  fwrite("Where does this text come from?", 1, 31, f);
-  fseek(f, 8180L, 0);
-  fread(buffer, 1, 31, f);
-  fwrite(buffer, 1, 31, stdout);
-  fclose(f);
-
-  if (!memcmp (buffer, "Where does this text come from?", 31))
-    {
-      puts ("\nTest succeeded.");
-      return 0;
-    }
-  else
-    {
-      puts ("\nTest FAILED!");
-      return 1;
-    }
-}
diff --git a/stdio/bug5.c b/stdio/bug5.c
deleted file mode 100644
index 18f069ae29..0000000000
--- a/stdio/bug5.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* If stdio is working correctly, after this is run infile and outfile
-   will have the same contents.  If the bug (found in GNU C library 0.3)
-   exhibits itself, outfile will be missing the 2nd through 1023rd
-   characters.  */
-
-#include <ansidecl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-static char buf[8192];
-
-int
-DEFUN_VOID(main)
-{
-  FILE *in;
-  FILE *out;
-  static char inname[] = "/tmp/bug5.in";
-  static char outname[] = "/tmp/bug5.out";
-  int i;
-
-  /* Create a test file.  */
-  in = fopen (inname, "w+");
-  if (in == NULL)
-    {
-      perror (inname);
-      return 1;
-    }
-  for (i = 0; i < 1000; ++i)
-    fprintf (in, "%d\n", i);
-
-  out = fopen (outname, "w");
-  if (out == NULL)
-    {
-      perror (outname);
-      return 1;
-    }
-  if (fseek (in, 0L, SEEK_SET) != 0)
-    abort ();
-  putc (getc (in), out);
-  i = fread (buf, 1, sizeof (buf), in);
-  if (i == 0)
-    {
-      perror ("fread");
-      return 1;
-    }
-  if (fwrite (buf, 1, i, out) != i)
-    {
-      perror ("fwrite");
-      return 1;
-    }
-  fclose (in);
-  fclose (out);
-
-  puts ("There should be no further output from this test.");
-  fflush (stdout);
-  execlp ("cmp", "cmp", inname, outname, (char *) NULL);
-  perror ("execlp: cmp");
-  exit (1);
-}
diff --git a/stdio/bug6.c b/stdio/bug6.c
deleted file mode 100644
index 4a37ab2584..0000000000
--- a/stdio/bug6.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <ansidecl.h>
-#include <stdio.h>
-
-int
-DEFUN_VOID(main)
-{
-  char buf[80];
-  int i;
-  int lost = 0;
-
-  scanf ("%2s", buf);
-  lost |= (buf[0] != 'X' || buf[1] != 'Y' || buf[2] != '\0');
-  if (lost)
-    puts ("test of %2s failed.");
-  scanf (" ");
-  scanf ("%d", &i);
-  lost |= (i != 1234);
-  if (lost)
-    puts ("test of %d failed.");
-  scanf ("%c", buf);
-  lost |= (buf[0] != 'L');
-  if (lost)
-    puts ("test of %c failed.\n");
-
-  puts (lost ? "Test FAILED!" : "Test succeeded.");
-  return lost;
-}
diff --git a/stdio/bug6.input b/stdio/bug6.input
deleted file mode 100644
index d996e399c3..0000000000
--- a/stdio/bug6.input
+++ /dev/null
@@ -1 +0,0 @@
-XY 1234L
diff --git a/stdio/bug7.c b/stdio/bug7.c
deleted file mode 100644
index af06f8d6a5..0000000000
--- a/stdio/bug7.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Regression test for fseek and freopen bugs.  */
-
-#include <stdio.h>
-
-int
-main ()
-{
-  int lose = 0;
-  char filename[] = "/tmp/foo";
-  FILE *fp;
- 
-  fp = fopen (filename, "w+");
-  fprintf (fp, "Hello world!\n");
-  fflush (fp);
-  fseek (fp, 5L, SEEK_SET);
-  if (fseek (fp, -1L, SEEK_CUR) < 0)
-    {
-      printf ("seek failed\n");
-      lose = 1;
-    }
-  fclose (fp);
-  remove (filename);
-
-  {
-    FILE *file1;
-    FILE *file2;
-    char filename1[] = "/tmp/foo";
-    char filename2[] = "/tmp/bar";
-    int ch;
-
-    file1 = fopen (filename1, "w");
-    fclose (file1);
-
-    file2 = fopen (filename2, "w");
-    fputc ('x', file2);
-    fclose (file2);
-
-    file1 = fopen (filename1, "r");
-    file2 = freopen (filename2, "r", file1);
-    if ((ch = fgetc (file2)) != 'x')
-      {
-	printf ("wrong character in reopened file, value = %d\n", ch);
-	lose = 1;
-      }
-    fclose (file1);
-    fclose (file2);
-    remove (filename1);
-    remove (filename2);
-  }
-
-  puts (lose ? "Test FAILED!" : "Test succeeded.");
-  return lose;
-}
diff --git a/stdio/dprintf.c b/stdio/dprintf.c
deleted file mode 100644
index fc9faa4ca2..0000000000
--- a/stdio/dprintf.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-
-/* Write formatted output to D, according to the format string FORMAT.  */
-/* VARARGS2 */
-int
-DEFUN(dprintf, (d, format), int d AND CONST char *format DOTS)
-{
-  va_list arg;
-  int done;
-
-  va_start(arg, format);
-  done = vdprintf(d, format, arg);
-  va_end(arg);
-
-  return done;
-}
diff --git a/stdio/errnobug.c b/stdio/errnobug.c
deleted file mode 100644
index cf17be30a2..0000000000
--- a/stdio/errnobug.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Regression test for reported old bug that errno is clobbered
-   by the first successful output to a stream on an unseekable object. 
-Copyright (C) 1995 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <errno.h>
-#include <stdio.h>
-#include <unistd.h>
-
-int
-main (void)
-{
-  int fd[2];
-  FILE *f;
-
-  /* Get a stream that cannot seek.  */
-
-  if (pipe (fd))
-    {
-      perror ("pipe");
-      return 1;
-    }
-  f = fdopen (fd[1], "w");
-  if (f == NULL)
-    {
-      perror ("fdopen");
-      return 1;
-    }
-
-  errno = 0;
-  if (fputs ("fnord", f))
-    {
-      perror ("fputs");
-      return 1;
-    }
-
-  if (errno)
-    {
-      perror ("errno gratuitously set -- TEST FAILED");
-      return 1;
-    }
-
-  puts ("Test succeeded.");
-  return 0;
-}
diff --git a/stdio/fprintf.c b/stdio/fprintf.c
deleted file mode 100644
index bc6d1003b7..0000000000
--- a/stdio/fprintf.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-
-/* Write formatted output to STREAM from the format string FORMAT.  */
-/* VARARGS2 */
-int
-DEFUN(fprintf, (stream, format),
-      FILE *stream AND CONST char *format DOTS)
-{
-  va_list arg;
-  int done;
-
-  va_start(arg, format);
-  done = vfprintf(stream, format, arg);
-  va_end(arg);
-
-  return done;
-}
diff --git a/stdio/fscanf.c b/stdio/fscanf.c
deleted file mode 100644
index cbe0103368..0000000000
--- a/stdio/fscanf.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-
-/* Read formatted input from STREAM according to the format string FORMAT.  */
-/* VARARGS2 */
-int
-DEFUN(fscanf, (stream, format),
-      FILE *stream AND CONST char *format DOTS)
-{
-  va_list arg;
-  int done;
-
-  va_start(arg, format);
-  done = __vfscanf(stream, format, arg);
-  va_end(arg);
-
-  return done;
-}
diff --git a/stdio/getline.c b/stdio/getline.c
deleted file mode 100644
index 1a2f975c75..0000000000
--- a/stdio/getline.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 1991, 1992, 1995 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stddef.h>
-#include <stdio.h>
-
-#undef __getline
-
-/* Like getdelim, but always looks for a newline.  */
-ssize_t
-DEFUN(__getline, (lineptr, n, stream),
-      char **lineptr AND size_t *n AND FILE *stream)
-{
-  return __getdelim (lineptr, n, '\n', stream);
-}
-
-weak_alias (__getline, getline)
diff --git a/stdio/getw.c b/stdio/getw.c
deleted file mode 100644
index 45d4d8875d..0000000000
--- a/stdio/getw.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdio.h>
-
-
-/* Read a word (int) from STREAM.  */
-int
-DEFUN(getw, (stream), FILE *stream)
-{
-	int w;
-
-	/* Is there a better way?  */
-	if (fread((PTR) &w, sizeof(w), 1, stream) != 1)
-	  return(EOF);
-	return(w);
-}
diff --git a/stdio/perror.c b/stdio/perror.c
deleted file mode 100644
index 1054acaa7d..0000000000
--- a/stdio/perror.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdio.h>
-#include <errno.h>
-
-extern char *_strerror_internal __P ((int, char *buf, size_t));
-
-/* Print a line on stderr consisting of the text in S, a colon, a space,
-   a message describing the meaning of the contents of `errno' and a newline.
-   If S is NULL or "", the colon and space are omitted.  */
-void
-DEFUN(perror, (s), register CONST char *s)
-{
-  char buf[1024];
-  int errnum = errno;
-  CONST char *colon;
-
-  if (s == NULL || *s == '\0')
-    s = colon = "";
-  else
-    colon = ": ";
-
-  (void) fprintf (stderr, "%s%s%s\n",
-		  s, colon, _strerror_internal (errnum, buf, sizeof buf));
-}
diff --git a/stdio/printf-parse.h b/stdio/printf-parse.h
deleted file mode 100644
index 0f6e9e287b..0000000000
--- a/stdio/printf-parse.h
+++ /dev/null
@@ -1,388 +0,0 @@
-/* Internal header for parsing printf format strings.
-Copyright (C) 1995 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
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ctype.h>
-#include <printf.h>
-#include <string.h>
-#include <stddef.h>
-
-#define NDEBUG 1
-#include <assert.h>
-
-#define MAX(a,b)	({typeof(a) _a = (a); typeof(b) _b = (b);	      \
-			  _a > _b ? _a : _b; })
-#define MIN(a,b)	({typeof(a) _a = (a); typeof(b) _b = (b);	      \
-			  _a < _b ? _a : _b; })
-
-struct printf_spec
-  {
-    /* Information parsed from the format spec.  */ 
-    struct printf_info info;
-
-    /* Pointers into the format string for the end of this format
-       spec and the next (or to the end of the string if no more).  */
-    const char *end_of_fmt, *next_fmt;
-
-    /* Position of arguments for precision and width, or -1 if `info' has
-       the constant value.  */
-    int prec_arg, width_arg;
-
-    int data_arg;		/* Position of data argument.  */
-    int data_arg_type;		/* Type of first argument.  */
-    /* Number of arguments consumed by this format specifier.  */
-    size_t ndata_args;
-  };
-
-
-/* The various kinds off arguments that can be passed to printf.  */
-union printf_arg
-  {
-    unsigned char pa_char;
-    short int pa_short_int;
-    int pa_int;
-    long int pa_long_int;
-    long long int pa_long_long_int;
-    unsigned short int pa_u_short_int;
-    unsigned int pa_u_int;
-    unsigned long int pa_u_long_int;
-    unsigned long long int pa_u_long_long_int;
-    float pa_float;
-    double pa_double;
-    long double pa_long_double;
-    const char *pa_string;
-    void *pa_pointer;
-  };
-
-
-/* Read a simple integer from a string and update the string pointer.
-   It is assumed that the first character is a digit.  */
-static inline unsigned int
-read_int (const char * *pstr)
-{
-  unsigned int retval = **pstr - '0';
-
-  while (isdigit (*++(*pstr)))
-    {
-      retval *= 10;
-      retval += **pstr - '0';
-    }
-
-  return retval;
-}
-
-
-
-/* Find the next spec in FORMAT, or the end of the string.  Returns
-   a pointer into FORMAT, to a '%' or a '\0'.  */
-static inline const char *
-find_spec (const char *format)
-{
-  while (*format != '\0' && *format != '%')
-    {
-      int len;
-
-      if (isascii (*format) || (len = mblen (format, MB_CUR_MAX)) <= 0)
-	++format;
-      else
-	format += len;
-    }
-  return format;
-}
-
-
-/* This is defined in reg-printf.c.  */
-extern printf_arginfo_function **__printf_arginfo_table;
-
-
-/* FORMAT must point to a '%' at the beginning of a spec.  Fills in *SPEC
-   with the parsed details.  POSN is the number of arguments already
-   consumed.  At most MAXTYPES - POSN types are filled in TYPES.  Return
-   the number of args consumed by this spec; *MAX_REF_ARG is updated so it
-   remains the highest argument index used.  */
-static inline size_t
-parse_one_spec (const char *format, size_t posn, struct printf_spec *spec,
-		size_t *max_ref_arg)
-{
-  unsigned int n;
-  size_t nargs = 0;
-
-  /* Skip the '%'.  */
-  ++format;
-
-  /* Clear information structure.  */
-  spec->data_arg = -1;
-  spec->info.alt = 0;
-  spec->info.space = 0;
-  spec->info.left = 0;
-  spec->info.showsign = 0;
-  spec->info.group = 0;
-  spec->info.pad = ' ';
-
-  /* Test for positional argument.  */
-  if (isdigit (*format))
-    {
-      const char *begin = format;
-
-      n = read_int (&format);
-
-      if (n > 0 && *format == '$')
-	/* Is positional parameter.  */
-	{
-	  ++format;		/* Skip the '$'.  */
-	  spec->data_arg = n - 1;
-	  *max_ref_arg = MAX (*max_ref_arg, n);
-	}
-      else
-	/* Oops; that was actually the width and/or 0 padding flag.
-	   Step back and read it again.  */
-	format = begin;
-    }
-
-  /* Check for spec modifiers.  */
-  while (*format == ' ' || *format == '+' || *format == '-' ||
-	 *format == '#' || *format == '0' || *format == '\'')
-    switch (*format++)
-      {
-      case ' ':
-	/* Output a space in place of a sign, when there is no sign.  */
-	spec->info.space = 1;
-	break;
-      case '+':
-	/* Always output + or - for numbers.  */
-	spec->info.showsign = 1;
-	break;
-      case '-':
-	/* Left-justify things.  */
-	spec->info.left = 1;
-	break;
-      case '#':
-	/* Use the "alternate form":
-	   Hex has 0x or 0X, FP always has a decimal point.  */
-	spec->info.alt = 1;
-	break;
-      case '0':
-	/* Pad with 0s.  */
-	spec->info.pad = '0';
-	break;
-      case '\'':
-	/* Show grouping in numbers if the locale information
-	   indicates any.  */
-	spec->info.group = 1;
-	break;
-      }
-  if (spec->info.left)
-    spec->info.pad = ' ';
-
-  /* Get the field width.  */
-  spec->width_arg = -1;
-  spec->info.width = 0;
-  if (*format == '*')
-    {
-      /* The field width is given in an argument.
-	 A negative field width indicates left justification.  */
-      const char *begin = ++format;
-
-      if (isdigit (*format))
-	{
-	  /* The width argument might be found in a positional parameter.  */
-	  n = read_int (&format);
-
-	  if (n > 0 && *format == '$')
-	    {
-	      spec->width_arg = n - 1;
-	      *max_ref_arg = MAX (*max_ref_arg, n);
-	      ++format;		/* Skip '$'.  */
-	    }
-	}
-
-      if (spec->width_arg < 0)
-	{
-	  /* Not in a positional parameter.  Consume one argument.  */
-	  spec->width_arg = posn++;
-	  ++nargs;
-	  format = begin;	/* Step back and reread.  */
-	}
-    }
-  else if (isdigit (*format))
-    /* Constant width specification.  */
-    spec->info.width = read_int (&format);
-
-  /* Get the precision.  */
-  spec->prec_arg = -1;
-  /* -1 means none given; 0 means explicit 0.  */
-  spec->info.prec = -1;
-  if (*format == '.')
-    {
-      ++format;
-      if (*format == '*')
-	{
-	  /* The precision is given in an argument.  */
-	  const char *begin = ++format;
-
-	  if (isdigit (*format))
-	    {
-	      n = read_int (&format);
-
-	      if (n > 0 && *format == '$')
-		{
-		  spec->prec_arg = n - 1;
-		  *max_ref_arg = MAX (*max_ref_arg, n);
-		  ++format;
-		}
-	    }
-
-	  if (spec->prec_arg < 0)
-	    {
-	      /* Not in a positional parameter.  */
-	      spec->prec_arg = posn++;
-	      ++nargs;
-	      format = begin;
-	    }
-	}
-      else if (isdigit (*format))
-	spec->info.prec = read_int (&format);
-      else
-	/* "%.?" is treated like "%.0?".  */
-	spec->info.prec = 0;
-
-      /* If there was a precision specified, ignore the 0 flag and always
-	 pad with spaces.  */
-      spec->info.pad = ' ';
-    }
-
-  /* Check for type modifiers.  */
-#define is_longlong is_long_double
-  spec->info.is_long_double = 0;
-  spec->info.is_short = 0;
-  spec->info.is_long = 0;
-
-  while (*format == 'h' || *format == 'l' || *format == 'L' ||
-	 *format == 'Z' || *format == 'q')
-    switch (*format++)
-      {
-      case 'h':
-	/* int's are short int's.  */
-	spec->info.is_short = 1;
-	break;
-      case 'l':
-	if (spec->info.is_long)
-	  /* A double `l' is equivalent to an `L'.  */
-	  spec->info.is_longlong = 1;
-	else
-	  /* int's are long int's.  */
-	  spec->info.is_long = 1;
-	break;
-      case 'L':
-	/* double's are long double's, and int's are long long int's.  */
-	spec->info.is_long_double = 1;
-	break;
-      case 'Z':
-	/* int's are size_t's.  */
-	assert (sizeof(size_t) <= sizeof(unsigned long long int));
-	spec->info.is_longlong = sizeof(size_t) > sizeof(unsigned long int);
-	spec->info.is_long = sizeof(size_t) > sizeof(unsigned int);
-	break;
-      case 'q':
-	/* 4.4 uses this for long long.  */
-	spec->info.is_longlong = 1;
-	break;
-      }
-
-  /* Get the format specification.  */
-  spec->info.spec = *format++;
-  if (__printf_arginfo_table != NULL &&
-      __printf_arginfo_table[spec->info.spec] != NULL)
-    /* We don't try to get the types for all arguments if the format
-       uses more than one.  The normal case is covered though.  */
-    spec->ndata_args = (*__printf_arginfo_table[spec->info.spec])
-      (&spec->info, 1, &spec->data_arg_type);
-  else
-    {
-      /* Find the data argument types of a built-in spec.  */
-      spec->ndata_args = 1;
-
-      switch (spec->info.spec)
-	{
-	case 'i':
-	case 'd':
-	case 'u':
-	case 'o':
-	case 'X':
-	case 'x':
-	  if (spec->info.is_longlong)
-	    spec->data_arg_type = PA_INT|PA_FLAG_LONG_LONG;
-	  else if (spec->info.is_long)
-	    spec->data_arg_type = PA_INT|PA_FLAG_LONG;
-	  else if (spec->info.is_short)
-	    spec->data_arg_type = PA_INT|PA_FLAG_SHORT;
-	  else
-	    spec->data_arg_type = PA_INT;
-	  break;
-	case 'e':
-	case 'E':
-	case 'f':
-	case 'g':
-	case 'G':
-	  if (spec->info.is_long_double)
-	    spec->data_arg_type = PA_DOUBLE|PA_FLAG_LONG_DOUBLE;
-	  else
-	    spec->data_arg_type = PA_DOUBLE;
-	  break;
-	case 'c':
-	  spec->data_arg_type = PA_CHAR;
-	  break;
-	case 's':
-	  spec->data_arg_type = PA_STRING;
-	  break;
-	case 'p':
-	  spec->data_arg_type = PA_POINTER;
-	  break;
-	case 'n':
-	  spec->data_arg_type = PA_INT|PA_FLAG_PTR;
-	  break;
-
-	case 'm':
-	default:
-	  /* An unknown spec will consume no args.  */
-	  spec->ndata_args = 0;
-	  break;
-	}
-
-      if (spec->data_arg == -1 && spec->ndata_args > 0) 
-	{
-	  /* There are args consumed, but no positional spec.
-	     Use the next sequential arg position.  */
-	  spec->data_arg = posn;
-	  posn += spec->ndata_args;
-	  nargs += spec->ndata_args;
-	}
-    }
-
-  if (spec->info.spec == '\0')
-    /* Format ended before this spec was complete.  */
-    spec->end_of_fmt = spec->next_fmt = format - 1;
-  else
-    {
-      /* Find the next format spec.  */
-      spec->end_of_fmt = format;
-      spec->next_fmt = find_spec (format);
-    }
-
-  return nargs;
-}
diff --git a/stdio/printf-prs.c b/stdio/printf-prs.c
deleted file mode 100644
index 811a9cb7eb..0000000000
--- a/stdio/printf-prs.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (C) 1991, 1992, 1995 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <stdio.h>
-#include <printf.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "printf-parse.h"
-
-
-size_t
-parse_printf_format (fmt, n, argtypes)
-      const char *fmt;
-      size_t n;
-      int *argtypes;
-{
-  size_t nargs;			/* Number of arguments.  */
-  size_t max_ref_arg;		/* Highest index used in a positional arg.  */
-  struct printf_spec spec;
-
-  nargs = 0;
-  max_ref_arg = 0;
-
-  /* Search for format specifications.  */
-  for (fmt = find_spec (fmt); *fmt != '\0'; fmt = spec.next_fmt)
-    {
-      /* Parse this spec.  */
-      nargs += parse_one_spec (fmt, nargs, &spec, &max_ref_arg);
-
-      /* If the width is determined by an argument this is an int.  */
-      if (spec.width_arg != -1 && spec.width_arg < n)
-	argtypes[spec.width_arg] = PA_INT;
-
-      /* If the precision is determined by an argument this is an int.  */
-      if (spec.prec_arg != -1 && spec.prec_arg < n)
-	argtypes[spec.prec_arg] = PA_INT;
-
-      if (spec.data_arg < n)
-	switch (spec.ndata_args)
-	  {
-	  case 0:		/* No arguments.  */
-	    break;
-	  case 1:		/* One argument; we already have the type.  */
-	    argtypes[spec.data_arg] = spec.data_arg_type;
-	    break;
-	  default:
-	    /* We have more than one argument for this format spec.  We must
-               call the arginfo function again to determine all the types.  */
-	    (void) (*__printf_arginfo_table[spec.info.spec])
-	      (&spec.info, n - spec.data_arg, &argtypes[spec.data_arg]);
-	    break;
-	  }
-    }
-
-  return MAX (nargs, max_ref_arg);
-}
diff --git a/stdio/printf.c b/stdio/printf.c
deleted file mode 100644
index 9cdae768ae..0000000000
--- a/stdio/printf.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-
-/* Write formatted output to stdout from the format string FORMAT.  */
-/* VARARGS1 */
-int
-DEFUN(printf, (format), CONST char *format DOTS)
-{
-  va_list arg;
-  int done;
-
-  va_start(arg, format);
-  done = vprintf(format, arg);
-  va_end(arg);
-
-  return done;
-}
diff --git a/stdio/printf.h b/stdio/printf.h
deleted file mode 100644
index 0f381c77f4..0000000000
--- a/stdio/printf.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993, 1995 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#ifndef	_PRINTF_H
-
-#define	_PRINTF_H	1
-#include <features.h>
-
-__BEGIN_DECLS
-
-#define	__need_FILE
-#include <stdio.h>
-#define	__need_size_t
-#include <stddef.h>
-
-
-struct printf_info
-{
-  int prec;			/* Precision.  */
-  int width;			/* Width.  */
-  unsigned char spec;		/* Format letter.  */
-  unsigned int is_long_double:1;/* L flag.  */
-  unsigned int is_short:1;	/* h flag.  */
-  unsigned int is_long:1;	/* l flag.  */
-  unsigned int alt:1;		/* # flag.  */
-  unsigned int space:1;		/* Space flag.  */
-  unsigned int left:1;		/* - flag.  */
-  unsigned int showsign:1;	/* + flag.  */
-  unsigned int group:1;		/* ' flag.  */
-  char pad;			/* Padding character.  */
-};
-
-
-/* Type of a printf specifier-handler function.
-   STREAM is the FILE on which to write output.
-   INFO gives information about the format specification.
-   ARGS is a vector of pointers to the argument data;
-   the number of pointers will be the number returned
-   by the associated arginfo function for the same INFO.
-
-   The function should return the number of characters written,
-   or -1 for errors.  */
-
-typedef int printf_function __P ((FILE *__stream,
-				  __const struct printf_info *__info,
-				  __const void **__const __args));
-
-/* Type of a printf specifier-arginfo function.
-   INFO gives information about the format specification.
-   N, ARGTYPES, and return value are as for printf_parse_format.  */
-
-typedef int printf_arginfo_function __P ((__const struct printf_info * __info,
-					  size_t __n,
-					  int *__argtypes));
-
-
-/* Register FUNC to be called to format SPEC specifiers; ARGINFO must be
-   specified to determine how many arguments a SPEC conversion requires and
-   what their types are, even if your program never calls
-   `parse_printf_format'.  */
-
-extern int register_printf_function __P ((int __spec, printf_function __func,
-					  printf_arginfo_function __arginfo));
-
-
-/* Parse FMT, and fill in N elements of ARGTYPES with the
-   types needed for the conversions FMT specifies.  Returns
-   the number of arguments required by FMT.
-
-   The ARGINFO function registered with a user-defined format is passed a
-   `struct printf_info' describing the format spec being parsed.  A width
-   or precision of INT_MIN means a `*' was used to indicate that the
-   width/precision will come from an arg.  The function should fill in the
-   array it is passed with the types of the arguments it wants, and return
-   the number of arguments it wants.  */
-
-extern size_t parse_printf_format __P ((__const char *__fmt,
-					size_t __n,
-					int *__argtypes));
-
-
-/* Codes returned by `parse_printf_format' for basic types.
-
-   These values cover all the standard format specifications.
-   Users can add new values after PA_LAST for their own types.  */
-
-enum
-{				/* C type: */
-  PA_INT,			/* int */
-  PA_CHAR,			/* int, cast to char */
-  PA_STRING,			/* const char *, a '\0'-terminated string */
-  PA_POINTER,			/* void * */
-  PA_FLOAT,			/* float */
-  PA_DOUBLE,			/* double */
-  PA_LAST
-};
-
-/* Flag bits that can be set in a type returned by `parse_printf_format'.  */
-#define	PA_FLAG_MASK		0xff00
-#define	PA_FLAG_LONG_LONG	(1 << 8)
-#define	PA_FLAG_LONG_DOUBLE	PA_FLAG_LONG_LONG
-#define	PA_FLAG_LONG		(1 << 9)
-#define	PA_FLAG_SHORT		(1 << 10)
-#define	PA_FLAG_PTR		(1 << 11)
-
-
-__END_DECLS
-
-#endif /* printf.h  */
diff --git a/stdio/printf_fp.c b/stdio/printf_fp.c
deleted file mode 100644
index 28d13d61b8..0000000000
--- a/stdio/printf_fp.c
+++ /dev/null
@@ -1,990 +0,0 @@
-/* Floating point output for `printf'.
-Copyright (C) 1995 Free Software Foundation, Inc.
-Written by Ulrich Drepper.
-
-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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.	 If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#ifdef USE_IN_LIBIO
-#  include <libioP.h>
-#else
-#  include <stdio.h>
-#endif
-#include <alloca.h>
-#include <ansidecl.h>
-#include <ctype.h>
-#include <float.h>
-#include <gmp-mparam.h>
-#include "../stdlib/gmp.h"
-#include "../stdlib/gmp-impl.h"
-#include "../stdlib/longlong.h"
-#include "../stdlib/fpioconst.h"
-#include "../locale/localeinfo.h"
-#include <limits.h>
-#include <math.h>
-#include <printf.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-#define NDEBUG			/* 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
-#  define PUT(f, s, n) _IO_sputn (f, s, n)
-#  define PAD(f, c, n) _IO_padn (f, c, n)
-/* We use this file GNU C library and GNU I/O library.	So make
-   names equal.	 */
-#  undef putc
-#  define putc(c, f) _IO_putc (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 __P ((FILE *, char pad, int n)); /* 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, len)							      \
-  do									      \
-    {									      \
-      register size_t outlen = (len);					      \
-      if (len > 20)							      \
-	{								      \
-	  if (PUT (fp, ptr, outlen) != outlen)				      \
-	    return -1;							      \
-	  ptr += outlen;						      \
-	  done += outlen;						      \
-	}								      \
-      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)
-
-/* We use the GNU MP library to handle large numbers.
-
-   An MP variable occupies a varying number of entries in its array.  We keep
-   track of this number for efficiency reasons.  Otherwise we would always
-   have to process the whole array.  */
-#define MPN_VAR(name) mp_limb *name; mp_size_t name##size
-
-#define MPN_ASSIGN(dst,src)						      \
-  memcpy (dst, src, (dst##size = src##size) * sizeof (mp_limb))
-#define MPN_GE(u,v) \
-  (u##size > v##size || (u##size == v##size && __mpn_cmp (u, v, u##size) >= 0))
-
-extern int __isinfl (long double), __isnanl (long double);
-
-extern mp_size_t __mpn_extract_double (mp_ptr res_ptr, mp_size_t size,
-				       int *expt, int *is_neg,
-				       double value);
-extern mp_size_t __mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size,
-					    int *expt, int *is_neg,
-					    long double value);
-
-
-static unsigned int guess_grouping (unsigned int intdig_max,
-				    const char *grouping, wchar_t sepchar);
-static char *group_number (char *buf, char *bufend, unsigned int intdig_no,
-			   const char *grouping, wchar_t thousands_sep);
-
-
-int
-__printf_fp (fp, info, args)
-     FILE *fp;
-     const struct printf_info *info;
-     const **const args;
-{
-  /* The floating-point value to output.  */
-  union
-    {
-      double dbl;
-      LONG_DOUBLE ldbl;
-    }
-  fpnum;
-
-  /* Locale-dependent representation of decimal point.	*/
-  wchar_t decimal;
-
-  /* Locale-dependent thousands separator and grouping specification.  */
-  wchar_t thousands_sep;
-  const char *grouping;
-
-  /* "NaN" or "Inf" for the special cases.  */
-  CONST char *special = NULL;
-
-  /* We need just a few limbs for the input before shifting to the right
-     position.	*/
-  mp_limb fp_input[(LDBL_MANT_DIG + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB];
-  /* We need to shift the contents of fp_input by this amount of bits.	*/
-  int to_shift;
-
-  /* The significant of the floting-point value in question  */
-  MPN_VAR(frac);
-  /* and the exponent.	*/
-  int exponent;
-  /* Sign of the exponent.  */
-  int expsign = 0;
-  /* Sign of float number.  */
-  int is_neg = 0;
-
-  /* Scaling factor.  */
-  MPN_VAR(scale);
-
-  /* Temporary bignum value.  */
-  MPN_VAR(tmp);
-
-  /* Digit which is result of last hack_digit() call.  */
-  int digit;
-
-  /* The type of output format that will be used: 'e'/'E' or 'f'.  */
-  int type;
-
-  /* Counter for number of written characters.	*/
-  int done = 0;
-
-  /* General helper (carry limb).  */
-  mp_limb cy;
-
-  char hack_digit (void)
-    {
-      mp_limb hi;
-
-      if (expsign != 0 && type == 'f' && exponent-- > 0)
-	hi = 0;
-      else if (scalesize == 0)
-	{
-	  hi = frac[fracsize - 1];
-	  cy = __mpn_mul_1 (frac, frac, fracsize - 1, 10);
-	  frac[fracsize - 1] = cy;
-	}
-      else
-	{
-	  if (fracsize < scalesize)
-	    hi = 0;
-	  else
-	    {
-	      hi = __mpn_divmod (tmp, frac, fracsize, scale, scalesize);
-	      tmp[fracsize - scalesize] = hi;
-	      hi = tmp[0];
-
-	      fracsize = __mpn_normal_size (frac, scalesize);
-	      if (fracsize == 0)
-		{
-		  /* We're not prepared for an mpn variable with zero
-		     limbs.  */
-		  fracsize = 1;
-		  return '0' + hi;
-		}
-	    }
-
-	  cy = __mpn_mul_1 (frac, frac, fracsize, 10);
-	  if (cy != 0)
-	    frac[fracsize++] = cy;
-	}
-
-      return '0' + hi;
-    }
-
-
-  /* Figure out the decimal point character.  */
-  if (mbtowc (&decimal, _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT),
-	      strlen (_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT))) <= 0)
-    decimal = (wchar_t) *_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
-
-
-  if (info->group)
-    {
-      grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
-      if (*grouping <= 0 || *grouping == CHAR_MAX)
-	grouping = NULL;
-      else
-	{
-	  /* Figure out the thousands seperator character.  */
-	  if (mbtowc (&thousands_sep, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP),
-		      strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0)
-	    thousands_sep = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
-	  if (thousands_sep == L'\0')
-	    grouping = NULL;
-	}
-    }
-  else
-    grouping = NULL;
-
-  /* Fetch the argument value.	*/
-  if (info->is_long_double && sizeof (long double) > sizeof (double))
-    {
-      fpnum.ldbl = *(const long double *) args[0];
-
-      /* Check for special values: not a number or infinity.  */
-      if (__isnanl (fpnum.ldbl))
-	{
-	  special = "NaN";
-	  is_neg = 0;
-	}
-      else if (__isinfl (fpnum.ldbl))
-	{
-	  special = "Inf";
-	  is_neg = fpnum.ldbl < 0;
-	}
-      else
-	{
-	  fracsize = __mpn_extract_long_double (fp_input,
-						(sizeof (fp_input) /
-						 sizeof (fp_input[0])), 
-						&exponent, &is_neg,
-						fpnum.ldbl);
-	  to_shift = 1 + fracsize * BITS_PER_MP_LIMB - LDBL_MANT_DIG;
-	}
-    }
-  else
-    {
-      fpnum.dbl = *(const double *) args[0];
-
-      /* Check for special values: not a number or infinity.  */
-      if (__isnan (fpnum.dbl))
-	{
-	  special = "NaN";
-	  is_neg = 0;
-	}
-      else if (__isinf (fpnum.dbl))
-	{
-	  special = "Inf";
-	  is_neg = fpnum.dbl < 0;
-	}
-      else
-	{
-	  fracsize = __mpn_extract_double (fp_input,
-					   (sizeof (fp_input)
-					    / sizeof (fp_input[0])),
-					   &exponent, &is_neg, fpnum.dbl);
-	  to_shift = 1 + fracsize * BITS_PER_MP_LIMB - DBL_MANT_DIG;
-	}
-    }
-
-  if (special)
-    {
-      int width = info->prec > info->width ? info->prec : info->width;
-
-      if (is_neg || info->showsign || info->space)
-	--width;
-      width -= 3;
-
-      if (!info->left && width > 0)
-	PADN (' ', width);
-
-      if (is_neg)
-	outchar ('-');
-      else if (info->showsign)
-	outchar ('+');
-      else if (info->space)
-	outchar (' ');
-
-      PRINT (special, 3);
-
-      if (info->left && width > 0)
-	PADN (' ', width);
-
-      return done;
-    }
-
-
-  /* We need three multiprecision variables.  Now that we have the exponent
-     of the number we can allocate the needed memory.  It would be more
-     efficient to use variables of the fixed maximum size but because this
-     would be really big it could lead to memory problems.  */
-  {
-    mp_size_t bignum_size = ((ABS (exponent) + BITS_PER_MP_LIMB - 1)
-			     / BITS_PER_MP_LIMB + 3) * sizeof (mp_limb);
-    frac = (mp_limb *) alloca (bignum_size);
-    tmp = (mp_limb *) alloca (bignum_size);
-    scale = (mp_limb *) alloca (bignum_size);
-  }
-
-  /* We now have to distinguish between numbers with positive and negative
-     exponents because the method used for the one is not applicable/efficient
-     for the other.  */
-  scalesize = 0;
-  if (exponent > 2)
-    {
-      /* |FP| >= 1.0.  */
-      int scaleexpo = 0;
-      int explog = LDBL_MAX_10_EXP_LOG;
-      int exp10 = 0;
-      const struct mp_power *tens = &_fpioconst_pow10[explog + 1];
-      int cnt_h, cnt_l, i;
-
-      if ((exponent + to_shift) % BITS_PER_MP_LIMB == 0)
-	{
-	  MPN_COPY_DECR (frac + (exponent + to_shift) / BITS_PER_MP_LIMB,
-			 fp_input, fracsize);
-	  fracsize += (exponent + to_shift) / BITS_PER_MP_LIMB;
-	}
-      else
-	{
-	  cy = __mpn_lshift (frac + (exponent + to_shift) / BITS_PER_MP_LIMB,
-			     fp_input, fracsize,
-			     (exponent + to_shift) % BITS_PER_MP_LIMB);
-	  fracsize += (exponent + to_shift) / BITS_PER_MP_LIMB;
-	  if (cy)
-	    frac[fracsize++] = cy;
-	}
-      MPN_ZERO (frac, (exponent + to_shift) / BITS_PER_MP_LIMB);
-
-      assert (tens > &_fpioconst_pow10[0]);
-      do
-	{
-	  --tens;
-
-	  /* The number of the product of two binary numbers with n and m
-	     bits respectively has m+n or m+n-1 bits.	*/
-	  if (exponent >= scaleexpo + tens->p_expo - 1)
-	    {
-	      if (scalesize == 0)
-		MPN_ASSIGN (tmp, tens->array);
-	      else
-		{
-		  cy = __mpn_mul (tmp, scale, scalesize,
-				  tens->array + 2, tens->arraysize - 2);
-		  tmpsize = scalesize + tens->arraysize - 2;
-		  if (cy == 0)
-		    --tmpsize;
-		}
-
-	      if (MPN_GE (frac, tmp))
-		{
-		  int cnt;
-		  MPN_ASSIGN (scale, tmp);
-		  count_leading_zeros (cnt, scale[scalesize - 1]);
-		  scaleexpo = (scalesize - 2) * BITS_PER_MP_LIMB - cnt - 1;
-		  exp10 |= 1 << explog;
-		}
-	    }
-	  --explog;
-	}
-      while (tens > &_fpioconst_pow10[0]);
-      exponent = exp10;
-
-      /* Optimize number representations.  We want to represent the numbers
-	 with the lowest number of bytes possible without losing any
-	 bytes. Also the highest bit in the scaling factor has to be set
-	 (this is a requirement of the MPN division routines).  */
-      if (scalesize > 0)
-	{
-	  /* Determine minimum number of zero bits at the end of
-	     both numbers.  */
-	  for (i = 0; scale[i] == 0 && frac[i] == 0; i++)
-	    ;
-
-	  /* Determine number of bits the scaling factor is misplaced.	*/
-	  count_leading_zeros (cnt_h, scale[scalesize - 1]);
-
-	  if (cnt_h == 0)
-	    {
-	      /* The highest bit of the scaling factor is already set.	So
-		 we only have to remove the trailing empty limbs.  */
-	      if (i > 0)
-		{
-		  MPN_COPY_INCR (scale, scale + i, scalesize - i);
-		  scalesize -= i;
-		  MPN_COPY_INCR (frac, frac + i, fracsize - i);
-		  fracsize -= i;
-		}
-	    }
-	  else
-	    {
-	      if (scale[i] != 0)
-		{
-		  count_trailing_zeros (cnt_l, scale[i]);
-		  if (frac[i] != 0)
-		    {
-		      int cnt_l2;
-		      count_trailing_zeros (cnt_l2, frac[i]);
-		      if (cnt_l2 < cnt_l)
-			cnt_l = cnt_l2;
-		    }
-		}
-	      else
-		count_trailing_zeros (cnt_l, frac[i]);
-
-	      /* Now shift the numbers to their optimal position.  */
-	      if (i == 0 && BITS_PER_MP_LIMB - cnt_h > cnt_l)
-		{
-		  /* We cannot save any memory.	 So just roll both numbers
-		     so that the scaling factor has its highest bit set.  */
-
-		  (void) __mpn_lshift (scale, scale, scalesize, cnt_h);
-		  cy = __mpn_lshift (frac, frac, fracsize, cnt_h);
-		  if (cy != 0)
-		    frac[fracsize++] = cy;
-		}
-	      else if (BITS_PER_MP_LIMB - cnt_h <= cnt_l)
-		{
-		  /* We can save memory by removing the trailing zero limbs
-		     and by packing the non-zero limbs which gain another
-		     free one. */
-
-		  (void) __mpn_rshift (scale, scale + i, scalesize - i,
-				       BITS_PER_MP_LIMB - cnt_h);
-		  scalesize -= i + 1;
-		  (void) __mpn_rshift (frac, frac + i, fracsize - i,
-				       BITS_PER_MP_LIMB - cnt_h);
-		  fracsize -= frac[fracsize - i - 1] == 0 ? i + 1 : i;
-		}
-	      else
-		{
-		  /* We can only save the memory of the limbs which are zero.
-		     The non-zero parts occupy the same number of limbs.  */
-
-		  (void) __mpn_rshift (scale, scale + (i - 1),
-				       scalesize - (i - 1),
-				       BITS_PER_MP_LIMB - cnt_h);
-		  scalesize -= i;
-		  (void) __mpn_rshift (frac, frac + (i - 1),
-				       fracsize - (i - 1),
-				       BITS_PER_MP_LIMB - cnt_h);
-		  fracsize -= frac[fracsize - (i - 1) - 1] == 0 ? i : i - 1;
-		}
-	    }
-	}
-    }
-  else if (exponent < 0)
-    {
-      /* |FP| < 1.0.  */
-      int exp10 = 0;
-      int explog = LDBL_MAX_10_EXP_LOG;
-      const struct mp_power *tens = &_fpioconst_pow10[explog + 1];
-      mp_size_t used_limbs = fracsize - 1;
-
-      /* Now shift the input value to its right place.	*/
-      cy = __mpn_lshift (frac, fp_input, fracsize, to_shift);
-      frac[fracsize++] = cy; 
-      assert (cy == 1 || (frac[fracsize - 2] == 0 && frac[0] == 0));
-
-      expsign = 1;
-      exponent = -exponent;
-
-      assert (tens != &_fpioconst_pow10[0]);
-      do
-	{
-	  --tens;
-
-	  if (exponent >= tens->m_expo)
-	    {
-	      int i, incr, cnt_h, cnt_l;
-	      mp_limb topval[2];
-
-	      /* The __mpn_mul function expects the first argument to be
-		 bigger than the second.  */
-	      if (fracsize < tens->arraysize - 2)
-		cy = __mpn_mul (tmp, &tens->array[2], tens->arraysize - 2,
-				frac, fracsize);
-	      else
-		cy = __mpn_mul (tmp, frac, fracsize,
-				&tens->array[2], tens->arraysize - 2);
-	      tmpsize = fracsize + tens->arraysize - 2;
-	      if (cy == 0)
-		--tmpsize;
-
-	      count_leading_zeros (cnt_h, tmp[tmpsize - 1]); 
-	      incr = (tmpsize - fracsize) * BITS_PER_MP_LIMB
-		     + BITS_PER_MP_LIMB - 1 - cnt_h;
-
-	      assert (incr <= tens->p_expo);
-
-	      /* If we increased the exponent by exactly 3 we have to test
-		 for overflow.	This is done by comparing with 10 shifted
-		 to the right position.	 */
-	      if (incr == exponent + 3)
-		if (cnt_h <= BITS_PER_MP_LIMB - 4)
-		  {
-		    topval[0] = 0;
-		    topval[1] = 10 << (BITS_PER_MP_LIMB - 4 - cnt_h);
-		  }
-		else
-		  {
-		    topval[0] = 10 << (BITS_PER_MP_LIMB - 4);
-		    topval[1] = 0;
-		    (void) __mpn_lshift (topval, topval, 2,
-					 BITS_PER_MP_LIMB - cnt_h);
-		  }
-
-	      /* We have to be careful when multiplying the last factor.
-		 If the result is greater than 1.0 be have to test it
-		 against 10.0.  If it is greater or equal to 10.0 the
-		 multiplication was not valid.  This is because we cannot
-		 determine the number of bits in the result in advance.  */
-	      if (incr < exponent + 3
-		  || (incr == exponent + 3 &&
-		      (tmp[tmpsize - 1] < topval[1]
-		       || (tmp[tmpsize - 1] == topval[1]
-			   && tmp[tmpsize - 2] < topval[0]))))
-		{
-		  /* The factor is right.  Adapt binary and decimal
-		     exponents.	 */ 
-		  exponent -= incr;
-		  exp10 |= 1 << explog;
-
-		  /* If this factor yields a number greater or equal to
-		     1.0, we must not shift the non-fractional digits down. */
-		  if (exponent < 0)
-		    cnt_h += -exponent;
-
-		  /* Now we optimize the number representation.	 */
-		  for (i = 0; tmp[i] == 0; ++i);
-		  if (cnt_h == BITS_PER_MP_LIMB - 1)
-		    {
-		      MPN_COPY (frac, tmp + i, tmpsize - i);
-		      fracsize = tmpsize - i;
-		    }
-		  else
-		    {
-		      count_trailing_zeros (cnt_l, tmp[i]);
-
-		      /* Now shift the numbers to their optimal position.  */
-		      if (i == 0 && BITS_PER_MP_LIMB - 1 - cnt_h > cnt_l)
-			{
-			  /* We cannot save any memory.	 Just roll the
-			     number so that the leading digit is in a
-			     seperate limb.  */
-
-			  cy = __mpn_lshift (frac, tmp, tmpsize, cnt_h + 1);
-			  fracsize = tmpsize + 1;
-			  frac[fracsize - 1] = cy;
-			}
-		      else if (BITS_PER_MP_LIMB - 1 - cnt_h <= cnt_l)
-			{
-			  (void) __mpn_rshift (frac, tmp + i, tmpsize - i,
-					       BITS_PER_MP_LIMB - 1 - cnt_h);
-			  fracsize = tmpsize - i;
-			}
-		      else
-			{
-			  /* We can only save the memory of the limbs which
-			     are zero.	The non-zero parts occupy the same
-			     number of limbs.  */
-
-			  (void) __mpn_rshift (frac, tmp + (i - 1),
-					       tmpsize - (i - 1),
-					       BITS_PER_MP_LIMB - 1 - cnt_h);
-			  fracsize = tmpsize - (i - 1);
-			}
-		    }
-		  used_limbs = fracsize - 1;
-		}
-	    }
-	  --explog;
-	}
-      while (tens != &_fpioconst_pow10[1] && exponent > 0);
-      /* All factors but 10^-1 are tested now.	*/
-      if (exponent > 0)
-	{
-	  cy = __mpn_mul_1 (tmp, frac, fracsize, 10);
-	  tmpsize = fracsize;
-	  assert (cy == 0 || tmp[tmpsize - 1] < 20);
-
-	  (void) __mpn_rshift (frac, tmp, tmpsize, MIN (4, exponent));
-	  fracsize = tmpsize;
-	  exp10 |= 1;
-	  assert (frac[fracsize - 1] < 10);
-	}
-      exponent = exp10;
-    }
-  else
-    {
-      /* This is a special case.  We don't need a factor because the
-	 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 &&
-	      exponent + to_shift < BITS_PER_MP_LIMB);
-
-      /* Now shift the input value to its right place.	*/
-      cy = __mpn_lshift (frac, fp_input, fracsize, (exponent + to_shift));
-      frac[fracsize++] = cy; 
-      exponent = 0;
-    }
-
-  {
-    int width = info->width;
-    char *buffer, *startp, *cp;
-    int chars_needed;
-    int expscale;
-    int intdig_max, intdig_no = 0;
-    int fracdig_min, fracdig_max, fracdig_no = 0;
-    int dig_max;
-    int significant;
-
-    if (tolower (info->spec) == 'e')
-      {
-	type = info->spec;
-	intdig_max = 1;
-	fracdig_min = fracdig_max = info->prec < 0 ? 6 : info->prec;
-	chars_needed = 1 + 1 + fracdig_max + 1 + 1 + 4;
-	/*	       d   .	 ddd	     e	 +-  ddd  */
-	dig_max = INT_MAX;		/* Unlimited.  */
-	significant = 1;		/* Does not matter here.  */
-      }
-    else if (info->spec == 'f')
-      {
-	type = 'f';
-	fracdig_min = fracdig_max = info->prec < 0 ? 6 : info->prec;
-	if (expsign == 0)
-	  {
-	    intdig_max = exponent + 1;
-	    /* This can be really big!	*/  /* XXX Maybe malloc if too big? */
-	    chars_needed = exponent + 1 + 1 + fracdig_max;
-	  }
-	else
-	  {
-	    intdig_max = 1;
-	    chars_needed = 1 + 1 + fracdig_max;
-	  }
-	dig_max = INT_MAX;		/* Unlimited.  */
-	significant = 1;		/* Does not matter here.  */
-      }
-    else
-      {
-	dig_max = info->prec < 0 ? 6 : (info->prec == 0 ? 1 : info->prec);
-	if ((expsign == 0 && exponent >= dig_max)
-	    || (expsign != 0 && exponent > 4))
-	  {
-	    type = isupper (info->spec) ? 'E' : 'e';
-	    fracdig_max = dig_max - 1;
-	    intdig_max = 1;
-	    chars_needed = 1 + 1 + fracdig_max + 1 + 1 + 4;
-	  }
-	else
-	  {
-	    type = 'f';
-	    intdig_max = expsign == 0 ? exponent + 1 : 0;
-	    fracdig_max = dig_max - intdig_max;
-	    /* We need space for the significant digits and perhaps for
-	       leading zeros when < 1.0.  Pessimistic guess: dig_max.  */
-	    chars_needed = dig_max + dig_max + 1;
-	  }
-	fracdig_min = info->alt ? fracdig_max : 0;
-	significant = 0;		/* We count significant digits.	 */
-      }
-
-    if (grouping)
-      /* Guess the number of groups we will make, and thus how
-	 many spaces we need for separator characters.  */
-      chars_needed += guess_grouping (intdig_max, grouping, thousands_sep);
-
-    /* Allocate buffer for output.  We need two more because while rounding
-       it is possible that we need two more characters in front of all the
-       other output.  */
-    buffer = alloca (2 + chars_needed);
-    cp = startp = buffer + 2;	/* Let room for rounding.  */ 
-
-    /* Do the real work: put digits in allocated buffer.  */
-    if (expsign == 0 || type != 'f')
-      {
-	assert (expsign == 0 || intdig_max == 1);
-	while (intdig_no < intdig_max)
-	  {
-	    ++intdig_no;
-	    *cp++ = hack_digit ();
-	  }
-	significant = 1;
-	if (info->alt
-	    || fracdig_min > 0
-	    || (fracdig_max > 0 && (fracsize > 1 || frac[0] != 0)))
-	  *cp++ = decimal;
-      }
-    else
-      {
-	/* |fp| < 1.0 and the selected type is 'f', so put "0."
-	   in the buffer.  */
-	*cp++ = '0';
-	--exponent;
-	*cp++ = decimal;
-      }
-
-    /* Generate the needed number of fractional digits.	 */
-    while (fracdig_no < fracdig_min
-	   || (fracdig_no < fracdig_max && (fracsize > 1 || frac[0] != 0)))
-      {
-	++fracdig_no;
-	*cp = hack_digit ();
-	if (*cp != '0')
-	  significant = 1;
-	else if (significant == 0)
-	  {
-	    ++fracdig_max;
-	    if (fracdig_min > 0)
-	      ++fracdig_min;
-	  }
-	++cp;
-      }
-
-    /* Do rounding.  */
-    digit = hack_digit ();
-    if (digit > '4')
-      {
-	char *tp = cp;
-
-	if (digit == '5')
-	  /* This is the critical case.	 */
-	  if (fracsize == 1 && frac[0] == 0)
-	    /* Rest of the number is zero -> round to even.
-	       (IEEE 754-1985 4.1 says this is the default rounding.)  */
-	    if ((*(cp - 1) & 1) == 0)
-	      goto do_expo;
-
-	if (fracdig_no > 0)
-	  {
-	    /* Process fractional digits.  Terminate if not rounded or
-	       radix character is reached.  */
-	    while (*--tp != decimal && *tp == '9')
-	      *tp = '0';
-	    if (*tp != decimal)
-	      /* Round up.  */
-	      (*tp)++;
-	  }
-
-	if (fracdig_no == 0 || *tp == decimal)
-	  {
-	    /* Round the integer digits.  */
-	    if (*(tp - 1) == decimal)
-	      --tp;
-
-	    while (--tp >= startp && *tp == '9')
-	      *tp = '0';
-
-	    if (tp >= startp)
-	      /* Round up.  */
-	      (*tp)++;
-	    else
-	      /* It is more citical.  All digits were 9's.  */
-	      {
-		if (type != 'f')
-		  {
-		    *startp = '1';
-		    exponent += expsign == 0 ? 1 : -1;
-		  }
-		else if (intdig_no == dig_max)
-		  {
-		    /* This is the case where for type %g the number fits
-		       really in the range for %f output but after rounding
-		       the number of digits is too big.	 */
-		    *--startp = decimal;
-		    *--startp = '1';
-
-		    if (info->alt || fracdig_no > 0)
-		      {
-			/* Overwrite the old radix character.  */
-			startp[intdig_no + 2] = '0';
-			++fracdig_no;
-		      }
-
-		    fracdig_no += intdig_no;
-		    intdig_no = 1;
-		    fracdig_max = intdig_max - intdig_no;
-		    ++exponent;
-		    /* Now we must print the exponent.	*/
-		    type = isupper (info->spec) ? 'E' : 'e';
-		  }
-		else
-		  {
-		    /* We can simply add another another digit before the
-		       radix.  */
-		    *--startp = '1';
-		    ++intdig_no;
-		  }
-
-		/* While rounding the number of digits can change.
-		   If the number now exceeds the limits remove some
-		   fractional digits.  */
-		if (intdig_no + fracdig_no > dig_max)
-		  {
-		    cp -= intdig_no + fracdig_no - dig_max;
-		    fracdig_no -= intdig_no + fracdig_no - dig_max;
-		  }
-	      }
-	  }
-      }
-
-  do_expo:
-    /* Now remove unnecessary '0' at the end of the string.  */
-    while (fracdig_no > fracdig_min && *(cp - 1) == '0')
-      {
-	--cp;
-	--fracdig_no;
-      }
-    /* If we eliminate all fractional digits we perhaps also can remove
-       the radix character.  */
-    if (fracdig_no == 0 && !info->alt && *(cp - 1) == decimal)
-      --cp;
-
-    if (grouping)
-      /* Add in separator characters, overwriting the same buffer.  */
-      cp = group_number (startp, cp, intdig_no, grouping, thousands_sep);
-
-    /* Write the exponent if it is needed.  */
-    if (type != 'f')
-      {
-	*cp++ = type;
-	*cp++ = expsign ? '-' : '+';
-
-	/* Find the magnitude of the exponent.	*/
-	expscale = 10;
-	while (expscale <= exponent)
-	  expscale *= 10;
-
-	if (exponent < 10)
-	  /* Exponent always has at least two digits.  */
-	  *cp++ = '0';
-	else
-	  do
-	    {
-	      expscale /= 10;
-	      *cp++ = '0' + (exponent / expscale);
-	      exponent %= expscale;
-	    }
-	  while (expscale > 10);
-	*cp++ = '0' + exponent;
-      }
-
-    /* Compute number of characters which must be filled with the padding
-       character.  */ 
-    if (is_neg || info->showsign || info->space)
-      --width;
-    width -= cp - startp;
-
-    if (!info->left && info->pad != '0' && width > 0)
-      PADN (info->pad, width);
-
-    if (is_neg)
-      outchar ('-');
-    else if (info->showsign)
-      outchar ('+');
-    else if (info->space)
-      outchar (' ');
-
-    if (!info->left && info->pad == '0' && width > 0)
-      PADN ('0', width);
-
-    PRINT (startp, cp - startp);
-
-    if (info->left && width > 0)
-      PADN (info->pad, width);
-  }
-  return done;
-}
-
-/* Return the number of extra grouping characters that will be inserted
-   into a number with INTDIG_MAX integer digits.  */
-
-static unsigned int
-guess_grouping (unsigned int intdig_max, const char *grouping, wchar_t sepchar)
-{
-  unsigned int groups;
-
-  /* We treat all negative values like CHAR_MAX.  */
-
-  if (*grouping == CHAR_MAX || *grouping <= 0)
-    /* No grouping should be done.  */
-    return 0;
-
-  groups = 0;
-  while (intdig_max > (unsigned int) *grouping)
-    {
-      ++groups;
-      intdig_max -= *grouping++;
-
-      if (*grouping == CHAR_MAX || *grouping < 0)
-	/* No more grouping should be done.  */
-	break;
-      else if (*grouping == 0)
-	{
-	  /* Same grouping repeats.  */
-	  groups += intdig_max / grouping[-1];
-	  break;
-	}
-    }
-
-  return groups;
-}
-
-/* Group the INTDIG_NO integer digits of the number in [BUF,BUFEND).
-   There is guaranteed enough space past BUFEND to extend it.
-   Return the new end of buffer.  */
-
-static char *
-group_number (char *buf, char *bufend, unsigned int intdig_no,
-	      const char *grouping, wchar_t thousands_sep)
-{
-  unsigned int groups = guess_grouping (intdig_no, grouping, thousands_sep);
-  char *p;
-
-  if (groups == 0)
-    return bufend;
-
-  /* Move the fractional part down.  */
-  memmove (buf + intdig_no + groups, buf + intdig_no,
-	   bufend - (buf + intdig_no));
-
-  p = buf + intdig_no + groups - 1;
-  do
-    {
-      unsigned int len = *grouping++;
-      do
-	*p-- = buf[--intdig_no];
-      while (--len > 0);
-      *p-- = thousands_sep;
-
-      if (*grouping == CHAR_MAX || *grouping < 0)
-	/* No more grouping should be done.  */
-	break;
-      else if (*grouping == 0)
-	/* Same grouping repeats.  */
-	--grouping;
-    } while (intdig_no > (unsigned int) *grouping);
-
-  /* Copy the remaining ungrouped digits.  */
-  do
-    *p-- = buf[--intdig_no];
-  while (p > buf);
-
-  return bufend + groups;
-}
diff --git a/stdio/psignal.c b/stdio/psignal.c
deleted file mode 100644
index 8997a2ecdf..0000000000
--- a/stdio/psignal.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (C) 1991, 1992 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdio.h>
-#include <signal.h>
-
-
-#ifndef	HAVE_GNU_LD
-#define	_sys_siglist	sys_siglist
-#endif
-
-/* Defined in sys_siglist.c.  */
-extern CONST char *CONST _sys_siglist[];
-
-
-/* Print out on stderr a line consisting of the test in S, a colon, a space,
-   a message describing the meaning of the signal number SIG and a newline.
-   If S is NULL or "", the colon and space are omitted.  */
-void
-DEFUN(psignal, (sig, s), int sig AND register CONST char *s)
-{
-  CONST char *colon;
-
-  if (s == NULL || s == '\0')
-    s = colon = "";
-  else
-    colon = ": ";
-
-  if (sig >= 0 && sig < NSIG)
-    (void) fprintf(stderr, "%s%s%s\n", s, colon, _sys_siglist[sig]);
-  else
-    (void) fprintf(stderr, "%s%sUnknown signal %d\n", s, colon, sig);
-}
diff --git a/stdio/putw.c b/stdio/putw.c
deleted file mode 100644
index 1b70baeeaf..0000000000
--- a/stdio/putw.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdio.h>
-
-
-/* Write the word (int) W to STREAM.  */
-int
-DEFUN(putw, (w, stream), int w AND FILE *stream)
-{
-  /* Is there a better way?  */
-  if (fwrite((CONST PTR) &w, sizeof(w), 1, stream) < 1)
-    return(EOF);
-  return(0);
-}
diff --git a/stdio/reg-printf.c b/stdio/reg-printf.c
deleted file mode 100644
index 95d7a1f3c9..0000000000
--- a/stdio/reg-printf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <limits.h>
-#include <printf.h>
-
-/* Array of functions indexed by format character.  */
-static printf_function *printf_funcs[UCHAR_MAX + 1];
-printf_arginfo_function *__printf_arginfo_table[UCHAR_MAX + 1];
-
-printf_function **__printf_function_table;
-
-/* Register FUNC to be called to format SPEC specifiers.  */
-int
-DEFUN(register_printf_function, (spec, converter, arginfo),
-      int spec AND printf_function converter AND
-      printf_arginfo_function arginfo)
-{
-  if (spec < 0 || spec > (int) UCHAR_MAX)
-    {
-      errno = EINVAL;
-      return -1;
-    }
-
-  __printf_function_table = printf_funcs;
-  __printf_arginfo_table[spec] = arginfo;
-  printf_funcs[spec] = converter;
-
-  return 0;
-}
diff --git a/stdio/scanf.c b/stdio/scanf.c
deleted file mode 100644
index aa7021526f..0000000000
--- a/stdio/scanf.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-
-/* Read formatted input from stdin according to the format string FORMAT.  */
-/* VARARGS1 */
-int
-DEFUN(scanf, (format), CONST char *format DOTS)
-{
-  va_list arg;
-  int done;
-
-  va_start(arg, format);
-  done = vscanf(format, arg);
-  va_end(arg);
-
-  return done;
-}
diff --git a/stdio/snprintf.c b/stdio/snprintf.c
deleted file mode 100644
index 9f3e0c4868..0000000000
--- a/stdio/snprintf.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-
-/* Write formatted output into S, according to the format
-   string FORMAT, writing no more than MAXLEN characters.  */
-/* VARARGS3 */
-int
-DEFUN(snprintf, (s, maxlen, format),
-      char *s AND size_t maxlen AND CONST char *format DOTS)
-{
-  va_list arg;
-  int done;
-
-  va_start(arg, format);
-  done = vsnprintf(s, maxlen, format, arg);
-  va_end(arg);
-
-  return done;
-}
diff --git a/stdio/sprintf.c b/stdio/sprintf.c
deleted file mode 100644
index ce3a970074..0000000000
--- a/stdio/sprintf.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-
-/* Write formatted output into S, according to the format string FORMAT.  */
-/* VARARGS2 */
-int
-DEFUN(sprintf, (s, format), char *s AND CONST char *format DOTS)
-{
-  va_list arg;
-  int done;
-
-  va_start(arg, format);
-  done = vsprintf(s, format, arg);
-  va_end(arg);
-
-  return done;
-}
diff --git a/stdio/sscanf.c b/stdio/sscanf.c
deleted file mode 100644
index 33bc203577..0000000000
--- a/stdio/sscanf.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1991 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-
-/* Read formatted input from S, according to the format string FORMAT.  */
-/* VARARGS2 */
-int
-DEFUN(sscanf, (s, format), CONST char *s AND CONST char *format DOTS)
-{
-  va_list arg;
-  int done;
-
-  va_start(arg, format);
-  done = __vsscanf(s, format, arg);
-  va_end(arg);
-
-  return done;
-}
diff --git a/stdio/tempnam.c b/stdio/tempnam.c
deleted file mode 100644
index 14988a8656..0000000000
--- a/stdio/tempnam.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 1991, 1993 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-/* Generate a unique temporary filename using up to five characters of PFX
-   if it is not NULL.  The directory to put this file in is searched for
-   as follows: First the environment variable "TMPDIR" is checked.
-   If it contains the name of a writable directory, that directory is used.
-   If not and if DIR is not NULL, that value is checked.  If that fails,
-   P_tmpdir is tried and finally "/tmp".  The storage for the filename
-   is allocated by `malloc'.  */
-char *
-DEFUN(tempnam, (dir, pfx), CONST char *dir AND CONST char *pfx)
-{
-  size_t len;
-  register char *s;
-  register char *t = __stdio_gen_tempname(dir, pfx, 1, &len, (FILE **) NULL);
-
-  if (t == NULL)
-    return NULL;
-
-  s = (char *) malloc(len);
-  if (s == NULL)
-    return NULL;
-
-  (void) memcpy(s, t, len);
-  return s;
-}
diff --git a/stdio/temptest.c b/stdio/temptest.c
deleted file mode 100644
index 374719896a..0000000000
--- a/stdio/temptest.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <ansidecl.h>
-#include <stdio.h>
-#include <string.h>
-
-char *files[500];
-
-int
-main ()
-{
-  char *fn;
-  FILE *fp;
-  int i;
-
-  for (i = 0; i < 500; i++) {
-    fn = __stdio_gen_tempname((CONST char *) NULL,
-	"file", 0, (size_t *) NULL, (FILE **) NULL);
-    if (fn == NULL) {
-      printf ("__stdio_gen_tempname failed\n");
-      exit (1);
-    }
-    files[i] = strdup (fn);
-    printf ("file: %s\n", fn);
-    fp = fopen (fn, "w");
-    fclose (fp);
-  }
-
-  for (i = 0; i < 500; i++)
-    remove (files[i]);
-
-  exit (0);
-}
diff --git a/stdio/test-fseek.c b/stdio/test-fseek.c
deleted file mode 100644
index d56c669a54..0000000000
--- a/stdio/test-fseek.c
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <ansidecl.h>
-#include <stdio.h>
-
-#define TESTFILE "/tmp/test.dat"
-
-int
-main __P((void))
-{
-  FILE *fp;
-  int i, j;
-
-  puts ("\nFile seek test");
-  fp = fopen (TESTFILE, "w");
-  if (fp == NULL)
-    {
-      perror (TESTFILE);
-      return 1;
-    }
-
-  for (i = 0; i < 256; i++)
-    putc (i, fp);
-  if (freopen (TESTFILE, "r", fp) != fp)
-    {
-      perror ("Cannot open file for reading");
-      return 1;
-    }
-
-  for (i = 1; i <= 255; i++)
-    {
-      printf ("%3d\n", i);
-      fseek (fp, (long) -i, SEEK_END);
-      if ((j = getc (fp)) != 256 - i)
-	{
-	  printf ("SEEK_END failed %d\n", j);
-	  break;
-	}
-      if (fseek (fp, (long) i, SEEK_SET))
-	{
-	  puts ("Cannot SEEK_SET");
-	  break;
-	}
-      if ((j = getc (fp)) != i)
-	{
-	  printf ("SEEK_SET failed %d\n", j);
-	  break;
-	}
-      if (fseek (fp, (long) i, SEEK_SET))
-	{
-	  puts ("Cannot SEEK_SET");
-	  break;
-	}
-      if (fseek (fp, (long) (i >= 128 ? -128 : 128), SEEK_CUR))
-	{
-	  puts ("Cannot SEEK_CUR");
-	  break;
-	}
-      if ((j = getc (fp)) != (i >= 128 ? i - 128 : i + 128))
-	{
-	  printf ("SEEK_CUR failed %d\n", j);
-	  break;
-	}
-    }
-  fclose (fp);
-
-  puts ((i > 255) ? "Test succeeded." : "Test FAILED!");
-  return (i > 255) ? 0 : 1;
-}
diff --git a/stdio/test-fwrite.c b/stdio/test-fwrite.c
deleted file mode 100644
index cc6cdf038e..0000000000
--- a/stdio/test-fwrite.c
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-int
-main ()
-{
-  FILE *f = tmpfile ();
-  char obuf[99999], ibuf[sizeof obuf];
-  char *line;
-  size_t linesz;
-
-  if (! f)
-    {
-      perror ("tmpfile");
-      return 1;
-    }
-
-  if (fputs ("line\n", f) == EOF)
-    {
-      perror ("fputs");
-      return 1;
-    }
-
-  memset (obuf, 'z', sizeof obuf);
-  memset (ibuf, 'y', sizeof ibuf);
-  
-  if (fwrite (obuf, sizeof obuf, 1, f) != 1)
-    {
-      perror ("fwrite");
-      return 1;
-    }
-
-  rewind (f);
-
-  line = NULL;
-  linesz = 0;
-  if (getline (&line, &linesz, f) != 5)
-    {
-      perror ("getline");
-      return 1;
-    }
-  if (strcmp (line, "line\n"))
-    {
-      puts ("Lines differ.  Test FAILED!");
-      return 1;
-    }
-
-  if (fread (ibuf, sizeof ibuf, 1, f) != 1)
-    {
-      perror ("fread");
-      return 1;
-    }
-
-  if (memcmp (ibuf, obuf, sizeof ibuf))
-    {
-      puts ("Buffers differ.  Test FAILED!");
-      return 1;
-    }
-
-  asprintf (&line, "\
-GDB is free software and you are welcome to distribute copies of it\n\
- under certain conditions; type \"show copying\" to see the conditions.\n\
-There is absolutely no warranty for GDB; type \"show warranty\" for details.\n\
-");
-
-  puts ("Test succeeded.");
-  return 0;
-}
diff --git a/stdio/test-popen.c b/stdio/test-popen.c
deleted file mode 100644
index b452f3f63c..0000000000
--- a/stdio/test-popen.c
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <ansidecl.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-void
-DEFUN(write_data, (stream), FILE *stream)
-{
-  int i;
-  for (i=0; i<100; i++)
-    fprintf (stream, "%d\n", i);
-  if (ferror (stream))  {
-    fprintf (stderr, "Output to stream failed.\n");
-    exit (1);
-    }
-}
-
-void
-DEFUN(read_data, (stream), FILE *stream)
-{
-  int i, j;
-
-  for (i=0; i<100; i++)
-    {
-      if (fscanf (stream, "%d\n", &j) != 1 || j != i)
-	{
-	  if (ferror (stream))
-	    perror ("fscanf");
-	  puts ("Test FAILED!");
-	  exit (1);
-	}
-    }
-}
-
-int
-DEFUN_VOID(main)
-{
-  FILE *output, *input;
-  int wstatus, rstatus;
-
-  output = popen ("/bin/cat >/tmp/tstpopen.tmp", "w");
-  if (output == NULL)
-    {
-      perror ("popen");
-      puts ("Test FAILED!");
-      exit (1);
-    }
-  write_data (output);
-  wstatus = pclose (output);
-  printf ("writing pclose returned %d\n", wstatus);
-  input = popen ("/bin/cat /tmp/tstpopen.tmp", "r");
-  if (input == NULL)
-    {
-      perror ("/tmp/tstpopen.tmp");
-      puts ("Test FAILED!");
-      exit (1);
-    }
-  read_data (input);
-  rstatus = pclose (input);
-  printf ("reading pclose returned %d\n", rstatus);
-
-  puts (wstatus | rstatus  ? "Test FAILED!" : "Test succeeded.");
-  exit (wstatus | rstatus);
-}
-
-  
-
-  
diff --git a/stdio/test_rdwr.c b/stdio/test_rdwr.c
deleted file mode 100644
index f987f16cd4..0000000000
--- a/stdio/test_rdwr.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Copyright (C) 1991, 1992 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-int
-DEFUN(main, (argc, argv), int argc AND char **argv)
-{
-  static CONST char hello[] = "Hello, world.\n";
-  static CONST char replace[] = "Hewwo, world.\n";
-  static CONST size_t replace_from = 2, replace_to = 4;
-  char filename[FILENAME_MAX];
-  char *name = strrchr(*argv, '/');
-  char buf[BUFSIZ];
-  FILE *f;
-  int lose = 0;
-
-  if (name != NULL)
-    ++name;
-  else
-    name = *argv;
-
-  (void) sprintf(filename, "/tmp/%s.test", name);
-
-  f = fopen(filename, "w+");
-  if (f == NULL)
-    {
-      perror(filename);
-      exit(1);
-    }
-
-  (void) fputs(hello, f);
-  rewind(f);
-  (void) fgets(buf, sizeof(buf), f);
-  rewind(f);
-  (void) fputs(buf, f);
-  rewind(f);
-  {
-    register size_t i;
-    for (i = 0; i < replace_from; ++i)
-      {
-	int c = getc(f);
-	if (c == EOF)
-	  {
-	    printf("EOF at %u.\n", i);
-	    lose = 1;
-	    break;
-	  }
-	else if (c != hello[i])
-	  {
-	    printf("Got '%c' instead of '%c' at %u.\n",
-		   (unsigned char) c, hello[i], i);
-	    lose = 1;
-	    break;
-	  }
-      }
-  }
-
-  {
-    long int where = ftell(f);
-    if (where == replace_from)
-      {
-	register size_t i;
-	for (i = replace_from; i < replace_to; ++i)
-	  if (putc(replace[i], f) == EOF)
-	    {
-	      printf("putc('%c') got %s at %u.\n",
-		     replace[i], strerror(errno), i);
-	      lose = 1;
-	      break;
-	    }
-      }
-    else if (where == -1L)
-      {
-	printf("ftell got %s (should be at %u).\n",
-	       strerror(errno), replace_from);
-	lose = 1;
-      }
-    else
-      {
-	printf("ftell returns %u; should be %u.\n", where, replace_from);
-	lose = 1;
-      }
-  }
-
-  if (!lose)
-    {
-      rewind(f);
-      if (fgets(buf, sizeof(buf), f) == NULL)
-	{
-	  printf("fgets got %s.\n", strerror(errno));
-	  lose = 1;
-	}
-      else if (strcmp(buf, replace))
-	{
-	  printf("Read \"%s\" instead of \"%s\".\n", buf, replace);
-	  lose = 1;
-	}
-    }
-
-  if (lose)
-    printf("Test FAILED!  Losing file is \"%s\".\n", filename);
-  else
-    {
-      (void) remove(filename);
-      puts("Test succeeded.");
-    }
-
-  exit(lose ? EXIT_FAILURE : EXIT_SUCCESS);
-}
diff --git a/stdio/tmpfile.c b/stdio/tmpfile.c
deleted file mode 100644
index dfe11ada50..0000000000
--- a/stdio/tmpfile.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (C) 1991, 1993 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdio.h>
-
-
-/* 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 *
-DEFUN_VOID(tmpfile)
-{
-  char *filename;
-  FILE *f;
-
-  filename = __stdio_gen_tempname ((char *) NULL, "tmpf", 0,
-				   (size_t *) NULL, &f);
-  if (filename == NULL)
-    return NULL;
-
-  /* Note that this relies on the Unix semantics that
-     a file is not really removed until it is closed.  */
-  (void) remove (filename);
-
-  return f;
-}
diff --git a/stdio/tmpnam.c b/stdio/tmpnam.c
deleted file mode 100644
index 88dd0a4ca5..0000000000
--- a/stdio/tmpnam.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (C) 1991, 1993 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-
-/* Generate a unique filename in P_tmpdir.  */
-char *
-DEFUN(tmpnam, (s), register char *s)
-{
-  register char *t = __stdio_gen_tempname((CONST char *) NULL,
-					  (CONST char *) NULL, 0,
-					  (size_t *) NULL, (FILE **) NULL);
-
-  if (t == NULL)
-    return NULL;
-
-  if (s != NULL)
-    (void) strcpy(s, t);
-  else
-    s = t;
-
-  return s;
-}
diff --git a/stdio/tst-fileno.c b/stdio/tst-fileno.c
deleted file mode 100644
index 81945f7b44..0000000000
--- a/stdio/tst-fileno.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1994 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdio.h>
-#include <unistd.h>
-
-static int
-DEFUN(check, (name, stream, fd), CONST char *name AND FILE *stream AND int fd)
-{
-  int sfd = fileno (stream);
-  printf ("(fileno (%s) = %d) %c= %d\n", name, sfd, sfd == fd ? '=' : '!', fd);
-  return sfd != fd;
-}
-
-int
-DEFUN_VOID(main)
-{
-  exit (check ("stdin", stdin, STDIN_FILENO) ||
-	check ("stdout", stdout, STDOUT_FILENO) ||
-	check ("stderr", stderr, STDERR_FILENO));
-}
diff --git a/stdio/tst-printf.c b/stdio/tst-printf.c
deleted file mode 100644
index c177da18b2..0000000000
--- a/stdio/tst-printf.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993, 1995 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#ifdef	BSD
-#include </usr/include/stdio.h>
-#define EXIT_SUCCESS 0
-#else
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-#include <float.h>
-
-
-void
-DEFUN(fmtchk, (fmt), CONST char *fmt)
-{
-  (void) fputs(fmt, stdout);
-  (void) printf(":\t`");
-  (void) printf(fmt, 0x12);
-  (void) printf("'\n");
-}
-
-void
-DEFUN(fmtst1chk, (fmt), CONST char *fmt)
-{
-  (void) fputs(fmt, stdout);
-  (void) printf(":\t`");
-  (void) printf(fmt, 4, 0x12);
-  (void) printf("'\n");
-}
-
-void
-DEFUN(fmtst2chk, (fmt), CONST char *fmt)
-{
-  (void) fputs(fmt, stdout);
-  (void) printf(":\t`");
-  (void) printf(fmt, 4, 4, 0x12);
-  (void) printf("'\n");
-}
-
-/* This page is covered by the following copyright: */
-
-/* (C) Copyright C E Chew
- *
- * Feel free to copy, use and distribute this software provided:
- *
- *	1. you do not pretend that you wrote it
- *	2. you leave this copyright notice intact.
- */
-
-/*
- * Extracted from exercise.c for glibc-1.05 bug report by Bruce Evans.
- */
-
-#define DEC -123
-#define INT 255
-#define UNS (~0)
-
-/* Formatted Output Test
- *
- * This exercises the output formatting code.
- */
-
-void
-DEFUN_VOID(fp_test)
-{
-  int i, j, k, l;
-  char buf[7];
-  char *prefix = buf;
-  char tp[20];
-
-  puts("\nFormatted output test");
-  printf("prefix  6d      6o      6x      6X      6u\n");
-  strcpy(prefix, "%");
-  for (i = 0; i < 2; i++) {
-    for (j = 0; j < 2; j++) {
-      for (k = 0; k < 2; k++) {
-	for (l = 0; l < 2; l++) {
-	  strcpy(prefix, "%");
-	  if (i == 0) strcat(prefix, "-");
-	  if (j == 0) strcat(prefix, "+");
-	  if (k == 0) strcat(prefix, "#");
-	  if (l == 0) strcat(prefix, "0");
-	  printf("%5s |", prefix);
-	  strcpy(tp, prefix);
-	  strcat(tp, "6d |");
-	  printf(tp, DEC);
-	  strcpy(tp, prefix);
-	  strcat(tp, "6o |");
-	  printf(tp, INT);
-	  strcpy(tp, prefix);
-	  strcat(tp, "6x |");
-	  printf(tp, INT);
-	  strcpy(tp, prefix);
-	  strcat(tp, "6X |");
-	  printf(tp, INT);
-	  strcpy(tp, prefix);
-	  strcat(tp, "6u |");
-	  printf(tp, UNS);
-	  printf("\n");
-	}
-      }
-    }
-  }
-  printf("%10s\n", (char *) NULL);
-  printf("%-10s\n", (char *) NULL);
-}
-
-int
-DEFUN_VOID(main)
-{
-  static char shortstr[] = "Hi, Z.";
-  static char longstr[] = "Good morning, Doctor Chandra.  This is Hal.  \
-I am ready for my first lesson today.";
-
-  fmtchk("%.4x");
-  fmtchk("%04x");
-  fmtchk("%4.4x");
-  fmtchk("%04.4x");
-  fmtchk("%4.3x");
-  fmtchk("%04.3x");
-
-  fmtst1chk("%.*x");
-  fmtst1chk("%0*x");
-  fmtst2chk("%*.*x");
-  fmtst2chk("%0*.*x");
-
-#ifndef	BSD
-  printf("bad format:\t\"%z\"\n");
-  printf("nil pointer (padded):\t\"%10p\"\n", (PTR) NULL);
-#endif
-
-  printf("decimal negative:\t\"%d\"\n", -2345);
-  printf("octal negative:\t\"%o\"\n", -2345);
-  printf("hex negative:\t\"%x\"\n", -2345);
-  printf("long decimal number:\t\"%ld\"\n", -123456L);
-  printf("long octal negative:\t\"%lo\"\n", -2345L);
-  printf("long unsigned decimal number:\t\"%lu\"\n", -123456L);
-  printf("zero-padded LDN:\t\"%010ld\"\n", -123456L);
-  printf("left-adjusted ZLDN:\t\"%-010ld\"\n", -123456);
-  printf("space-padded LDN:\t\"%10ld\"\n", -123456L);
-  printf("left-adjusted SLDN:\t\"%-10ld\"\n", -123456L);
-
-  printf("zero-padded string:\t\"%010s\"\n", shortstr);
-  printf("left-adjusted Z string:\t\"%-010s\"\n", shortstr);
-  printf("space-padded string:\t\"%10s\"\n", shortstr);
-  printf("left-adjusted S string:\t\"%-10s\"\n", shortstr);
-  printf("null string:\t\"%s\"\n", (char *)NULL);
-  printf("limited string:\t\"%.22s\"\n", longstr);
-
-  printf("e-style >= 1:\t\"%e\"\n", 12.34);
-  printf("e-style >= .1:\t\"%e\"\n", 0.1234);
-  printf("e-style < .1:\t\"%e\"\n", 0.001234);
-  printf("e-style big:\t\"%.60e\"\n", 1e20);
-  printf ("e-style == .1:\t\"%e\"\n", 0.1);
-  printf("f-style >= 1:\t\"%f\"\n", 12.34);
-  printf("f-style >= .1:\t\"%f\"\n", 0.1234);
-  printf("f-style < .1:\t\"%f\"\n", 0.001234);
-  printf("g-style >= 1:\t\"%g\"\n", 12.34);
-  printf("g-style >= .1:\t\"%g\"\n", 0.1234);
-  printf("g-style < .1:\t\"%g\"\n", 0.001234);
-  printf("g-style big:\t\"%.60g\"\n", 1e20);
-
-  printf (" %6.5f\n", .099999999860301614);
-  printf (" %6.5f\n", .1);
-  printf ("x%5.4fx\n", .5);
-
-  printf ("%#03x\n", 1);
-
-  {
-    double d = FLT_MIN;
-    int niter = 17;
-    
-    while (niter-- != 0)
-      printf ("%.17e\n", d / 2);
-    fflush (stdout);
-  }
-
-  printf ("%15.5e\n", 4.9406564584124654e-324);
-
-#define FORMAT "|%12.4f|%12.4e|%12.4g|\n"
-  printf (FORMAT, 0.0, 0.0, 0.0);
-  printf (FORMAT, 1.0, 1.0, 1.0);
-  printf (FORMAT, -1.0, -1.0, -1.0);
-  printf (FORMAT, 100.0, 100.0, 100.0);
-  printf (FORMAT, 1000.0, 1000.0, 1000.0);
-  printf (FORMAT, 10000.0, 10000.0, 10000.0);
-  printf (FORMAT, 12345.0, 12345.0, 12345.0);
-  printf (FORMAT, 100000.0, 100000.0, 100000.0);
-  printf (FORMAT, 123456.0, 123456.0, 123456.0);
-#undef	FORMAT
-
-  {
-    char buf[20];
-    printf ("snprintf (\"%%30s\", \"foo\") == %d, \"%.*s\"\n",
-	    snprintf (buf, sizeof (buf), "%30s", "foo"), sizeof (buf), buf);
-  }
-
-  fp_test ();
-
-  printf ("%e should be 1.234568e+06\n", 1234567.8);
-  printf ("%f should be 1234567.800000\n", 1234567.8);
-  printf ("%g should be 1.23457e+06\n", 1234567.8);
-  printf ("%g should be 123.456\n", 123.456);
-  printf ("%g should be 1e+06\n", 1000000.0);
-  printf ("%g should be 10\n", 10.0);
-  printf ("%g should be 0.02\n", 0.02);
-
-  {
-    double x=1.0;
-    printf("%.17f\n",(1.0/x/10.0+1.0)*x-x);
-  }
-
-  puts ("--- Should be no further output. ---");
-  rfg1 ();
-  rfg2 ();
-
-  exit(EXIT_SUCCESS);
-}
-
-rfg1 ()
-{
-  char buf[100];
-
-  sprintf (buf, "%5.s", "xyz");
-  if (strcmp (buf, "     ") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "     ");
-  sprintf (buf, "%5.f", 33.3);
-  if (strcmp (buf, "   33") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "   33");
-  sprintf (buf, "%8.e", 33.3e7);
-  if (strcmp (buf, "   3e+08") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "   3e+08");
-  sprintf (buf, "%8.E", 33.3e7);
-  if (strcmp (buf, "   3E+08") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "   3E+08");
-  sprintf (buf, "%.g", 33.3);
-  if (strcmp (buf, "3e+01") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "3e+01");
-  sprintf (buf, "%.G", 33.3);
-  if (strcmp (buf, "3E+01") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "3E+01");
-  return 0;
-}
-
-rfg2 ()
-{
-  int prec;
-  char buf[100];
-
-  prec = 0;
-  sprintf (buf, "%.*g", prec, 3.3);
-  if (strcmp (buf, "3") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "3");
-  prec = 0;
-  sprintf (buf, "%.*G", prec, 3.3);
-  if (strcmp (buf, "3") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "3");
-  prec = 0;
-  sprintf (buf, "%7.*G", prec, 3.33);
-  if (strcmp (buf, "      3") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "      3");
-  prec = 3;
-  sprintf (buf, "%04.*o", prec, 33);
-  if (strcmp (buf, " 041") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, " 041");
-  prec = 7;
-  sprintf (buf, "%09.*u", prec, 33);
-  if (strcmp (buf, "  0000033") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, "  0000033");
-  prec = 3;
-  sprintf (buf, "%04.*x", prec, 33);
-  if (strcmp (buf, " 021") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, " 021");
-  prec = 3;
-  sprintf (buf, "%04.*X", prec, 33);
-  if (strcmp (buf, " 021") != 0)
-    printf ("got: '%s', expected: '%s'\n", buf, " 021");
-  return 0;
-}
diff --git a/stdio/tstgetln.c b/stdio/tstgetln.c
deleted file mode 100644
index ea8ea817da..0000000000
--- a/stdio/tstgetln.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 1992 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdio.h>
-
-int
-DEFUN_VOID(main)
-{
-  char *buf = NULL;
-  size_t size = 0;
-  ssize_t len;
-
-  while ((len = getline (&buf, &size, stdin)) != -1)
-    {
-      printf ("bufsize %u; read %d: ", size, len);
-      if (fwrite (buf, len, 1, stdout) != 1)
-	{
-	  perror ("fwrite");
-	  return 1;
-	}
-    }
-
-  if (ferror (stdin))
-    {
-      perror ("getline");
-      return 1;
-    }
-
-  return 0;
-}
diff --git a/stdio/tstgetln.input b/stdio/tstgetln.input
deleted file mode 100644
index d04ed5bf78..0000000000
--- a/stdio/tstgetln.input
+++ /dev/null
@@ -1,3 +0,0 @@
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
-z
diff --git a/stdio/tstscanf.c b/stdio/tstscanf.c
deleted file mode 100644
index 53d4b0ac47..0000000000
--- a/stdio/tstscanf.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Copyright (C) 1991, 1992 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#ifdef	BSD
-#include </usr/include/stdio.h>
-#else
-#include <stdio.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-
-
-int
-DEFUN(main, (argc, argv), int argc AND char **argv)
-{
-  char buf[BUFSIZ];
-  FILE *in = stdin, *out = stdout;
-
-  if (argc == 2 && !strcmp (argv[1], "-opipe"))
-    {
-      out = popen ("/bin/cat", "w");
-      if (out == NULL)
-	{
-	  perror ("popen: /bin/cat");
-	  exit (EXIT_FAILURE);
-	}
-    }
-  else if (argc == 3 && !strcmp (argv[1], "-ipipe"))
-    {
-      sprintf (buf, "/bin/cat %s", argv[2]);
-      in = popen (buf, "r");
-    }
-
-  {
-    char name[50];
-    fprintf (out,
-	     "sscanf (\"thompson\", \"%%s\", name) == %d, name == \"%s\"\n",
-	     sscanf ("thompson", "%s", name),
-	     name);
-  }
-
-  fputs ("Testing scanf (vfscanf)\n", out);
-
-  fputs ("Test 1:\n", out);
-  {
-    int n, i;
-    float x;
-    char name[50];
-    n = fscanf (in, "%d%f%s", &i, &x, name);
-    fprintf (out, "n = %d, i = %d, x = %f, name = \"%.50s\"\n",
-	     n, i, x, name);
-  }
-  fprintf (out, "Residual: \"%s\"\n", fgets (buf, sizeof (buf), in));
-  fputs ("Test 2:\n", out);
-  {
-    int i;
-    float x;
-    char name[50];
-    (void) fscanf (in, "%2d%f%*d %[0123456789]", &i, &x, name);
-    fprintf (out, "i = %d, x = %f, name = \"%.50s\"\n", i, x, name);
-  }
-  fprintf (out, "Residual: \"%s\"\n", fgets (buf, sizeof (buf), in));
-  fputs ("Test 3:\n", out);
-  {
-    float quant;
-    char units[21], item[21];
-    while (!feof (in) && !ferror (in))
-      {
-	int count;
-	quant = 0.0;
-	units[0] = item[0] = '\0';
-	count = fscanf (in, "%f%20s of %20s", &quant, units, item);
-	(void) fscanf (in, "%*[^\n]");
-	fprintf (out, "count = %d, quant = %f, item = %.21s, units = %.21s\n",
-		 count, quant, item, units);
-      }
-  }
-  fprintf (out, "Residual: \"%s\"\n", fgets (buf, sizeof (buf), in));
-
-  if (out != stdout)
-    pclose (out);
-
-  exit(EXIT_SUCCESS);
-}
diff --git a/stdio/tstscanf.input b/stdio/tstscanf.input
deleted file mode 100644
index 26158652dd..0000000000
--- a/stdio/tstscanf.input
+++ /dev/null
@@ -1,7 +0,0 @@
-25 54.32E-1 thompson
-56789 0123 56a72
-2 quarts of oil
--12.8degrees Celsius
-lots of luck
-10.0LBS      of       fertilizer
-100ergs of energy
diff --git a/stdio/vasprintf.c b/stdio/vasprintf.c
deleted file mode 100644
index d2ad6b1da6..0000000000
--- a/stdio/vasprintf.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright (C) 1991, 1992 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stddef.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-
-/* Enlarge STREAM's buffer.  */
-static void
-DEFUN(enlarge_buffer, (stream, c),
-      register FILE *stream AND int c)
-{
-  ptrdiff_t bufp_offset = stream->__bufp - stream->__buffer;
-  char *newbuf;
-
-  stream->__bufsize += 100;
-  newbuf = (char *) realloc ((PTR) stream->__buffer, stream->__bufsize);
-  if (newbuf == NULL)
-    {
-      free ((PTR) stream->__buffer);
-      stream->__buffer = stream->__bufp
-	= stream->__put_limit = stream->__get_limit = NULL;
-      stream->__error = 1;
-    }
-  else
-    {
-      stream->__buffer = newbuf;
-      stream->__bufp = stream->__buffer + bufp_offset;
-      stream->__get_limit = stream->__put_limit;
-      stream->__put_limit = stream->__buffer + stream->__bufsize;
-      if (c != EOF)
-	*stream->__bufp++ = (unsigned char) c;
-    }
-}
-
-/* Write formatted output from FORMAT to a string which is
-   allocated with malloc and stored in *STRING_PTR.  */
-int
-DEFUN(vasprintf, (string_ptr, format, args),
-      char **string_ptr AND CONST char *format AND va_list args)
-{
-  FILE f;
-  int done;
-
-  memset ((PTR) &f, 0, sizeof (f));
-  f.__magic = _IOMAGIC;
-  f.__bufsize = 100;
-  f.__buffer = (char *) malloc (f.__bufsize);
-  if (f.__buffer == NULL)
-    return -1;
-  f.__bufp = f.__buffer;
-  f.__put_limit = f.__buffer + f.__bufsize;
-  f.__mode.__write = 1;
-  f.__room_funcs.__output = enlarge_buffer;
-  f.__seen = 1;
-
-  done = vfprintf (&f, format, args);
-  if (done < 0)
-    return done;
-
-  *string_ptr = realloc (f.__buffer, (f.__bufp - f.__buffer) + 1);
-  if (*string_ptr == NULL)
-    *string_ptr = f.__buffer;
-  (*string_ptr)[f.__bufp - f.__buffer] = '\0';
-  return done;
-}
diff --git a/stdio/vdprintf.c b/stdio/vdprintf.c
deleted file mode 100644
index 9df4e537bc..0000000000
--- a/stdio/vdprintf.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-
-
-/* Write formatted output to file descriptor D according to the format string
-   FORMAT, using the argument list in ARG.  */
-int
-DEFUN(vdprintf, (d, format, arg),
-      int d AND CONST char *format AND va_list arg)
-{
-  int done;
-  FILE f;
-
-  /* Create an unbuffered stream talking to D on the stack.  */
-  memset ((PTR) &f, 0, sizeof(f));
-  f.__magic = _IOMAGIC;
-  f.__mode.__write = 1;
-  f.__cookie = (PTR) (long int) d; /* Casting to long quiets GCC on Alpha.  */
-  f.__room_funcs = __default_room_functions;
-  f.__io_funcs = __default_io_functions;
-  f.__seen = 1;
-  f.__userbuf = 1;
-
-  /* vfprintf will use a buffer on the stack for the life of the call,
-     and flush it when finished.  */
-  done = vfprintf (&f, format, arg);
-
-  return done;
-}
diff --git a/stdio/vfprintf.c b/stdio/vfprintf.c
deleted file mode 100644
index 63a5148463..0000000000
--- a/stdio/vfprintf.c
+++ /dev/null
@@ -1,858 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993, 1994, 1995 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ctype.h>
-#include <errno.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <printf.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <printf.h>
-#include <stddef.h>
-#include "_itoa.h"
-#include "../locale/localeinfo.h"
-
-/* Include the shared code for parsing the format string.  */
-#include "printf-parse.h"
-
-
-/* This function from the GNU C library is also used in libio.
-   To compile for use in libio, compile with -DUSE_IN_LIBIO.  */
-
-#ifdef USE_IN_LIBIO
-/* This code is for use in libio.  */
-#include <libioP.h>
-#define PUT(f, s, n)	_IO_sputn (f, s, n)
-#define PAD(padchar)							      \
-  if (specs[cnt].info.width > 0)					      \
-    done += _IO_padn (s, padchar, specs[cnt].info.width)
-#define PUTC(c, f)	_IO_putc (c, f)
-#define vfprintf	_IO_vfprintf
-#define size_t		_IO_size_t
-#define FILE		_IO_FILE
-#define va_list		_IO_va_list
-#undef	BUFSIZ
-#define BUFSIZ		_IO_BUFSIZ
-#define ARGCHECK(s, format)						      \
-  do									      \
-    {									      \
-      /* Check file argument for consistence.  */			      \
-      CHECK_FILE (s, -1);						      \
-      if (s->_flags & _IO_NO_WRITES || format == NULL)			      \
-	{								      \
-	  MAYBE_SET_EINVAL;						      \
-	  return -1;							      \
-	}								      \
-    } while (0)
-#define UNBUFFERED_P(s)	((s)->_IO_file_flags & _IO_UNBUFFERED)
-#else /* ! USE_IN_LIBIO */
-/* This code is for use in the GNU C library.  */
-#include <stdio.h>
-#define PUTC(c, f)	putc (c, f)
-#define PUT(f, s, n)	fwrite (s, 1, n, f)
-ssize_t __printf_pad __P ((FILE *, char pad, size_t n));
-#define PAD(padchar)							      \
-  if (specs[cnt].info.width > 0)					      \
-    { if (__printf_pad (s, padchar, specs[cnt].info.width) == -1)	      \
-	return -1; else done += specs[cnt].info.width; }
-#define ARGCHECK(s, format) \
-  do									      \
-    {									      \
-      /* Check file argument for consistence.  */			      \
-      if (!__validfp(s) || !s->__mode.__write || format == NULL)	      \
-	{								      \
-	  errno = EINVAL;						      \
-	  return -1;							      \
-	}								      \
-      if (!s->__seen)							      \
-	{								      \
-	  if (__flshfp (s, EOF) == EOF)					      \
-	    return -1;							      \
-	}								      \
-    } while (0)
-#define UNBUFFERED_P(s)	((s)->__buffer == NULL)
-#endif /* USE_IN_LIBIO */
-
-
-#define	outchar(x)							      \
-  do									      \
-    {									      \
-      register const int outc = (x);					      \
-      if (putc (outc, s) == EOF)					      \
-	return -1;							      \
-      else								      \
-	++done;								      \
-    } while (0)
-
-#define outstring(string, len)						      \
-  do									      \
-    {									      \
-      if (len > 20)							      \
-	{								      \
-	  if (PUT (s, string, len) != len)				      \
-	    return -1;							      \
-	  done += len;							      \
-	}								      \
-      else								      \
-	{								      \
-	  register const char *cp = string;				      \
-	  register int l = len;						      \
-	  while (l-- > 0)						      \
-	    outchar (*cp++);						      \
-	}								      \
-    } while (0)
-
-/* Helper function to provide temporary buffering for unbuffered streams.  */
-static int buffered_vfprintf __P ((FILE *stream, const char *fmt, va_list));
-
-static printf_function printf_unknown;
-
-extern printf_function **__printf_function_table;
-
-static char *group_number __P ((char *, char *, const char *, wchar_t));
-
-
-int
-vfprintf (s, format, ap)
-    register FILE *s;
-    const char *format;
-    va_list ap;
-{
-  /* The character used as thousands separator.  */
-  wchar_t thousands_sep;
-
-  /* The string describing the size of groups of digits.  */
-  const char *grouping;
-
-  /* Array with information about the needed arguments.  This has to be
-     dynamically extendable.  */
-  size_t nspecs;
-  size_t nspecs_max;
-  struct printf_spec *specs;
-
-  /* The number of arguments the format string requests.  This will
-     determine the size of the array needed to store the argument
-     attributes.  */
-  size_t nargs;
-  int *args_type;
-  union printf_arg *args_value;
-
-  /* Positional parameters refer to arguments directly.  This could also
-     determine the maximum number of arguments.  Track the maximum number.  */
-  size_t max_ref_arg;
-
-  /* End of leading constant string.  */
-  const char *lead_str_end;
-
-  /* Number of characters written.  */
-  register size_t done = 0;
-
-  /* Running pointer through format string.  */
-  const char *f;
-
-  /* Just a counter.  */
-  int cnt;
-
-  ARGCHECK (s, format);
-
-  if (UNBUFFERED_P (s))
-    /* Use a helper function which will allocate a local temporary buffer
-       for the stream and then call us again.  */
-    return buffered_vfprintf (s, format, ap);
-
-  /* Reset multibyte characters to their initial state.  */
-  (void) mblen ((char *) NULL, 0);
-
-  /* Figure out the thousands separator character.  */
-  if (mbtowc (&thousands_sep, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP),
-              strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0)
-    thousands_sep = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
-  grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
-  if (*grouping == '\0' || *grouping == CHAR_MAX || thousands_sep == L'\0')
-    grouping = NULL;
-
-  nspecs_max = 32;		/* A more or less arbitrary start value.  */
-  specs = alloca (nspecs_max * sizeof (struct printf_spec));
-  nspecs = 0;
-  nargs = 0;
-  max_ref_arg = 0;
-
-  /* Find the first format specifier.  */
-  lead_str_end = find_spec (format);
-
-  for (f = lead_str_end; *f != '\0'; f = specs[nspecs++].next_fmt)
-    {
-      if (nspecs >= nspecs_max)
-	{
-	  /* Extend the array of format specifiers.  */
-	  struct printf_spec *old = specs;
-
-	  nspecs_max *= 2;
-	  specs = alloca (nspecs_max * sizeof (struct printf_spec));
-	  if (specs == &old[nspecs])
-	    /* Stack grows up, OLD was the last thing allocated; extend it.  */
-	    nspecs_max += nspecs_max / 2;
-	  else
-	    {
-	      /* Copy the old array's elements to the new space.  */
-	      memcpy (specs, old, nspecs * sizeof (struct printf_spec));
-	      if (old == &specs[nspecs])
-		/* Stack grows down, OLD was just below the new SPECS.
-		   We can use that space when the new space runs out.  */
-		nspecs_max += nspecs_max / 2;
-	    }
-	}
-
-      /* Parse the format specifier.  */
-      nargs += parse_one_spec (f, nargs, &specs[nspecs], &max_ref_arg);
-    }
-
-  /* Determine the number of arguments the format string consumes.  */
-  nargs = MAX (nargs, max_ref_arg);
-
-  /* Allocate memory for the argument descriptions.  */
-  args_type = alloca (nargs * sizeof (int));
-  args_value = alloca (nargs * sizeof (union printf_arg));
-
-  /* XXX Could do sanity check here:
-     Initialize args_type elts to zero.
-     If any is still zero after this loop, format is invalid.  */
-
-  /* Fill in the types of all the arguments.  */
-  for (cnt = 0; cnt < nspecs; ++cnt)
-    {
-      /* If the width is determined by an argument this is an int.  */ 
-      if (specs[cnt].width_arg != -1)
-	args_type[specs[cnt].width_arg] = PA_INT;
-
-      /* If the precision is determined by an argument this is an int.  */ 
-      if (specs[cnt].prec_arg != -1)
-	args_type[specs[cnt].prec_arg] = PA_INT;
-
-      switch (specs[cnt].ndata_args)
-	{
-	case 0:			/* No arguments.  */
-	  break;
-	case 1:			/* One argument; we already have the type.  */
-	  args_type[specs[cnt].data_arg] = specs[cnt].data_arg_type;
-	  break;
-	default:
-	  /* We have more than one argument for this format spec.  We must
-	     call the arginfo function again to determine all the types.  */
-	  (void) (*__printf_arginfo_table[specs[cnt].info.spec])
-	    (&specs[cnt].info,
-	     specs[cnt].ndata_args, &args_type[specs[cnt].data_arg]);
-	  break;
-	}
-    }
-
-  /* Now we know all the types and the order.  Fill in the argument values.  */
-  for (cnt = 0; cnt < nargs; ++cnt)
-    switch (args_type[cnt])
-      {
-#define T(tag, mem, type)						      \
-      case tag:								      \
-	args_value[cnt].mem = va_arg (ap, type);			      \
-	break
-
-	T (PA_CHAR, pa_char, int); /* Promoted.  */
-	T (PA_INT|PA_FLAG_SHORT, pa_short_int, int); /* Promoted.  */
-	T (PA_INT, pa_int, int);
-	T (PA_INT|PA_FLAG_LONG, pa_long_int, long int);
-	T (PA_INT|PA_FLAG_LONG_LONG, pa_long_long_int, long long int);
-	T (PA_FLOAT, pa_float, double);	/* Promoted.  */
-	T (PA_DOUBLE, pa_double, double);
-	T (PA_DOUBLE|PA_FLAG_LONG_DOUBLE, pa_long_double, long double);
-	T (PA_STRING, pa_string, const char *);
-	T (PA_POINTER, pa_pointer, void *);
-#undef T
-      default:
-	if ((args_type[cnt] & PA_FLAG_PTR) != 0)
-	  args_value[cnt].pa_pointer = va_arg (ap, void *);
-	break;
-      }
-
-  /* Write the literal text before the first format.  */
-  outstring (format, lead_str_end - format);
-
-  /* Now walk through all format specifiers and process them.  */
-  for (cnt = 0; cnt < nspecs; ++cnt)
-    {
-      printf_function *function; /* Auxiliary function to do output.  */
-      int is_neg;		/* Decimal integer is negative.  */
-      int base;			/* Base of a number to be written.  */
-      unsigned long long int num; /* Integral number to be written.  */
-      const char *str;		/* String to be written.  */
-      char errorbuf[1024];      /* Buffer sometimes used by %m.  */
-
-      if (specs[cnt].width_arg != -1)
-	{
-	  /* Extract the field width from an argument.  */
-	  specs[cnt].info.width = args_value[specs[cnt].width_arg].pa_int;
-
-	  if (specs[cnt].info.width < 0)
-	    /* If the width value is negative left justification is selected
-	       and the value is taken as being positive.  */
-	    {
-	      specs[cnt].info.width = -specs[cnt].info.width;
-	      specs[cnt].info.left = 1;
-	    }
-	}
-
-      if (specs[cnt].prec_arg != -1)
-	{
-	  /* Extract the precision from an argument.  */
-	  specs[cnt].info.prec = args_value[specs[cnt].prec_arg].pa_int;
-
-	  if (specs[cnt].info.prec < 0)
-	    /* If the precision is negative the precision is omitted.  */
-	    specs[cnt].info.prec = -1;
-	}
-
-      /* Check for a user-defined handler for this spec.  */
-      function = (__printf_function_table == NULL ? NULL :
-                  __printf_function_table[specs[cnt].info.spec]);
-
-      if (function != NULL)
-      use_function:		/* Built-in formats with helpers use this.  */
-	{
-	  int function_done;
-	  unsigned int i;
-	  const void *ptr[specs[cnt].ndata_args];
-
-	  /* Fill in an array of pointers to the argument values.  */
-	  for (i = 0; i < specs[cnt].ndata_args; ++i)
-	    ptr[i] = &args_value[specs[cnt].data_arg + i];
-
-	  /* Call the function.  */
-	  function_done = (*function) (s, &specs[cnt].info, ptr);
-
-	  /* If an error occured don't do any further work.  */
-	  if (function_done < 0)
-	    return -1;
-
-	  done += function_done;
-	}
-      else
-	switch (specs[cnt].info.spec)
-	  {
-	  case '%':
-	    /* Write a literal "%".  */
-	    outchar ('%');
-	    break;
-	  case 'i':
-	  case 'd':
-	    {
-	      long long int signed_num;
-
-	      /* Decimal integer.  */
-	      base = 10;
-	      if (specs[cnt].info.is_longlong)
-		signed_num = args_value[specs[cnt].data_arg].pa_long_long_int;
-	      else if (specs[cnt].info.is_long)
-		signed_num = args_value[specs[cnt].data_arg].pa_long_int;
-	      else if (!specs[cnt].info.is_short)
-		signed_num = args_value[specs[cnt].data_arg].pa_int;
-	      else
-		signed_num = args_value[specs[cnt].data_arg].pa_short_int;
-
-	      is_neg = signed_num < 0;
-	      num = is_neg ? (- signed_num) : signed_num;
-	      goto number;
-	    }
-
-	  case 'u':
-	    /* Decimal unsigned integer.  */
-            base = 10;
-            goto unsigned_number;
-
-	  case 'o':
-            /* Octal unsigned integer.  */
-            base = 8;
-            goto unsigned_number;
-
-          case 'X':
-            /* Hexadecimal unsigned integer.  */
-          case 'x':
-            /* Hex with lower-case digits.  */
-            base = 16;
-
-	  unsigned_number:
-            /* Unsigned number of base BASE.  */
-
-            if (specs[cnt].info.is_longlong)
-	      num = args_value[specs[cnt].data_arg].pa_u_long_long_int;
-            else if (specs[cnt].info.is_long)
-	      num = args_value[specs[cnt].data_arg].pa_u_long_int;
-            else if (!specs[cnt].info.is_short)
-	      num = args_value[specs[cnt].data_arg].pa_u_int;
-            else
-	      num = args_value[specs[cnt].data_arg].pa_u_short_int;
-
-            /* ANSI only specifies the `+' and
-               ` ' flags for signed conversions.  */
-            is_neg = 0;
-	    specs[cnt].info.showsign = 0;
-	    specs[cnt].info.space = 0;
-
-	  number:
-	    /* Number of base BASE.  */
-            {
-              char work[BUFSIZ];
-              char *const workend = &work[sizeof(work) - 1];
-              register char *w;
-
-              /* Supply a default precision if none was given.  */
-              if (specs[cnt].info.prec == -1)
-                specs[cnt].info.prec = 1;
-
-              /* Put the number in WORK.  */
-              w = _itoa (num, workend + 1, base, specs[cnt].info.spec == 'X');
-	      w -= 1;
-              if (specs[cnt].info.group && grouping)
-                w = group_number (w, workend, grouping, thousands_sep);
-              specs[cnt].info.width -= workend - w;
-              specs[cnt].info.prec -= workend - w;
-
-              if (num != 0 && specs[cnt].info.alt && base == 8
-		  && specs[cnt].info.prec <= 0)
-                {
-		  /* Add octal marker.  */
-                  *w-- = '0';
-                  --specs[cnt].info.width;
-                }
-
-              if (specs[cnt].info.prec > 0)
-                {
-		  /* Add zeros to the precision.  */
-                  specs[cnt].info.width -= specs[cnt].info.prec;
-                  while (specs[cnt].info.prec-- > 0)
-                    *w-- = '0';
-                }
-
-              if (num != 0 && specs[cnt].info.alt && base == 16)
-		/* Account for 0X hex marker.  */
-                specs[cnt].info.width -= 2;
-
-              if (is_neg || specs[cnt].info.showsign || specs[cnt].info.space)
-                --specs[cnt].info.width;
-
-              if (!specs[cnt].info.left && specs[cnt].info.pad == ' ')
-                PAD (' ');
-
-              if (is_neg)
-                outchar ('-');
-              else if (specs[cnt].info.showsign)
-                outchar ('+');
-              else if (specs[cnt].info.space)
-                outchar (' ');
-
-              if (num != 0 && specs[cnt].info.alt && base == 16)
-                {
-                  outchar ('0');
-                  outchar (specs[cnt].info.spec);
-                }
-
-              if (!specs[cnt].info.left && specs[cnt].info.pad == '0')
-                PAD ('0');
-
-              /* Write the number.  */
-              while (++w <= workend)
-                outchar (*w);
-
-              if (specs[cnt].info.left)
-                PAD (' ');
-            }
-            break;
-
-          case 'e':
-          case 'E':
-          case 'f':
-          case 'g':
-          case 'G':
-            {
-              /* Floating-point number.  This is handled by printf_fp.c.  */
-              extern printf_function __printf_fp;
-              function = __printf_fp;
-              goto use_function;
-            }
-
-          case 'c':
-            /* Character.  */
-            if (!specs[cnt].info.left)
-              {
-                --specs[cnt].info.width;
-                PAD (' ');
-              }
-            outchar ((unsigned char) args_value[specs[cnt].data_arg].pa_char);
-            if (specs[cnt].info.left)
-              PAD (' ');
-            break;
-
-          case 's':
-            {
-              static const char null[] = "(null)";
-              size_t len;
-
-	      str = args_value[specs[cnt].data_arg].pa_string;
-
-	    string:
-
-              if (str == NULL)
-		{
-		  /* Write "(null)" if there's space.  */
-		  if (specs[cnt].info.prec == -1
-		      || specs[cnt].info.prec >= (int) sizeof (null) - 1)
-		    {
-		      str = null;
-		      len = sizeof (null) - 1;
-		    }
-		  else
-		    {
-		      str = "";
-		      len = 0;
-		    }
-		}
-              else if (specs[cnt].info.prec != -1)
-		{
-		  /* Search for the end of the string, but don't search
-		     past the length specified by the precision.  */
-		  const char *end = memchr (str, '\0', specs[cnt].info.prec);
-		  if (end)
-		    len = end - str;
-		  else
-		    len = specs[cnt].info.prec;
-		}
-	      else
-		len = strlen (str);
-
-              specs[cnt].info.width -= len;
-
-              if (!specs[cnt].info.left)
-                PAD (' ');
-              outstring (str, len);
-              if (specs[cnt].info.left)
-                PAD (' ');
-            }
-            break;
-
-          case 'p':
-            /* Generic pointer.  */
-            {
-              const void *ptr;
-              ptr = args_value[specs[cnt].data_arg].pa_pointer;
-              if (ptr != NULL)
-                {
-                  /* If the pointer is not NULL, write it as a %#x spec.  */
-                  base = 16;
-                  num = (unsigned long long int) (unsigned long int) ptr;
-                  is_neg = 0;
-                  specs[cnt].info.alt = 1;
-		  specs[cnt].info.spec = 'x';
-                  specs[cnt].info.group = 0;
-                  goto number;
-                }
-              else
-                {
-                  /* Write "(nil)" for a nil pointer.  */
-                  str = "(nil)";
-		  /* Make sure the full string "(nil)" is printed.  */
-		  if (specs[cnt].info.prec < 5)
-		    specs[cnt].info.prec = 5;
-                  goto string;
-                }
-            }
-            break;
-
-          case 'n':
-            /* Answer the count of characters written.  */
-            if (specs[cnt].info.is_longlong)
-	      *(long long int *) 
-		args_value[specs[cnt].data_arg].pa_pointer = done;
-            else if (specs[cnt].info.is_long)
-	      *(long int *) 
-		args_value[specs[cnt].data_arg].pa_pointer = done;
-            else if (!specs[cnt].info.is_short)
-	      *(int *) 
-		args_value[specs[cnt].data_arg].pa_pointer = done;
-            else
-	      *(short int *) 
-		args_value[specs[cnt].data_arg].pa_pointer = done;
-            break;
-
-          case 'm':
-            {
-              extern char *_strerror_internal __P ((int, char *buf, size_t));
-              str = _strerror_internal (errno, errorbuf, sizeof errorbuf);
-              goto string;
-            }
-
-          default:
-            /* Unrecognized format specifier.  */
-            function = printf_unknown;
-            goto use_function;
-	  }
-
-      /* Write the following constant string.  */
-      outstring (specs[cnt].end_of_fmt,
-		 specs[cnt].next_fmt - specs[cnt].end_of_fmt);
-    }
-
-  return done;
-}
-
-
-/* Handle an unknown format specifier.  This prints out a canonicalized
-   representation of the format spec itself.  */
-
-static int
-printf_unknown (s, info, args)
-  FILE *s;
-  const struct printf_info *info;
-  const void **const args;
-{
-  int done = 0;
-  char work[BUFSIZ];
-  char *const workend = &work[sizeof(work) - 1];
-  register char *w;
-
-  outchar ('%');
-
-  if (info->alt)
-    outchar ('#');
-  if (info->group)
-    outchar ('\'');
-  if (info->showsign)
-    outchar ('+');
-  else if (info->space)
-    outchar (' ');
-  if (info->left)
-    outchar ('-');
-  if (info->pad == '0')
-    outchar ('0');
-
-  if (info->width != 0)
-    {
-      w = _itoa (info->width, workend + 1, 10, 0);
-      while (++w <= workend)
-	outchar (*w);
-    }
-
-  if (info->prec != -1)
-    {
-      outchar ('.');
-      w = _itoa (info->prec, workend + 1, 10, 0);
-      while (++w <= workend)
-	outchar (*w);
-    }
-
-  if (info->spec != '\0')
-    outchar (info->spec);
-
-  return done;
-}
-
-/* Group the digits according to the grouping rules of the current locale.
-   The interpretation of GROUPING is as in `struct lconv' from <locale.h>.  */
-
-static char *
-group_number (char *w, char *workend, const char *grouping,
-	      wchar_t thousands_sep)
-{
-  int len;
-  char *src, *s;
-
-  /* We treat all negative values like CHAR_MAX.  */
-
-  if (*grouping == CHAR_MAX || *grouping < 0)
-    /* No grouping should be done.  */
-    return w;
-
-  len = *grouping;
-
-  /* Copy existing string so that nothing gets overwritten.  */
-  src = (char *) alloca (workend - w);
-  memcpy (src, w + 1, workend - w);
-  s = &src[workend - w - 1];
-  w = workend;
-
-  /* Process all characters in the string.  */
-  while (s >= src)
-    {
-      *w-- = *s--;
-
-      if (--len == 0 && s >= src)
-	{
-	  /* A new group begins.  */
-	  *w-- = thousands_sep;
-
-	  len = *grouping++;
-	  if (*grouping == '\0')
-	    /* The previous grouping repeats ad infinitum.  */
-	    --grouping;
-	  else if (*grouping == CHAR_MAX || *grouping < 0)
-	    {
-	      /* No further grouping to be done.
-		 Copy the rest of the number.  */
-	      do
-		*w-- = *s--;
-	      while (s >= src);
-	      break;
-	    }
-	}
-    }
-  return w;
-}
-
-#ifdef USE_IN_LIBIO
-/* Helper "class" for `fprintf to unbuffered': creates a temporary buffer.  */
-struct helper_file
-  {
-    struct _IO_FILE_plus _f;
-    _IO_FILE *_put_stream;
-  };
-
-static int
-_IO_helper_overflow (s, c)
-  _IO_FILE *s;
-  int c;
-{
-  _IO_FILE *target = ((struct helper_file*) s)->_put_stream;
-  int used = s->_IO_write_ptr - s->_IO_write_base;
-  if (used)
-    {
-      _IO_size_t written = _IO_sputn (target, s->_IO_write_base, used);
-      s->_IO_write_ptr -= written;
-    }
-  return _IO_putc (c, s);
-}
-
-static const struct _IO_jump_t _IO_helper_jumps =
-  {
-    _IO_helper_overflow,
-    _IO_default_underflow,
-    _IO_default_xsputn,
-    _IO_default_xsgetn,
-    _IO_default_read,
-    _IO_default_write,
-    _IO_default_doallocate,
-    _IO_default_pbackfail,
-    _IO_default_setbuf,
-    _IO_default_sync,
-    _IO_default_finish,
-    _IO_default_close,
-    _IO_default_stat,
-    _IO_default_seek,
-    _IO_default_seekoff,
-    _IO_default_seekpos,
-    _IO_default_uflow
-  };
-
-static int
-buffered_vfprintf (s, format, args)
-  register _IO_FILE *s;
-  char const *format;
-  _IO_va_list args;
-{
-  char buf[_IO_BUFSIZ];
-  struct helper_file helper;
-  register _IO_FILE *hp = (_IO_FILE *) &helper;
-  int result, to_flush;
-
-  /* Initialize helper.  */
-  helper._put_stream = s;
-  hp->_IO_write_base = buf;
-  hp->_IO_write_ptr = buf;
-  hp->_IO_write_end = buf + sizeof buf;
-  hp->_IO_file_flags = _IO_MAGIC|_IO_NO_READS;
-  hp->_jumps = (struct _IO_jump_t *) &_IO_helper_jumps;
-  
-  /* Now print to helper instead.  */
-  result = _IO_vfprintf (hp, format, args);
-
-  /* Now flush anything from the helper to the S. */
-  if ((to_flush = hp->_IO_write_ptr - hp->_IO_write_base) > 0)
-    {
-      if (_IO_sputn (s, hp->_IO_write_base, to_flush) != to_flush)
-	return -1;
-    }
-
-  return result;
-}
-
-#else /* !USE_IN_LIBIO */
-
-static int
-buffered_vfprintf (s, format, args)
-  register FILE *s;
-  char const *format;
-  va_list args;
-{
-  char buf[BUFSIZ];
-  int result;
-
-  s->__bufp = s->__buffer = buf;
-  s->__bufsize = sizeof buf;
-  s->__put_limit = s->__buffer + s->__bufsize;
-  s->__get_limit = s->__buffer;
-
-  /* Now use buffer to print.  */
-  result = vfprintf (s, format, args);
-
-  if (fflush (s) == EOF)
-    result = -1;
-  s->__buffer = s->__bufp = s->__get_limit = s->__put_limit = NULL;
-  s->__bufsize = 0;
-
-  return result;
-}
-
-
-/* Pads string with given number of a specified character.
-   This code is taken from iopadn.c of the GNU I/O library.  */
-#define PADSIZE 16
-static const char blanks[PADSIZE] =
-{' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
-static const char zeroes[PADSIZE] =
-{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
-
-ssize_t
-__printf_pad (s, pad, count)
-     FILE *s;
-     char pad;
-     size_t count;
-{
-  const char *padptr;
-  register size_t i;
-
-  padptr = pad == ' ' ? blanks : zeroes;
-
-  for (i = count; i >= PADSIZE; i -= PADSIZE)
-    if (PUT (s, padptr, PADSIZE) != PADSIZE)
-      return -1;
-  if (i > 0)
-    if (PUT (s, padptr, i) != i)
-      return -1;
-
-  return count;
-}
-#undef PADSIZE
-#endif /* USE_IN_LIBIO */
diff --git a/stdio/vfscanf.c b/stdio/vfscanf.c
deleted file mode 100644
index a778346287..0000000000
--- a/stdio/vfscanf.c
+++ /dev/null
@@ -1,624 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993, 1994, 1995 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include "../locale/localeinfo.h"
-#include <errno.h>
-#include <limits.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-#ifdef	__GNUC__
-#define	HAVE_LONGLONG
-#define	LONGLONG	long long
-#else
-#define	LONGLONG	long
-#endif
-
-
-#define	inchar()	((c = getc(s)) == EOF ? EOF : (++read_in, c))
-#define	conv_error()	return (ungetc(c, s), done)
-#define input_error()	return (done == 0 ? EOF : done)
-#define	memory_error()	return ((errno = ENOMEM), EOF)
-
-
-/* Read formatted input from S according to the format string
-   FORMAT, using the argument list in ARG.
-   Return the number of assignments made, or -1 for an input error.  */
-int
-DEFUN(__vfscanf, (s, format, arg),
-      FILE *s AND CONST char *format AND va_list argptr)
-{
-  va_list arg = (va_list) argptr;
-
-  register CONST char *f = format;
-  register char fc;		/* Current character of the format.  */
-  register size_t done = 0;	/* Assignments done.  */
-  register size_t read_in = 0;	/* Chars read in.  */
-  register int c;		/* Last char read.  */
-  register int do_assign;	/* Whether to do an assignment.  */
-  register int width;		/* Maximum field width.  */
-  int group_flag;		/* %' modifier flag.  */
-
-  /* Type modifiers.  */
-  int is_short, is_long, is_long_double;
-#ifdef	HAVE_LONGLONG
-  /* We use the `L' modifier for `long long int'.  */
-#define	is_longlong	is_long_double
-#else
-#define	is_longlong	0
-#endif
-  int malloc_string;		/* Args are char ** to be filled in.  */
-  /* Status for reading F-P nums.  */
-  char got_dot, got_e;
-  /* If a [...] is a [^...].  */
-  char not_in;
-  /* Base for integral numbers.  */
-  int base;
-  /* Signedness for integral numbers.  */
-  int number_signed;
-  /* Integral holding variables.  */
-  union
-    {
-      long long int q;
-      unsigned long long int uq;
-      long int l;
-      unsigned long int ul;
-    } num;
-  /* Character-buffer pointer.  */
-  register char *str, **strptr;
-  size_t strsize;
-  /* Workspace.  */
-  char work[200];
-  char *w;			/* Pointer into WORK.  */
-  wchar_t decimal;		/* Decimal point character.  */
-
-  if (!__validfp(s) || !s->__mode.__read || format == NULL)
-    {
-      errno = EINVAL;
-      return EOF;
-    }
-
-  /* Figure out the decimal point character.  */
-  if (mbtowc (&decimal, _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT),
-	      strlen (_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT))) <= 0)
-    decimal = (wchar_t) *_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
-
-  c = inchar();
-
-  /* Run through the format string.  */
-  while (*f != '\0')
-    {
-      unsigned int argpos;
-      /* Extract the next argument, which is of type TYPE.
-	 For a %N$... spec, this is the Nth argument from the beginning;
-	 otherwise it is the next argument after the state now in ARG.  */
-#define ARG(type)	(argpos == 0 ? va_arg (arg, type) :		      \
-			 ({ unsigned int pos = argpos;			      \
-			    va_list arg = (va_list) argptr;		      \
-			    while (--pos > 0)				      \
-			      (void) va_arg (arg, void *);		      \
-			    va_arg (arg, type);				      \
-			  }))
-
-      if (!isascii (*f))
-	{
-	  /* Non-ASCII, may be a multibyte.  */
-	  int len = mblen (f, strlen(f));
-	  if (len > 0)
-	    {
-	      while (len-- > 0)
-		if (c == EOF)
-		  input_error();
-		else if (c == *f++)
-		  (void) inchar();
-		else
-		  conv_error();
-	      continue;
-	    }
-	}
-
-      fc = *f++;
-      if (fc != '%')
-	{
-	  /* Characters other than format specs must just match.  */
-	  if (c == EOF)
-	    input_error();
-	  if (isspace(fc))
-	    {
-	      /* Whitespace characters match any amount of whitespace.  */
-	      while (isspace (c))
-		inchar ();
-	      continue;
-	    }
-	  else if (c == fc)
-	    (void) inchar();
-	  else
-	    conv_error();
-	  continue;
-	}
-
-      /* Initialize state of modifiers.  */
-      argpos = 0;
-      do_assign = 1;
-      group_flag = 0;
-      is_short = is_long = is_long_double = malloc_string = 0;
-
-      /* Check for a positional parameter specification.  */
-      if (isdigit (*f))
-	{
-	  argpos = *f++ - '0';
-	  while (isdigit (*f))
-	    argpos = argpos * 10 + (*f++ - '0');
-	  if (*f == '$')
-	    ++f;
-	  else
-	    {
-	      /* Oops; that was actually the field width.  */
-	      width = argpos;
-	      argpos = 0;
-	      goto got_width;
-	    }
-	}
-
-      /* Check for the assignment-suppressant and the number grouping flag.  */
-      while (*f == '*' || *f == '\'')
-	switch (*f++)
-	  {
-	  case '*':
-	    do_assign = 0;
-	    break;
-	  case '\'':
-	    group_flag = 1;
-	    break;
-	  }
-
-      /* Find the maximum field width.  */
-      width = 0;
-      while (isdigit(*f))
-	{
-	  width *= 10;
-	  width += *f++ - '0';
-	}
-    got_width:
-      if (width == 0)
-	width = -1;
-
-      /* Check for type modifiers.  */
-      while (*f == 'h' || *f == 'l' || *f == 'L' || *f == 'a' || *f == 'q')
-	switch (*f++)
-	  {
-	  case 'h':
-	    /* int's are short int's.  */
-	    is_short = 1;
-	    break;
-	  case 'l':
-	    if (is_long)
-	      /* A double `l' is equivalent to an `L'.  */
-	      is_longlong = 1;
-	    else
-	      /* int's are long int's.  */
-	      is_long = 1;
-	    break;
-	  case 'q':
-	  case 'L':
-	    /* double's are long double's, and int's are long long int's.  */
-	    is_long_double = 1;
-	    break;
-	  case 'a':
-	    /* String conversions (%s, %[) take a `char **'
-	       arg and fill it in with a malloc'd pointer.  */
-	    malloc_string = 1;
-	    break;
-	  }
-
-      /* End of the format string?  */
-      if (*f == '\0')
-	conv_error();
-
-      /* Find the conversion specifier.  */
-      w = work;
-      fc = *f++;
-      if (fc != '[' && fc != 'c' && fc != 'n')
-	/* Eat whitespace.  */
-	while (isspace(c))
-	  (void) inchar();
-      switch (fc)
-	{
-	case '%':	/* Must match a literal '%'.  */
-	  if (c != fc)
-	    conv_error();
-	  break;
-
-	case 'n':	/* Answer number of assignments done.  */
-	  if (do_assign)
-	    *ARG (int *) = read_in - 1;	/* Don't count the read-ahead.  */
-	  break;
-
-	case 'c':	/* Match characters.  */
-	  if (do_assign)
-	    {
-	      str = ARG (char *);
-	      if (str == NULL)
-		conv_error ();
-	    }
-
-	  if (c == EOF)
-	    input_error();
-
-	  if (width == -1)
-	    width = 1;
-
-	  if (do_assign)
-	    {
-	      do
-		*str++ = c;
-	      while (inchar() != EOF && --width > 0);
-	    }
-	  else
-	    while (inchar() != EOF && --width > 0);
-
-	  if (do_assign)
-	    ++done;
-
-	  break;
-
-	case 's':		/* Read a string.  */
-#define STRING_ARG							      \
-	  if (do_assign)						      \
-	    {								      \
-	      if (malloc_string)					      \
-		{							      \
-		  /* The string is to be stored in a malloc'd buffer.  */     \
-		  strptr = ARG (char **);			      \
-		  if (strptr == NULL)					      \
-		    conv_error ();					      \
-		  /* Allocate an initial buffer.  */			      \
-		  strsize = 100;					      \
-		  *strptr = str = malloc (strsize);			      \
-		}							      \
-	      else							      \
-		str = ARG (char *);				      \
-	      if (str == NULL)						      \
-		conv_error ();						      \
-	    }
-	  STRING_ARG;
-
-	  if (c == EOF)
-	    input_error ();
-
-	  do
-	    {
-	      if (isspace (c))
-		break;
-#define	STRING_ADD_CHAR(c)						      \
-	      if (do_assign)						      \
-		{							      \
-		  *str++ = c;						      \
-		  if (malloc_string && str == *strptr + strsize)	      \
-		    {							      \
-		      /* Enlarge the buffer.  */			      \
-		      str = realloc (*strptr, strsize * 2);		      \
-		      if (str == NULL)					      \
-			{						      \
-			  /* Can't allocate that much.  Last-ditch effort.  */\
-			  str = realloc (*strptr, strsize + 1);		      \
-			  if (str == NULL)				      \
-			    {						      \
-			      /* We lose.  Oh well.			      \
-				 Terminate the string and stop converting,    \
-				 so at least we don't swallow any input.  */  \
-			      (*strptr)[strsize] = '\0';		      \
-			      ++done;					      \
-			      conv_error ();				      \
-			    }						      \
-			  else						      \
-			    {						      \
-			      *strptr = str;				      \
-			      str += strsize;				      \
-			      ++strsize;				      \
-			    }						      \
-			}						      \
-		      else						      \
-			{						      \
-			  *strptr = str;				      \
-			  str += strsize;				      \
-			  strsize *= 2;					      \
-			}						      \
-		    }							      \
-		}
-	      STRING_ADD_CHAR (c);
-	    } while (inchar () != EOF && (width <= 0 || --width > 0));
-
-	  if (do_assign)
-	    {
-	      *str = '\0';
-	      ++done;
-	    }
-	  break;
-
-	case 'x':	/* Hexadecimal integer.  */
-	case 'X':	/* Ditto.  */ 
-	  base = 16;
-	  number_signed = 0;
-	  goto number;
-
-	case 'o':	/* Octal integer.  */
-	  base = 8;
-	  number_signed = 0;
-	  goto number;
-
-	case 'u':	/* Unsigned decimal integer.  */
-	  base = 10;
-	  number_signed = 0;
-	  goto number;
-
-	case 'd':	/* Signed decimal integer.  */
-	  base = 10;
-	  number_signed = 1;
-	  goto number;
-
-	case 'i':	/* Generic number.  */
-	  base = 0;
-	  number_signed = 1;
-
-	number:
-	  if (c == EOF)
-	    input_error();
-
-	  /* Check for a sign.  */
-	  if (c == '-' || c == '+')
-	    {
-	      *w++ = c;
-	      if (width > 0)
-		--width;
-	      (void) inchar();
-	    }
-
-	  /* Look for a leading indication of base.  */
-	  if (c == '0')
-	    {
-	      if (width > 0)
-		--width;
-	      *w++ = '0';
-
-	      (void) inchar();
-
-	      if (tolower(c) == 'x')
-		{
-		  if (base == 0)
-		    base = 16;
-		  if (base == 16)
-		    {
-		      if (width > 0)
-			--width;
-		      (void) inchar();
-		    }
-		}
-	      else if (base == 0)
-		base = 8;
-	    }
-
-	  if (base == 0)
-	    base = 10;
-
-	  /* Read the number into WORK.  */
-	  while (width != 0 && c != EOF)
-	    {
-	      if (base == 16 ? !isxdigit(c) :
-		  (!isdigit(c) || c - '0' >= base))
-		break;
-	      *w++ = c;
-	      if (width > 0)
-		--width;
-	      (void) inchar ();
-	    }
-
-	  if (w == work ||
-	      (w - work == 1 && (work[0] == '+' || work[0] == '-')))
-	    /* There was no number.  */
-	    conv_error();
-
-	  /* Convert the number.  */
-	  *w = '\0';
-	  if (is_longlong)
-	    {
-	      if (number_signed)
-		num.q = __strtoq_internal (work, &w, base, group_flag);
-	      else
-		num.uq = __strtouq_internal (work, &w, base, group_flag);
-	    }
-	  else
-	    {
-	      if (number_signed)
-		num.l = __strtol_internal (work, &w, base, group_flag);
-	      else
-		num.ul = __strtoul_internal (work, &w, base, group_flag);
-	    }
-	  if (w == work)
-	    conv_error ();
-
-	  if (do_assign)
-	    {
-	      if (! number_signed)
-		{
-		  if (is_longlong)
-		    *ARG (unsigned LONGLONG int *) = num.uq;
-		  else if (is_long)
-		    *ARG (unsigned long int *) = num.ul;
-		  else if (is_short)
-		    *ARG (unsigned short int *)
-		      = (unsigned short int) num.ul;
-		  else
-		    *ARG (unsigned int *) = (unsigned int) num.ul;
-		}
-	      else
-		{
-		  if (is_longlong)
-		    *ARG (LONGLONG int *) = num.q;
-		  else if (is_long)
-		    *ARG (long int *) = num.l;
-		  else if (is_short)
-		    *ARG (short int *) = (short int) num.l;
-		  else
-		    *ARG (int *) = (int) num.l;
-		}
-	      ++done;
-	    }
-	  break;
-
-	case 'e':	/* Floating-point numbers.  */
-	case 'E':
-	case 'f':
-	case 'g':
-	case 'G':
-	  if (c == EOF)
-	    input_error();
-
-	  /* Check for a sign.  */
-	  if (c == '-' || c == '+')
-	    {
-	      *w++ = c;
-	      if (inchar() == EOF)
-		/* EOF is only an input error before we read any chars.  */
-		conv_error();
-	      if (width > 0)
-		--width;
-	    }
-
-	  got_dot = got_e = 0;
-	  do
-	    {
-	      if (isdigit(c))
-		*w++ = c;
-	      else if (got_e && w[-1] == 'e' && (c == '-' || c == '+'))
-		*w++ = c;
-	      else if (!got_e && tolower(c) == 'e')
-		{
-		  *w++ = 'e';
-		  got_e = got_dot = 1;
-		}
-	      else if (c == decimal && !got_dot)
-		{
-		  *w++ = c;
-		  got_dot = 1;
-		}
-	      else
-		break;
-	      if (width > 0)
-		--width;
-	    } while (inchar() != EOF && width != 0);
-
-	  if (w == work)
-	    conv_error();
-	  if (w[-1] == '-' || w[-1] == '+' || w[-1] == 'e')
-	    conv_error();
-
-	  /* Convert the number.  */
-	  *w = '\0';
-	  if (is_long_double)
-	    {
-	      long double d = __strtold_internal (work, &w, group_flag);
-	      if (do_assign && w != work)
-		*ARG (long double *) = d;
-	    }
-	  else if (is_long)
-	    {
-	      double d = __strtod_internal (work, &w, group_flag);
-	      if (do_assign && w != work)
-		*ARG (double *) = d;
-	    }
-	  else
-	    {
-	      float d = __strtof_internal (work, &w, group_flag);
-	      if (do_assign && w != work)
-		*ARG (float *) = d;
-	    }
-
-	  if (w == work)
-	    conv_error ();
-
-	  if (do_assign)
-	    ++done;
-	  break;
-
-	case '[':	/* Character class.  */
-	  STRING_ARG;
-
-	  if (c == EOF)
-	    input_error();
-
-	  if (*f == '^')
-	    {
-	      ++f;
-	      not_in = 1;
-	    }
-	  else
-	    not_in = 0;
-
-	  while ((fc = *f++) != '\0' && fc != ']')
-	    {
-	      if (fc == '-' && *f != '\0' && *f != ']' &&
-		  w > work && w[-1] <= *f)
-		/* Add all characters from the one before the '-'
-		   up to (but not including) the next format char.  */
-		for (fc = w[-1] + 1; fc < *f; ++fc)
-		  *w++ = fc;
-	      else
-		/* Add the character to the list.  */
-		*w++ = fc;
-	    }
-	  if (fc == '\0')
-	    conv_error();
-
-	  *w = '\0';
-	  num.ul = read_in;
-	  do
-	    {
-	      if ((strchr (work, c) == NULL) != not_in)
-		break;
-	      STRING_ADD_CHAR (c);
-	      if (width > 0)
-		--width;
-	    } while (inchar () != EOF && width != 0);
-	  if (read_in == num.ul)
-	    conv_error ();
-
-	  if (do_assign)
-	    {
-	      *str = '\0';
-	      ++done;
-	    }
-	  break;
-
-	case 'p':	/* Generic pointer.  */
-	  base = 16;
-	  /* A PTR must be the same size as a `long int'.  */
-	  is_long = 1;
-	  goto number;
-	}
-    }
-
-  conv_error();
-}
-
-weak_alias (__vfscanf, vfscanf)
diff --git a/stdio/vprintf.c b/stdio/vprintf.c
deleted file mode 100644
index 97264f475c..0000000000
--- a/stdio/vprintf.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 1991, 1993 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#undef	__OPTIMIZE__	/* Avoid inline `vprintf' function.  */
-#include <stdio.h>
-
-#undef	vprintf
-
-
-/* Write formatted output to stdout according to the
-   format string FORMAT, using the argument list in ARG.  */
-int
-DEFUN(vprintf, (format, arg), CONST char *format AND __gnuc_va_list arg)
-{
-  return vfprintf (stdout, format, arg);
-}
diff --git a/stdio/vscanf.c b/stdio/vscanf.c
deleted file mode 100644
index 0d829440e9..0000000000
--- a/stdio/vscanf.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 1991, 1992 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-#undef	vscanf
-
-
-/* Read formatted input from stdin according to the format
-   string in FORMAT, using the argument list in ARG.  */
-int
-DEFUN(vscanf, (format, arg), CONST char *format AND va_list arg)
-{
-  return vfscanf (stdin, format, arg);
-}
diff --git a/stdio/vsnprintf.c b/stdio/vsnprintf.c
deleted file mode 100644
index a02c259131..0000000000
--- a/stdio/vsnprintf.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 1991, 1992 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-
-
-/*
- * Write formatted output to S according to the format string
- * FORMAT, using the argument list in ARG, writing no more
- * than MAXLEN characters.
- */
-int
-DEFUN(vsnprintf, (s, maxlen, format, arg),
-	char *s AND size_t maxlen AND CONST char *format AND va_list arg)
-{
-  int done;
-  FILE f;
-
-  memset((PTR) &f, 0, sizeof(f));
-  f.__magic = _IOMAGIC;
-  f.__mode.__write = 1;
-  /* The buffer size is one less than MAXLEN
-     so we have space for the null terminator.  */
-  f.__bufp = f.__buffer = (char *) s;
-  f.__bufsize = maxlen - 1;
-  f.__put_limit = f.__buffer + f.__bufsize;
-  f.__get_limit = f.__buffer;
-  /* After the buffer is full (MAXLEN characters have been written),
-     any more characters written will go to the bit bucket.  */
-  f.__room_funcs = __default_room_functions;
-  f.__io_funcs.__write = NULL;
-  f.__seen = 1;
-
-  done = vfprintf(&f, format, arg);
-  *f.__bufp = '\0';
-
-  return done;
-}
diff --git a/stdio/vsprintf.c b/stdio/vsprintf.c
deleted file mode 100644
index 82be90f1fa..0000000000
--- a/stdio/vsprintf.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 1991, 1992 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-
-
-/* Write formatted output to S according to the format string
-   FORMAT, using the argument list in ARG.  */
-int
-DEFUN(vsprintf, (s, format, arg),
-      char *s AND CONST char *format AND va_list arg)
-{
-  int done;
-  FILE f;
-
-  memset((PTR) &f, 0, sizeof(f));
-  f.__magic = _IOMAGIC;
-  f.__mode.__write = 1;
-  f.__bufp = f.__buffer = (char *) s;
-  f.__put_limit = (char *) ULONG_MAX;
-  f.__bufsize = (size_t) (f.__put_limit - f.__bufp);
-  f.__get_limit = f.__buffer;
-  f.__room_funcs.__output = NULL;
-  f.__seen = 1;
-
-  done = vfprintf(&f, format, arg);
-  *f.__bufp = '\0';
-
-  return done;
-}
diff --git a/stdio/vsscanf.c b/stdio/vsscanf.c
deleted file mode 100644
index 6f027d5065..0000000000
--- a/stdio/vsscanf.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (C) 1991, 1992, 1995 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 Library General Public License as
-published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-
-#undef	vsscanf
-
-
-/* Read formatted input from S according to the format
-   string FORMAT, using the argument list in ARG.  */
-int
-DEFUN(__vsscanf, (s, format, arg),
-      CONST char *s AND CONST char *format AND va_list arg)
-{
-  FILE f;
-
-  if (s == NULL)
-    {
-      errno = EINVAL;
-      return -1;
-    }
-
-  memset((PTR) &f, 0, sizeof(f));
-  f.__magic = _IOMAGIC;
-  f.__mode.__read = 1;
-  f.__bufp = f.__buffer = (char *) s;
-  f.__bufsize = strlen(s);
-  f.__get_limit = f.__buffer + f.__bufsize;
-  f.__put_limit = f.__buffer;
-  /* After the buffer is empty (strlen(S) characters have been read),
-     any more read attempts will get EOF.  */
-  f.__room_funcs.__input = NULL;
-  f.__seen = 1;
-
-  return __vfscanf(&f, format, arg);
-}
-
-
-weak_alias (__vsscanf, vsscanf)
diff --git a/stdio/xbug.c b/stdio/xbug.c
deleted file mode 100644
index ec648f5566..0000000000
--- a/stdio/xbug.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <stdio.h>
-
-typedef struct _Buffer {
-  char *buff;
-  int  room, used;
-} Buffer;
-
-#define INIT_BUFFER_SIZE 10000
-
-void InitBuffer(b)
-     Buffer *b;
-{
-  b->room = INIT_BUFFER_SIZE;
-  b->used = 0;
-  b->buff = (char *)malloc(INIT_BUFFER_SIZE*sizeof(char));
-}
-
-void AppendToBuffer(b, str, len)
-     register Buffer *b;
-     char *str;
-     register int len;
-{
-  while (b->used + len > b->room) {
-    b->buff = (char *)realloc(b->buff, 2*b->room*(sizeof(char)));
-    b->room *= 2;
-  }
-  strncpy(b->buff + b->used, str, len);
-  b->used += len;
-}
-
-void ReadFile(buffer, input)
-     register Buffer *buffer;
-     FILE *input;
-{
-  char       buf[BUFSIZ + 1];
-  register int        bytes;
-
-  buffer->used = 0;
-  while (!feof(input) && (bytes = fread(buf, 1, BUFSIZ, input)) > 0) {
-    AppendToBuffer(buffer, buf, bytes);
-  }
-  AppendToBuffer(buffer, "", 1);
-}
-
-main() 
-{
-  char * filename = "xbug.c";
-  FILE *input;
-  Buffer buffer;
-  
-  InitBuffer(&buffer);
-    
-  if (!freopen (filename, "r", stdin))
-    fprintf(stderr, "cannot open file\n");
-  
-  if (!(input = popen("/bin/cat", "r")))
-    fprintf(stderr, "cannot run \n");
-  
-  ReadFile(&buffer, input);
-  pclose(input);
-
-  return 0;
-}