|
|
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[] = "@(#)freopen.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: freopen(file, mode, iop)
17: char *file;
18: register char *mode;
19: register FILE *iop;
20: {
21: register f, rw, oflags;
22:
23: rw = (mode[1] == '+');
24:
25: fclose(iop);
26:
27: switch (*mode) {
28: case 'a':
29: oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
30: break;
31: case 'r':
32: oflags = rw ? O_RDWR : O_RDONLY;
33: break;
34: case 'w':
35: oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
36: break;
37: default:
38: return (NULL);
39: }
40:
41: f = open(file, oflags, 0666);
42: if (f < 0)
43: return (NULL);
44:
45: if (*mode == 'a')
46: lseek(f, (off_t)0, L_XTND);
47:
48: iop->_cnt = 0;
49: iop->_file = f;
50: iop->_bufsiz = 0;
51: if (rw)
52: iop->_flag = _IORW;
53: else if (*mode == 'r')
54: iop->_flag = _IOREAD;
55: else
56: iop->_flag = _IOWRT;
57: iop->_base = iop->_ptr = NULL;
58: return (iop);
59: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.