|
|
1.1 ! root 1: /* @(#)fdopen.c 4.4 (Berkeley) 9/12/83 */ ! 2: /* ! 3: * Unix routine to do an "fopen" on file descriptor ! 4: * The mode has to be repeated because you can't query its ! 5: * status ! 6: */ ! 7: ! 8: #include <stdio.h> ! 9: #include <errno.h> ! 10: ! 11: FILE * ! 12: fdopen(fd, mode) ! 13: register char *mode; ! 14: { ! 15: extern int errno; ! 16: register FILE *iop; ! 17: extern FILE *_lastbuf; ! 18: ! 19: if ((unsigned)fd >= getdtablesize()) ! 20: return (NULL); ! 21: for (iop = _iob; iop->_flag&(_IOREAD|_IOWRT|_IORW); ) ! 22: if (++iop >= _lastbuf) ! 23: return(NULL); ! 24: iop->_cnt = 0; ! 25: iop->_file = fd; ! 26: if (*mode != 'r') { ! 27: iop->_flag |= _IOWRT; ! 28: if (*mode == 'a') ! 29: lseek(fd, 0L, 2); ! 30: } else ! 31: iop->_flag |= _IOREAD; ! 32: if (mode[1] == '+') { ! 33: iop->_flag &= ~(_IOREAD|_IOWRT); ! 34: iop->_flag |= _IORW; ! 35: } ! 36: return(iop); ! 37: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.