180,6 → 180,23 |
stream->buf_head = stream->buf; |
} |
|
static void _setvbuf(FILE *stream) |
{ |
/* FIXME: Use more complex rules for setting buffering options. */ |
|
switch (stream->fd) { |
case 1: |
setvbuf(stream, NULL, _IOLBF, BUFSIZ); |
break; |
case 0: |
case 2: |
setvbuf(stream, NULL, _IONBF, 0); |
break; |
default: |
setvbuf(stream, NULL, _IOFBF, BUFSIZ); |
} |
} |
|
/** Allocate stream buffer. */ |
static int _fallocbuf(FILE *stream) |
{ |
225,10 → 242,8 |
stream->eof = false; |
stream->klog = false; |
stream->phone = -1; |
_setvbuf(stream); |
|
/* FIXME: Should select buffering type based on what was opened. */ |
setvbuf(stream, NULL, _IOFBF, BUFSIZ); |
|
list_append(&stream->link, &files); |
|
return stream; |
248,10 → 263,8 |
stream->eof = false; |
stream->klog = false; |
stream->phone = -1; |
_setvbuf(stream); |
|
/* FIXME: Should select buffering type based on what was opened. */ |
setvbuf(stream, NULL, _IOLBF, BUFSIZ); |
|
list_append(&stream->link, &files); |
|
return stream; |
281,10 → 294,8 |
stream->eof = false; |
stream->klog = false; |
stream->phone = -1; |
_setvbuf(stream); |
|
/* FIXME: Should select buffering type based on what was opened. */ |
setvbuf(stream, NULL, _IOLBF, BUFSIZ); |
|
list_append(&stream->link, &files); |
|
return stream; |
380,7 → 391,7 |
{ |
size_t bytes_used; |
|
if (!stream->buf || stream->btype == _IONBF || stream->error) |
if ((!stream->buf) || (stream->btype == _IONBF) || (stream->error)) |
return; |
|
bytes_used = stream->buf_head - stream->buf; |
411,8 → 422,11 |
bool need_flush; |
|
/* If not buffered stream, write out directly. */ |
if (stream->btype == _IONBF) |
return _fwrite(buf, size, nmemb, stream); |
if (stream->btype == _IONBF) { |
now = _fwrite(buf, size, nmemb, stream); |
fflush(stream); |
return now; |
} |
|
/* Perform lazy allocation of stream buffer. */ |
if (stream->buf == NULL) { |
425,8 → 439,7 |
total_written = 0; |
need_flush = false; |
|
while (!stream->error && bytes_left > 0) { |
|
while ((!stream->error) && (bytes_left > 0)) { |
buf_free = stream->buf_size - (stream->buf_head - stream->buf); |
if (bytes_left > buf_free) |
now = buf_free; |
437,7 → 450,7 |
b = data[i]; |
stream->buf_head[i] = b; |
|
if (b == '\n' && stream->btype == _IOLBF) |
if ((b == '\n') && (stream->btype == _IOLBF)) |
need_flush = true; |
} |
|