|
|
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: ! 12: extern int _fputstr(); ! 13: ! 14: /* length is -1 for output to string, strlen(string) for input from string. */ ! 15: FILE * ! 16: _stropen(string, length, fp) char *string; int length; register FILE *fp; ! 17: { ! 18: register _FILE2 *f2p; ! 19: ! 20: f2p = fp->_f2p; ! 21: f2p->_bp = fp->_cp = string; ! 22: fp->_mode = _MODE_STR; ! 23: if (length < 0) { ! 24: fp->_ff1 |= _FWONLY; ! 25: fp->_cc = INT_MAX; ! 26: f2p->_pt = &_fputstr; ! 27: f2p->_gt = &_fgete; ! 28: } else { ! 29: fp->_ff1 |= _FRONLY; ! 30: fp->_cc = length; ! 31: f2p->_pt = &_fpute; ! 32: f2p->_gt = &_fgetstr; ! 33: } ! 34: return fp; ! 35: } ! 36: ! 37: /* ! 38: * _fputstr() is static; ! 39: * _fgetstr() (in _fgetstr.c) is not, because it must be visible to ungetc(). ! 40: */ ! 41: static ! 42: int ! 43: _fputstr(c, fp) int c; register FILE *fp; ! 44: { ! 45: return (*fp->_cp++ = (unsigned char)c); ! 46: } ! 47: ! 48: /* 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.