1#include <errno.h>2#include <stdio.h>3#include <stdlib.h>45#include "../libc.h"6#include "../syscall.h"78int9__getc(FILE *fp)10{11 int cnt;1213 if (fp->flags & (_IOEOF | _IOERR))14 return EOF;1516 if ((fp->flags & (_IOREAD | _IORW)) == 0) {17 fp->flags |= _IOERR;18 errno = EBADF;19 return EOF;20 }2122 if (fp->flags & _IOSTRG) {23 fp->flags |= _IOEOF;24 return EOF;25 }2627 if (fp->buf == NULL && _allocbuf(fp))28 return EOF;2930 if ((cnt = _read(fp->fd, fp->buf, fp->len)) <= 0) {31 fp->flags |= (cnt == 0) ? _IOEOF : _IOERR;32 return EOF;33 }3435 fp->flags |= _IOREAD;36 fp->rp = fp->buf;37 fp->wp = fp->buf + cnt;3839 return *fp->rp++;40}