|
|
1.1 ! root 1: /* @(#)freopen.c 4.2 (Berkeley) 3/9/81 */ ! 2: #include <stdio.h> ! 3: #include <errno.h> ! 4: ! 5: FILE * ! 6: freopen(file, mode, iop) ! 7: char *file; ! 8: register char *mode; ! 9: register FILE *iop; ! 10: { ! 11: extern int errno; ! 12: register f, rw; ! 13: ! 14: rw = mode[1] == '+'; ! 15: ! 16: if (*mode=='w') { ! 17: f = creat(file, 0666); ! 18: if (rw && f>=0) { ! 19: close(f); ! 20: f = open(file, 2); ! 21: } ! 22: } else if (*mode=='a') { ! 23: if ((f = open(file, rw? 2: 1)) < 0) { ! 24: if (errno == ENOENT) { ! 25: f = creat(file, 0666); ! 26: if (rw && f>=0) { ! 27: close(f); ! 28: f = open(file, 2); ! 29: } ! 30: } ! 31: } ! 32: if (f >= 0) ! 33: lseek(f, 0L, 2); ! 34: } else ! 35: f = open(file, rw? 2: 0); ! 36: fclose(iop); ! 37: if (f < 0) ! 38: return(NULL); ! 39: iop->_cnt = 0; ! 40: iop->_file = f; ! 41: if (rw) ! 42: iop->_flag |= _IORW; ! 43: else if (*mode != 'r') ! 44: iop->_flag |= _IOWRT; ! 45: else ! 46: iop->_flag |= _IOREAD; ! 47: return(iop); ! 48: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.