diff --git a/src/modules/Pipe/pipe.c b/src/modules/Pipe/pipe.c index 420e7226cde140b41281196451f0ba1aa225310d..05f2740f898eaf7bdde0c0379e56e9494f7dc634 100644 --- a/src/modules/Pipe/pipe.c +++ b/src/modules/Pipe/pipe.c @@ -323,8 +323,19 @@ static INLINE int append_buffer(struct pike_string *s) if(THIS->fd!= -1) { + ptrdiff_t len = s->len; + char *data = s->str; + ptrdiff_t bytes; + fd_lseek(THIS->fd, THIS->pos, SEEK_SET); - fd_write(THIS->fd, s->str, s->len); + while (len > 0) { + do { + bytes = fd_write(THIS->fd, data, len); + } while ((bytes < 0) && (errno == EINTR)); + if (bytes < 0) break; + data += bytes; + len -= bytes; + } THIS->pos+=s->len; return 0; }