#include #include #include int setvbuf(FILE * restrict fp, char * restrict buf, int mode, size_t size) { if(fp->bufmode != _IONBF) { fflush(fp); if(fp->bufowned) free(fp->buf); } fp->buf = NULL; fp->bufowned = false; fp->bufmode = _IONBF; fp->bufsize = 0; if(mode == _IONBF) return 0; if(buf) { fp->buf = buf; fp->bufsize = size; fp->bufmode = mode; } else { fp->buf = malloc(size); if(!fp->buf) return -1; fp->bufsize = size; fp->bufowned = true; fp->bufmode = mode; } return 0; }