1*21404Sdist /* 2*21404Sdist * Copyright (c) 1980 Regents of the University of California. 3*21404Sdist * All rights reserved. The Berkeley software License Agreement 4*21404Sdist * specifies the terms and conditions for redistribution. 5*21404Sdist */ 6*21404Sdist 7*21404Sdist #ifndef lint 8*21404Sdist static char sccsid[] = "@(#)fopen.c 5.1 (Berkeley) 05/30/85"; 9*21404Sdist #endif not lint 10*21404Sdist 1117951Sserge #include <sys/types.h> 1217951Sserge #include <sys/file.h> 1317951Sserge #include <stdio.h> 142004Swnj 152004Swnj FILE * 162004Swnj fopen(file, mode) 1717951Sserge char *file; 1817951Sserge register char *mode; 192004Swnj { 202004Swnj register FILE *iop; 2117951Sserge register f, rw, oflags; 2217951Sserge extern FILE *_findiop(); 232004Swnj 2417951Sserge iop = _findiop(); 2517951Sserge if (iop == NULL) 2617951Sserge return (NULL); 273163Stoy 2817951Sserge rw = (mode[1] == '+'); 293163Stoy 3017951Sserge switch (*mode) { 3117951Sserge case 'a': 3217951Sserge oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY); 3317951Sserge break; 3417951Sserge case 'r': 3517951Sserge oflags = rw ? O_RDWR : O_RDONLY; 3617951Sserge break; 3717951Sserge case 'w': 3817951Sserge oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY); 3917951Sserge break; 4017951Sserge default: 4117951Sserge return (NULL); 4217951Sserge } 4317951Sserge 4417951Sserge f = open(file, oflags, 0666); 452004Swnj if (f < 0) 4617951Sserge return (NULL); 4717951Sserge 4817951Sserge if (*mode == 'a') 4917951Sserge lseek(f, (off_t)0, L_XTND); 5017951Sserge 512004Swnj iop->_cnt = 0; 522004Swnj iop->_file = f; 5317951Sserge iop->_bufsiz = 0; 543163Stoy if (rw) 5517951Sserge iop->_flag = _IORW; 5617951Sserge else if (*mode == 'r') 5717951Sserge iop->_flag = _IOREAD; 582004Swnj else 5917951Sserge iop->_flag = _IOWRT; 6017951Sserge iop->_base = iop->_ptr = NULL; 6117951Sserge return (iop); 622004Swnj } 63