|
|
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: fclose(iop);
17: if (*mode=='w') {
18: f = creat(file, 0666);
19: if (rw && f>=0) {
20: close(f);
21: f = open(file, 2);
22: }
23: } else if (*mode=='a') {
24: if ((f = open(file, rw? 2: 1)) < 0) {
25: if (errno == ENOENT) {
26: f = creat(file, 0666);
27: if (rw && f>=0) {
28: close(f);
29: f = open(file, 2);
30: }
31: }
32: }
33: if (f >= 0)
34: lseek(f, 0L, 2);
35: } else
36: f = open(file, rw? 2: 0);
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.