* Fix handling of pipes (read(2) may not return the required

number of bytes in one call).
This commit is contained in:
Eelco Dolstra 2003-07-11 08:16:15 +00:00
parent 822c072cfa
commit c834a5c597
1 changed files with 7 additions and 5 deletions

View File

@ -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;
}
}
};