diff options
Diffstat (limited to 'libc/stdio/stdio.c')
| -rw-r--r-- | libc/stdio/stdio.c | 56 | 
1 files changed, 30 insertions, 26 deletions
| diff --git a/libc/stdio/stdio.c b/libc/stdio/stdio.c index 98d0ba3b4..9043e6199 100644 --- a/libc/stdio/stdio.c +++ b/libc/stdio/stdio.c @@ -6,15 +6,19 @@  /* This is an implementation of the C standard IO package.   */ +#include <stdlib.h>  #include <stdio.h> - +#include <unistd.h>  #include <fcntl.h>  #include <sys/types.h>  #include <malloc.h>  #include <errno.h> +#include <string.h>  #undef STUB_FWRITE +void __io_init_vars(void); +  extern FILE *__IO_list;		/* For fflush at exit */  #define FIXED_BUFFERS 2 @@ -80,10 +84,7 @@ FILE  stderr[1] =  /* Call the stdio initiliser; it's main job it to call atexit */ -#define STATIC - -STATIC int  -__stdio_close_all() +void __stdio_close_all(void)  {     FILE *fp;     fflush(stdout); @@ -103,8 +104,7 @@ static int first_time = 0;  struct fixed_buffer _fixed_buffers[2]; -STATIC void  -__io_init_vars() +void __io_init_vars(void)  {     if( first_time ) return;     first_time = 1; @@ -206,7 +206,9 @@ FILE *fp;     if (fp->mode & __MODE_WRITING)        fflush(fp); +#if __MODE_IOTRAN   try_again: +#endif     /* Can't read or there's been an EOF or error then return EOF */     if ((fp->mode & (__MODE_READ | __MODE_EOF | __MODE_ERR)) != __MODE_READ)        return EOF; @@ -319,7 +321,7 @@ FILE *fp;  char *  fgets(s, count, f)  char *s; -size_t count; +int count;  FILE *f;  {     char *ret; @@ -368,7 +370,7 @@ char *str;  #ifdef L_fputs  int  fputs(str, fp) -char *str; +const char *str;  FILE *fp;  {     register int n = 0; @@ -385,7 +387,7 @@ FILE *fp;  #ifdef L_puts  int  puts(str) -char *str; +const char *str;  {     register int n; @@ -405,12 +407,12 @@ char *str;   * This ignores __MODE__IOTRAN; probably exactly what you want. (It _is_ what   * fgetc wants)   */ -int +size_t  fread(buf, size, nelm, fp) -char *buf; -int   size; -int   nelm; -FILE *fp; +void	*buf; +size_t  size; +size_t  nelm; +FILE	*fp;  {     int   len, v;     unsigned bytes, got = 0; @@ -467,12 +469,12 @@ FILE *fp;   *    * Again this ignores __MODE__IOTRAN.   */ -int +size_t  fwrite(buf, size, nelm, fp) -char *buf; -int   size; -int   nelm; -FILE *fp; +const void *buf; +size_t  size; +size_t  nelm; +FILE	*fp;  {     register int v;     int   len; @@ -606,7 +608,6 @@ int   ref;  long ftell(fp)  FILE * fp;  { -   long rv;     if (fflush(fp) == EOF)        return EOF;     return lseek(fp->fd, 0L, SEEK_CUR); @@ -620,10 +621,10 @@ FILE * fp;   */  FILE *  __fopen(fname, fd, fp, mode) -char *fname; +const char *fname;  int   fd;  FILE *fp; -char *mode; +const char *mode;  {     int   open_mode = 0;  #if __MODE_IOTRAN @@ -875,8 +876,8 @@ size_t size;     if( mode == _IOFBF || mode == _IOLBF )     { -      if( size <= 0  ) size = BUFSIZ; -      if( buf == 0 ) +      if( size <= 0  ) { size = BUFSIZ; } +      if( buf == 0 ) {           if (size == BUFSIZ) {              int i;              for(i=0;i<FIXED_BUFFERS;i++) @@ -887,8 +888,10 @@ size_t size;                 }              if(i==FIXED_BUFFERS)                 buf = malloc(size); -         } else +         } else {              buf = malloc(size); +	 } +      }        if( buf == 0 ) return EOF;        fp->bufstart = buf; @@ -896,6 +899,7 @@ size_t size;        fp->mode |= mode;     }     fp->bufpos = fp->bufread = fp->bufwrite = fp->bufstart; +   return 0;  }  #endif | 
