37 lines
560 B
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;
|
|
}
|