summary |
tags |
clone url |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
72d5e2a)
Work on file usr/src/libc/stdio/fopen.c
Synthesized-from: 3bsd
--- /dev/null
+#include <stdio.h>
+#include <errno.h>
+
+FILE *
+fopen(file, mode)
+char *file;
+register char *mode;
+{
+ extern int errno;
+ register f;
+ register FILE *iop;
+ extern FILE *_lastbuf;
+
+ for (iop = _iob; iop->_flag&(_IOREAD|_IOWRT); iop++)
+ if (iop >= _lastbuf)
+ return(NULL);
+ if (*mode=='w')
+ f = creat(file, 0666);
+ else if (*mode=='a') {
+ if ((f = open(file, 1)) < 0) {
+ if (errno == ENOENT)
+ f = creat(file, 0666);
+ }
+ if (f >= 0)
+ lseek(f, 0L, 2);
+ } else
+ f = open(file, 0);
+ if (f < 0)
+ return(NULL);
+ iop->_cnt = 0;
+ iop->_file = f;
+ if (*mode != 'r')
+ iop->_flag |= _IOWRT;
+ else
+ iop->_flag |= _IOREAD;
+ return(iop);
+}