Annotation of coherent/b/lib/libc/stdio/_finit.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * libc/stdio/_finit.c
        !             3:  * ANSI-compliant C standard i/o library internals.
        !             4:  * _fginit(), _fpinit()
        !             5:  * Initialize file for i/o.
        !             6:  */
        !             7: 
        !             8: #include <stdio.h>
        !             9: #include <errno.h>
        !            10: 
        !            11: /*
        !            12:  * The get and put function pointers in a FILE
        !            13:  * initially contain &_fginit and &_fpinit.
        !            14:  * The first get/put on the stream calls _f[gp]init()
        !            15:  * which calls finit().
        !            16:  * finit() calls setvbuf() to initialize stream buffering
        !            17:  * and to reset the get and put functions appropriately.
        !            18:  */
        !            19: static
        !            20: void
        !            21: finit(stream) register FILE *stream;
        !            22: {
        !            23:        register int mode, sav;
        !            24: 
        !            25:        if (stream->_mode != _MODE_UNINIT)
        !            26:                return;                         /* setvbuf already called */
        !            27:        sav = errno;                    /* because isatty() can set errno */
        !            28:        mode = (!isatty(fileno(stream))) ? _IOFBF
        !            29:                    : (stream == stdout) ? _IOLBF : _IONBF;
        !            30:        if (setvbuf(stream, NULL, mode, (size_t)BUFSIZ) == 0)
        !            31:                return;                         /* buffered or line buffered */
        !            32:        setvbuf(stream, NULL, _IONBF, (size_t)0);       /* unbuffered */
        !            33:        errno = sav;
        !            34: }
        !            35: 
        !            36: /*
        !            37:  * Initialize and get.
        !            38:  */
        !            39: int
        !            40: _fginit(stream) register FILE *stream;
        !            41: {
        !            42:        finit(stream);
        !            43:        return (*stream->_f2p->_gt)(stream);
        !            44: }
        !            45: 
        !            46: /*
        !            47:  * Initialize and put.
        !            48:  */
        !            49: int
        !            50: _fpinit(c, stream) register char c; register FILE *stream;
        !            51: {
        !            52:        finit(stream);
        !            53:        return (*stream->_f2p->_pt)(c, stream);
        !            54: }
        !            55: 
        !            56: /* end of libc/stdio/_finit.c */

unix.superglobalmegacorp.com

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