apparently setvbuf() doesn't respect size unless you provide a buffer