Annotation of coherent/d/lib/libc/stdio/ungetc.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Standard I/O Library
                      3:  * Unget char for next getc
                      4:  */
                      5: 
                      6: #include <stdio.h>
                      7: 
                      8: int
                      9: ungetc(c, fp)
                     10: int    c;
                     11: register FILE  *fp;
                     12: {
                     13:        extern  int     _fginit();
                     14:        extern  int     _fgetb();
                     15:        extern  int     _fgetc();
                     16:        extern  int     _fgeteof();
                     17:        int     _fungoti();
                     18:        int     _fungotb();
                     19:        int     _fungotc();
                     20:        int     _fungote();
                     21:        int     _funungc();
                     22: 
                     23:        if (c == EOF)                   /* ANSI 4.9.7.11 (22) */
                     24:                return(EOF);            /* Leave input stream unchanged */
                     25:        if (fp->_gt==&_fginit)
                     26:                fp->_gt = &_fungoti;
                     27:        else if (fp->_gt==&_fgetb)
                     28:                fp->_gt = &_fungotb;
                     29:        else if (fp->_gt==&_fgetc)
                     30:                fp->_gt = &_fungotc;
                     31:        else if (fp->_gt==&_fgeteof)
                     32:                fp->_gt = &_fungote;
                     33:        else
                     34:                return (EOF);
                     35:        fp->_pt = &_funungc;
                     36:        fp->_cc = 0;
                     37:        fp->_ff |= _FUNGOT;
                     38:        fp->_ff &= ~_FEOF;              /* ANSI 4.9.7.11 (24) */
                     39:        fp->_uc = c;
                     40:        return (c);
                     41: }
                     42: 
                     43: 
                     44: /*
                     45:  * uninitialized fp unget
                     46:  */
                     47: 
                     48: static
                     49: int
                     50: _fungoti(fp)
                     51: register FILE  *fp;
                     52: {
                     53:        extern  int     _fginit();
                     54:        extern  int     _fpinit();
                     55: 
                     56:        fp->_gt = &_fginit;
                     57:        fp->_pt = &_fpinit;
                     58:        fp->_cc = 0;
                     59:        fp->_ff &= ~_FUNGOT;
                     60:        return (fp->_uc);
                     61: }
                     62: 
                     63: 
                     64: /*
                     65:  * buffered unget
                     66:  */
                     67: 
                     68: static
                     69: int
                     70: _fungotb(fp)
                     71: register FILE  *fp;
                     72: {
                     73:        extern  int     _fgetb();
                     74:        extern  int     _fputb();
                     75: 
                     76:        fp->_gt = &_fgetb;
                     77:        fp->_pt = &_fputb;
                     78:        if ((fp->_cc = fp->_cp - fp->_dp) > 0)
                     79:                fp->_cc = _ep(fp) - fp->_cp;
                     80:        fp->_ff &= ~_FUNGOT;
                     81:        return (fp->_uc);
                     82: }
                     83: 
                     84: 
                     85: /*
                     86:  * unbuffered unget
                     87:  */
                     88: 
                     89: static
                     90: int
                     91: _fungotc(fp)
                     92: register FILE  *fp;
                     93: {
                     94:        extern  int     _fgetc();
                     95:        extern  int     _fputc();
                     96: 
                     97:        fp->_gt = &_fgetc;
                     98:        fp->_pt = &_fputc;
                     99:        fp->_cc = 0;
                    100:        fp->_ff &= ~_FUNGOT;
                    101:        return (fp->_uc);
                    102: }
                    103: 
                    104: 
                    105: /*
                    106:  * string unget (for sscanf)
                    107:  */
                    108: 
                    109: static
                    110: int
                    111: _fungote(fp)
                    112: register FILE  *fp;
                    113: {
                    114:        extern int      _fgeteof();
                    115: 
                    116:        fp->_gt = &_fgeteof;
                    117:        fp->_cc = -strlen(fp->_cp);
                    118:        return (fp->_uc);
                    119: }
                    120: 
                    121: 
                    122: /*
                    123:  * un unget; occurs if put done before get after unget
                    124:  */
                    125: 
                    126: static
                    127: int
                    128: _funungc(c, fp)
                    129: register char  c;
                    130: register FILE  *fp;
                    131: {
                    132:        (*fp->_gt)(fp);
                    133:        return (putc(c, fp));
                    134: }

unix.superglobalmegacorp.com

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