- n = read (is->fd, is->buffer + is->length,
- U8_ISTREAM_BUFFER_SIZE - is->length);
+ ssize_t retval = read (is->fd, is->buffer + is->length,
+ U8_ISTREAM_BUFFER_SIZE - is->length);
+ if (retval > 0)
+ {
+ n += retval;
+ is->length += retval;
+ }
+ else if (retval == 0)
+ return n;
+ else if (errno != EINTR)
+ return n > 0 ? n : -1;