Annotation of 3BSD/lib/libNS/freopen.c, revision 1.1

1.1     ! root        1: /* Copyright (c) 1979 Regents of the University of California */
        !             2: #include       <stdio.h>
        !             3: 
        !             4: struct _iobuf *freopen(file, mode, iop)
        !             5: register char *mode;
        !             6: register struct _iobuf *iop;
        !             7: {
        !             8:        register f;
        !             9:        int unixmode, a_flag;
        !            10: 
        !            11:        fclose(iop);
        !            12:        a_flag = 0;
        !            13:        for(;*mode;mode++) {
        !            14:                switch(*mode) {
        !            15: 
        !            16:                case 'w':
        !            17:                        iop->_flag |= _IOWRT;
        !            18:                        break;
        !            19: 
        !            20:                case 'r':
        !            21:                        iop->_flag |= _IOREAD;
        !            22:                        break;
        !            23: 
        !            24:                case 'a':
        !            25:                        a_flag = 1;
        !            26:                        iop->_flag |= _IOWRT ;
        !            27:                }
        !            28:        }
        !            29:        if((unixmode = (iop->_flag & 3) - 1) < 0) {
        !            30:                unixmode = 0;
        !            31:                iop->_flag = 1;
        !            32:        }
        !            33:        if ((iop->_flag & _IOWRT) && a_flag==0 ) {
        !            34:                f = creat(file, 0644);
        !            35:                if((iop->_flag & _IOREAD) && (f > 0)) {
        !            36:                        close(f);
        !            37:                        f = open(file,2);
        !            38:                }
        !            39:        } else if ((0>(f = open(file, unixmode))) && (a_flag || !(iop->_flag&_IOREAD))){
        !            40:                        f = creat(file, 0644);
        !            41:                        close(f);
        !            42:                        f = open(file,unixmode);
        !            43:                }
        !            44: 
        !            45:        if (f < 0)
        !            46:                return(NULL);
        !            47:        if (a_flag)
        !            48:                lseek(f, (long) 0, 2);
        !            49:        iop->_file = f;
        !            50:        return(iop);
        !            51: }

unix.superglobalmegacorp.com

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