|
|
1.1 root 1: /* Copyright (c) 1979 Regents of the University of California */
2: #include <stdio.h>
3:
4: struct _iobuf *freopen(file, mode, iop)
5: register char *mode;
6: register struct _iobuf *iop;
7: {
8: register f;
9: int unixmode, a_flag;
10:
11: fclose(iop);
12: a_flag = 0;
13: for(;*mode;mode++) {
14: switch(*mode) {
15:
16: case 'w':
17: iop->_flag |= _IOWRT;
18: break;
19:
20: case 'r':
21: iop->_flag |= _IOREAD;
22: break;
23:
24: case 'a':
25: a_flag = 1;
26: iop->_flag |= _IOWRT ;
27: }
28: }
29: if((unixmode = (iop->_flag & 3) - 1) < 0) {
30: unixmode = 0;
31: iop->_flag = 1;
32: }
33: if ((iop->_flag & _IOWRT) && a_flag==0 ) {
34: f = creat(file, 0644);
35: if((iop->_flag & _IOREAD) && (f > 0)) {
36: close(f);
37: f = open(file,2);
38: }
39: } else if ((0>(f = open(file, unixmode))) && (a_flag || !(iop->_flag&_IOREAD))){
40: f = creat(file, 0644);
41: close(f);
42: f = open(file,unixmode);
43: }
44:
45: if (f < 0)
46: return(NULL);
47: if (a_flag)
48: lseek(f, (long) 0, 2);
49: iop->_file = f;
50: return(iop);
51: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.