Merge pull request #2173 from dtzWill/fix/serialise-read-unbuffered

serialise: fix buffer size used, hide method for internal use only
This commit is contained in:
Eelco Dolstra 2018-05-22 11:31:07 +02:00 committed by GitHub
commit 9064dd2f4d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 5 deletions

View file

@ -133,7 +133,7 @@ size_t FdSource::readUnbuffered(unsigned char * data, size_t len)
ssize_t n;
do {
checkInterrupt();
n = ::read(fd, (char *) data, bufSize);
n = ::read(fd, (char *) data, len);
} while (n == -1 && errno == EINTR);
if (n == -1) { _good = false; throw SysError("reading from file"); }
if (n == 0) { _good = false; throw EndOfFile("unexpected end-of-file"); }

View file

@ -77,10 +77,12 @@ struct BufferedSource : Source
size_t read(unsigned char * data, size_t len) override;
/* Underlying read call, to be overridden. */
virtual size_t readUnbuffered(unsigned char * data, size_t len) = 0;
bool hasData();
protected:
/* Underlying read call, to be overridden. */
virtual size_t readUnbuffered(unsigned char * data, size_t len) = 0;
};
@ -134,8 +136,9 @@ struct FdSource : BufferedSource
return *this;
}
size_t readUnbuffered(unsigned char * data, size_t len) override;
bool good() override;
protected:
size_t readUnbuffered(unsigned char * data, size_t len) override;
private:
bool _good = true;
};

View file

@ -197,7 +197,8 @@ struct TunnelSource : BufferedSource
{
Source & from;
TunnelSource(Source & from) : from(from) { }
size_t readUnbuffered(unsigned char * data, size_t len)
protected:
size_t readUnbuffered(unsigned char * data, size_t len) override
{
to << STDERR_READ << len;
to.flush();