|  | @@ -121,9 +121,16 @@ void __stdio_close_all(void)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void __init_stdio(void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +	static int stdio_initialized = 0;
 | 
	
		
			
				|  |  |  #if FIXED_BUFFERS > 2
 | 
	
		
			
				|  |  |  	int i;
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (stdio_initialized!=0)
 | 
	
		
			
				|  |  | +	    return;
 | 
	
		
			
				|  |  | +	stdio_initialized++;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#if FIXED_BUFFERS > 2
 | 
	
		
			
				|  |  |  	for ( i = 2 ; i < FIXED_BUFFERS ; i++ ) {
 | 
	
		
			
				|  |  |  		_fixed_buffers[i].used = 0;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -135,7 +142,7 @@ void __init_stdio(void)
 | 
	
		
			
				|  |  |  	if (isatty(1)) {
 | 
	
		
			
				|  |  |  		stdout->mode |= _IOLBF;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -#if 0
 | 
	
		
			
				|  |  | +#if 1
 | 
	
		
			
				|  |  |  	/* Taken care of in _start.S and atexit.c now. */
 | 
	
		
			
				|  |  |  	atexit(__stdio_close_all);
 | 
	
		
			
				|  |  |  #endif
 | 
	
	
		
			
				|  | @@ -149,6 +156,8 @@ FILE *fp;
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	register int v;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	v = fp->mode;
 | 
	
		
			
				|  |  |  	/* If last op was a read ... */
 | 
	
		
			
				|  |  |  	if ((v & __MODE_READING) && fflush(fp))
 | 
	
	
		
			
				|  | @@ -194,6 +203,8 @@ FILE *fp;
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	int ch;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if (fp->mode & __MODE_WRITING)
 | 
	
		
			
				|  |  |  		fflush(fp);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -236,6 +247,8 @@ FILE *fp;
 | 
	
		
			
				|  |  |  	int len, cc, rv = 0;
 | 
	
		
			
				|  |  |  	char *bstart;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if (fp == NULL) {			/* On NULL flush the lot. */
 | 
	
		
			
				|  |  |  		if (fflush(stdin))
 | 
	
		
			
				|  |  |  			return EOF;
 | 
	
	
		
			
				|  | @@ -314,6 +327,8 @@ FILE *f;
 | 
	
		
			
				|  |  |  	register size_t i;
 | 
	
		
			
				|  |  |  	register int ch;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	ret = s;
 | 
	
		
			
				|  |  |  	for (i = count-1; i > 0; i--) {
 | 
	
		
			
				|  |  |  		ch = getc(f);
 | 
	
	
		
			
				|  | @@ -343,6 +358,8 @@ char *str;
 | 
	
		
			
				|  |  |  	register char *p = str;
 | 
	
		
			
				|  |  |  	register int c;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	while (((c = getc(stdin)) != EOF) && (c != '\n'))
 | 
	
		
			
				|  |  |  		*p++ = c;
 | 
	
		
			
				|  |  |  	*p = '\0';
 | 
	
	
		
			
				|  | @@ -357,6 +374,8 @@ FILE *fp;
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	register int n = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	while (*str) {
 | 
	
		
			
				|  |  |  		if (putc(*str++, fp) == EOF)
 | 
	
		
			
				|  |  |  			return (EOF);
 | 
	
	
		
			
				|  | @@ -372,6 +391,8 @@ const char *str;
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	register int n;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if (((n = fputs(str, stdout)) == EOF)
 | 
	
		
			
				|  |  |  		|| (putc('\n', stdout) == EOF))
 | 
	
		
			
				|  |  |  		return (EOF);
 | 
	
	
		
			
				|  | @@ -397,6 +418,8 @@ FILE *fp;
 | 
	
		
			
				|  |  |  	int len, v;
 | 
	
		
			
				|  |  |  	unsigned bytes, got = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	v = fp->mode;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Want to do this to bring the file pointer up to date */
 | 
	
	
		
			
				|  | @@ -453,6 +476,8 @@ FILE *fp;
 | 
	
		
			
				|  |  |  	int len;
 | 
	
		
			
				|  |  |  	unsigned bytes, put;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  #ifdef STUB_FWRITE
 | 
	
		
			
				|  |  |  	bytes = size * nelm;
 | 
	
		
			
				|  |  |  	while (bytes > 0) {
 | 
	
	
		
			
				|  | @@ -524,6 +549,8 @@ FILE *fp;
 | 
	
		
			
				|  |  |  void rewind(fp)
 | 
	
		
			
				|  |  |  FILE *fp;
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	fseek(fp, (long) 0, 0);
 | 
	
		
			
				|  |  |  	clearerr(fp);
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -600,6 +627,8 @@ const char *mode;
 | 
	
		
			
				|  |  |  	int fopen_mode = 0;
 | 
	
		
			
				|  |  |  	FILE *nfp = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	/* If we've got an fp close the old one (freopen) */
 | 
	
		
			
				|  |  |  	if (fp) {
 | 
	
		
			
				|  |  |  		/* Careful, don't de-allocate it */
 | 
	
	
		
			
				|  | @@ -710,6 +739,8 @@ FILE *fp;
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	int rv = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if (fp == 0) {
 | 
	
		
			
				|  |  |  		errno = EINVAL;
 | 
	
		
			
				|  |  |  		return EOF;
 | 
	
	
		
			
				|  | @@ -817,6 +848,8 @@ int ungetc(c, fp)
 | 
	
		
			
				|  |  |  int c;
 | 
	
		
			
				|  |  |  FILE *fp;
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +	 __init_stdio();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if (fp->mode & __MODE_WRITING)
 | 
	
		
			
				|  |  |  		fflush(fp);
 | 
	
		
			
				|  |  |  
 |