Merge pull request #1460 from LeandroLP23/fix/libc-setvbuf-default-size
fix(libc): give setvbuf a default buffer when the size is 0
This commit is contained in:
commit
2b6cc18876
|
|
@ -78,6 +78,10 @@ int APS5_VABI fileno_nid_postfix(FileStream* stream) {
|
|||
int APS5_VABI setvbuf_nid_postfix(FileStream* stream, char* buffer, int mode, std::size_t size) {
|
||||
if (mode < 0 || mode > 2) return -1;
|
||||
const int native = mode == 0 ? _IOFBF : mode == 1 ? _IOLBF : _IONBF;
|
||||
if (native != _IONBF && size == 0) {
|
||||
buffer = nullptr;
|
||||
size = BUFSIZ;
|
||||
}
|
||||
return std::setvbuf(GetNativeStream(stream), buffer, native, size);
|
||||
}
|
||||
void APS5_VABI setbuf_nid_postfix(FileStream* stream, char* buffer) {
|
||||
|
|
|
|||
|
|
@ -180,6 +180,10 @@ int main() {
|
|||
Require(&guest == &stream.GuestState());
|
||||
Require(guest.position == nullptr && guest.readRemaining == 0 && guest.writeRemaining == 0);
|
||||
Require(guest.descriptor == fileno_nid_postfix(&stream));
|
||||
FileStream lineBuffered(std::tmpfile());
|
||||
Require(setvbuf_nid_postfix(&lineBuffered, nullptr, 1, 0) == 0);
|
||||
FileStream fullyBuffered(std::tmpfile());
|
||||
Require(setvbuf_nid_postfix(&fullyBuffered, nullptr, 0, 0) == 0);
|
||||
Require(setvbuf_nid_postfix(&stream, nullptr, 2, 0) == 0);
|
||||
Require(fputc_nid_postfix('A', &stream) == 'A');
|
||||
Require(--guest.writeRemaining < 0 && __swbuf_nid_postfix('\n', &stream) == '\n');
|
||||
|
|
|
|||
Loading…
Reference in New Issue