From c834a5c5975b9a62413b4aa9446f73d1c573c909 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 11 Jul 2003 08:16:15 +0000 Subject: [PATCH] * Fix handling of pipes (read(2) may not return the required number of bytes in one call). --- src/nix.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/nix.cc b/src/nix.cc index 19c73165c..8fc0fa2c3 100644 --- a/src/nix.cc +++ b/src/nix.cc @@ -250,11 +250,13 @@ struct StdinSource : RestoreSource { virtual void operator () (const unsigned char * data, unsigned int len) { - ssize_t res = read(STDIN_FILENO, (char *) data, len); - if (res == -1) - throw SysError("reading from stdin"); - if (res != (ssize_t) len) - throw Error("not enough data available on stdin"); + while (len) { + ssize_t res = read(STDIN_FILENO, (char *) data, len); + if (res == -1) throw SysError("reading from stdin"); + if (res == 0) throw SysError("unexpected end-of-file on stdin"); + len -= res; + data += res; + } } };