Annotation of researchv9/libc/stdio/fopen.c, revision 1.1.1.1

1.1       root        1: /* @(#)fopen.c 4.2 (Berkeley) 3/9/81 */
                      2: #include       <stdio.h>
                      3: #include       <errno.h>
                      4: 
                      5: FILE *
                      6: fopen(file, mode)
                      7: char *file;
                      8: register char *mode;
                      9: {
                     10:        extern int errno;
                     11:        register f, rw;
                     12:        register FILE *iop;
                     13:        extern FILE *_lastbuf;
                     14: 
                     15:        for (iop = _iob; iop->_flag&(_IOREAD|_IOWRT|_IORW); iop++)
                     16:                if (iop >= _lastbuf)
                     17:                        return(NULL);
                     18: 
                     19:        rw = mode[1] == '+';
                     20: 
                     21:        if (*mode=='w') {
                     22:                f = creat(file, 0666);
                     23:                if (rw && f>=0) {
                     24:                        close(f);
                     25:                        f = open(file, 2);
                     26:                }
                     27:        } else if (*mode=='a') {
                     28:                if ((f = open(file, rw? 2: 1)) < 0) {
                     29:                        if (errno == ENOENT) {
                     30:                                f = creat(file, 0666);
                     31:                                if (rw && f>=0) {
                     32:                                        close(f);
                     33:                                        f = open(file, 2);
                     34:                                }
                     35:                        }
                     36:                }
                     37:                if (f >= 0)
                     38:                        lseek(f, 0L, 2);
                     39:        } else
                     40:                f = open(file, rw? 2: 0);
                     41:        if (f < 0)
                     42:                return(NULL);
                     43:        iop->_cnt = 0;
                     44:        iop->_file = f;
                     45:        if (rw)
                     46:                iop->_flag |= _IORW;
                     47:        else if (*mode != 'r')
                     48:                iop->_flag |= _IOWRT;
                     49:        else
                     50:                iop->_flag |= _IOREAD;
                     51:        return(iop);
                     52: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.