|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #if defined(LIBC_SCCS) && !defined(lint)
8: static char sccsid[] = "@(#)fopen.c 5.2 (Berkeley) 3/9/86";
9: #endif LIBC_SCCS and not lint
10:
11: #include <sys/types.h>
12: #include <sys/file.h>
13: #include <stdio.h>
14:
15: FILE *
16: fopen(file, mode)
17: char *file;
18: register char *mode;
19: {
20: register FILE *iop;
21: register f, rw, oflags;
22: extern FILE *_findiop();
23:
24: iop = _findiop();
25: if (iop == NULL)
26: return (NULL);
27:
28: rw = (mode[1] == '+');
29:
30: switch (*mode) {
31: case 'a':
32: oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
33: break;
34: case 'r':
35: oflags = rw ? O_RDWR : O_RDONLY;
36: break;
37: case 'w':
38: oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
39: break;
40: default:
41: return (NULL);
42: }
43:
44: f = open(file, oflags, 0666);
45: if (f < 0)
46: return (NULL);
47:
48: if (*mode == 'a')
49: lseek(f, (off_t)0, L_XTND);
50:
51: iop->_cnt = 0;
52: iop->_file = f;
53: iop->_bufsiz = 0;
54: if (rw)
55: iop->_flag = _IORW;
56: else if (*mode == 'r')
57: iop->_flag = _IOREAD;
58: else
59: iop->_flag = _IOWRT;
60: iop->_base = iop->_ptr = NULL;
61: return (iop);
62: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.