1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #if defined(LIBC_SCCS) && !defined(lint)
8: static char sccsid[] = "@(#)filbuf.c 5.3 (Berkeley) 3/9/86";
9: #endif LIBC_SCCS and not lint
10:
11: #include <stdio.h>
12: #include <sys/types.h>
13: #include <sys/stat.h>
14: char *malloc();
15:
16: _filbuf(iop)
17: register FILE *iop;
18: {
19: int size;
20: struct stat stbuf;
21: extern char *_smallbuf;
22: char c;
23:
24: if (iop->_flag & _IORW)
25: iop->_flag |= _IOREAD;
26:
27: if ((iop->_flag&_IOREAD) == 0)
28: return(EOF);
29: if (iop->_flag&(_IOSTRG|_IOEOF))
30: return(EOF);
31: tryagain:
32: if (iop->_base==NULL) {
33: if (iop->_flag&_IONBF) {
34: iop->_base = _smallbuf ? &_smallbuf[fileno(iop)] : &c;
35: goto tryagain;
36: }
37: if (fstat(fileno(iop), &stbuf) < 0 || stbuf.st_blksize <= NULL)
38: size = BUFSIZ;
39: else
40: size = stbuf.st_blksize;
41: if ((iop->_base = malloc(size)) == NULL) {
42: iop->_flag |= _IONBF;
43: goto tryagain;
44: }
45: iop->_flag |= _IOMYBUF;
46: iop->_bufsiz = size;
47: }
48: if (iop == stdin) {
49: if (stdout->_flag&_IOLBF)
50: fflush(stdout);
51: if (stderr->_flag&_IOLBF)
52: fflush(stderr);
53: }
54: iop->_cnt = read(fileno(iop), iop->_base,
55: iop->_flag & _IONBF ? 1 : iop->_bufsiz);
56: iop->_ptr = iop->_base;
57: if (iop->_flag & _IONBF && iop->_base == &c)
58: iop->_base = NULL;
59: if (--iop->_cnt < 0) {
60: if (iop->_cnt == -1) {
61: iop->_flag |= _IOEOF;
62: if (iop->_flag & _IORW)
63: iop->_flag &= ~_IOREAD;
64: } else
65: iop->_flag |= _IOERR;
66: iop->_cnt = 0;
67: return(EOF);
68: }
69: return(*iop->_ptr++&0377);
70: }
Defined functions
Defined variables
sccsid
defined in line
8;
never used