Handle case where write result is zero.

This commit is contained in:
Samuel Williams 2022-06-13 15:33:54 +12:00
parent d9ccb6b372
commit 425a46131a
Notes: git 2022-06-13 13:12:45 +09:00
1 changed files with 6 additions and 0 deletions

6
io.c
View File

@ -1620,6 +1620,12 @@ io_binwrite_string(VALUE arg)
// Write as much as possible: // Write as much as possible:
ssize_t result = io_binwrite_string_internal(p->fptr, ptr, remaining); ssize_t result = io_binwrite_string_internal(p->fptr, ptr, remaining);
// If only the internal buffer is written, result will be zero [bytes of given data written]. This means we
// should try again.
if (result == 0) {
errno = EWOULDBLOCK;
}
if (result > 0) { if (result > 0) {
if ((size_t)result == remaining) break; if ((size_t)result == remaining) break;
ptr += result; ptr += result;