1*2004Swnj /* @(#)fopen.c 4.1 (Berkeley) 12/21/80 */ 2*2004Swnj #include <stdio.h> 3*2004Swnj #include <errno.h> 4*2004Swnj 5*2004Swnj FILE * 6*2004Swnj fopen(file, mode) 7*2004Swnj char *file; 8*2004Swnj register char *mode; 9*2004Swnj { 10*2004Swnj extern int errno; 11*2004Swnj register f; 12*2004Swnj register FILE *iop; 13*2004Swnj extern FILE *_lastbuf; 14*2004Swnj 15*2004Swnj for (iop = _iob; iop->_flag&(_IOREAD|_IOWRT); iop++) 16*2004Swnj if (iop >= _lastbuf) 17*2004Swnj return(NULL); 18*2004Swnj if (*mode=='w') 19*2004Swnj f = creat(file, 0666); 20*2004Swnj else if (*mode=='a') { 21*2004Swnj if ((f = open(file, 1)) < 0) { 22*2004Swnj if (errno == ENOENT) 23*2004Swnj f = creat(file, 0666); 24*2004Swnj } 25*2004Swnj if (f >= 0) 26*2004Swnj lseek(f, 0L, 2); 27*2004Swnj } else 28*2004Swnj f = open(file, 0); 29*2004Swnj if (f < 0) 30*2004Swnj return(NULL); 31*2004Swnj iop->_cnt = 0; 32*2004Swnj iop->_file = f; 33*2004Swnj if (*mode != 'r') 34*2004Swnj iop->_flag |= _IOWRT; 35*2004Swnj else 36*2004Swnj iop->_flag |= _IOREAD; 37*2004Swnj return(iop); 38*2004Swnj } 39