fxlibc/src/libc/stdio/setvbuf.c

37 lines
560 B
C

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
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;
}