/* from Dale Schumacher's dLibs library */ #include #include #include int setvbuf(fp, bp, bmode, size) register FILE *fp; char *bp; int bmode; size_t size; { if(fp->_flag & _IOMYBUF) free(fp->_base); fp->_flag &= ~(_IOFBF | _IOLBF | _IONBF | _IOMYBUF); fp->_flag |= bmode; fp->_cnt = 0; if(bmode == _IONBF) /* unbuffered */ { fp->_base = &(fp->_ch); /* use tiny buffer */ fp->_bsiz = 1; } else if (size > (size_t) LONG_MAX) /* not likely! */ return -1; else /* full buffering */ { if(bp != NULL) { fp->_base = (unsigned char *) bp; } else { if(fp->_base = (unsigned char *) malloc(size)) { fp->_flag |= _IOMYBUF; } else { return -1; } } fp->_bsiz = size; } fp->_ptr = fp->_base; return 0; }