serialise: fix buffer size used, hide method for internal use only

Fixes #2169.
This commit is contained in:
Will Dietz 2018-05-21 17:26:41 -05:00
parent 966407bcf1
commit b08923b4a0
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; ssize_t n;
do { do {
checkInterrupt(); checkInterrupt();
n = ::read(fd, (char *) data, bufSize); n = ::read(fd, (char *) data, len);
} while (n == -1 && errno == EINTR); } while (n == -1 && errno == EINTR);
if (n == -1) { _good = false; throw SysError("reading from file"); } if (n == -1) { _good = false; throw SysError("reading from file"); }
if (n == 0) { _good = false; throw EndOfFile("unexpected end-of-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; 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(); 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; return *this;
} }
size_t readUnbuffered(unsigned char * data, size_t len) override;
bool good() override; bool good() override;
protected:
size_t readUnbuffered(unsigned char * data, size_t len) override;
private: private:
bool _good = true; bool _good = true;
}; };

View file

@ -197,7 +197,8 @@ struct TunnelSource : BufferedSource
{ {
Source & from; Source & from;
TunnelSource(Source & from) : from(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 << STDERR_READ << len;
to.flush(); to.flush();