|
|
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.