|
|
1.1 ! root 1: /* ! 2: * libc/stdio/_stropen.c ! 3: * ANSI-compliant C standard i/o library internals. ! 4: * _stropen() ! 5: * Open string stream. ! 6: * Called by sprintf(), sscanf(), vsprintf(). ! 7: */ ! 8: ! 9: #include <stdio.h> ! 10: #include <limits.h> ! 11: #include "stdio.int.h" ! 12: ! 13: extern int _fputstr(); ! 14: ! 15: /* length is -1 for output to string, strlen(string) for input from string. */ ! 16: FILE * ! 17: _stropen(string, length, fp) char *string; int length; register FILE *fp; ! 18: { ! 19: register _FILE2 *f2p; ! 20: ! 21: f2p = fp->_f2p; ! 22: f2p->_bp = fp->_cp = string; ! 23: f2p->_dp = f2p->_ep = f2p->_nm = NULL; ! 24: fp->_mode = _MODE_STR; ! 25: fp->_ff1 = fp->_ff2 = fp->_fd = f2p->_uc = 0; ! 26: if (length < 0) { ! 27: fp->_ff1 |= _FWONLY; ! 28: fp->_cc = INT_MAX; ! 29: f2p->_pt = &_fputstr; ! 30: f2p->_gt = &_fgete; ! 31: } else { ! 32: fp->_ff1 |= _FRONLY; ! 33: fp->_cc = length; ! 34: f2p->_pt = &_fpute; ! 35: f2p->_gt = &_fgetstr; ! 36: } ! 37: return fp; ! 38: } ! 39: ! 40: /* ! 41: * _fputstr() is static; ! 42: * _fgetstr() (in _fgetstr.c) is not, because it must be visible to ungetc(). ! 43: */ ! 44: static ! 45: int ! 46: _fputstr(c, fp) int c; register FILE *fp; ! 47: { ! 48: return (*fp->_cp++ = (unsigned char)c); ! 49: } ! 50: ! 51: /* end of libc/stdio/_stropen.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.