home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <errno.h>
- #include <unistd.h>
-
- extern void __chkabort(void);
- extern int __fflush(FILE *stream);
-
- int __srget(FILE *stream) /* Get next input block */
- {
- __chkabort();
- if(stream->flags&96) /* Error on stream / EOF */
- { stream->incount=0;
- errno=EPERM;
- return EOF; }
- if(stream->flags&8)
- { if(__fflush(stream))
- return EOF;
- }else if(stream->tmpp!=NULL) /* File is in ungetc mode */
- {
- stream->p=stream->tmpp;
- stream->incount=stream->tmpinc;
- stream->tmpp=NULL;
- if(--stream->incount>=0)
- return *stream->p++;
- }
- if(stream->flags&0x200) /* Is a sscanf buffer */
- return EOF;
- stream->flags|=4;
- stream->incount=read(stream->file,stream->buffer,stream->bufsize);
- if(stream->incount==0) /* EOF found */
- {
- stream->flags|=32;
- return EOF;
- }else if(stream->incount<0) /* Error */
- {
- stream->incount=0;
- stream->flags|=64;
- return EOF;
- }
- stream->incount--;
- stream->p=stream->buffer;
- return *stream->p++;
- }
-