aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-02-26 16:16:08 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-03-02 15:46:07 +0100
commit89a2fa68aca83082b50132dd98a170bcce82dae9 (patch)
treefe4b02321b02e822febf24b8da5e26be54e84743 /src
parentcca4a8dc1a622ab086639e5c09347303c062922e (diff)
FdSource: track number of bytes read
Diffstat (limited to 'src')
-rw-r--r--src/libutil/serialise.cc3
-rw-r--r--src/libutil/serialise.hh10
2 files changed, 8 insertions, 5 deletions
diff --git a/src/libutil/serialise.cc b/src/libutil/serialise.cc
index c9620e2bf..a3cd4ff0d 100644
--- a/src/libutil/serialise.cc
+++ b/src/libutil/serialise.cc
@@ -64,9 +64,9 @@ static void warnLargeDump()
void FdSink::write(const unsigned char * data, size_t len)
{
+ written += len;
static bool warned = false;
if (warn && !warned) {
- written += len;
if (written > threshold) {
warnLargeDump();
warned = true;
@@ -131,6 +131,7 @@ size_t FdSource::readUnbuffered(unsigned char * data, size_t 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"); }
+ read += n;
return n;
}
diff --git a/src/libutil/serialise.hh b/src/libutil/serialise.hh
index 9e269f392..0fdc4037b 100644
--- a/src/libutil/serialise.hh
+++ b/src/libutil/serialise.hh
@@ -76,11 +76,11 @@ struct BufferedSource : Source
struct FdSink : BufferedSink
{
int fd;
- bool warn;
- size_t written;
+ bool warn = false;
+ size_t written = 0;
- FdSink() : fd(-1), warn(false), written(0) { }
- FdSink(int fd) : fd(fd), warn(false), written(0) { }
+ FdSink() : fd(-1) { }
+ FdSink(int fd) : fd(fd) { }
~FdSink();
void write(const unsigned char * data, size_t len) override;
@@ -96,6 +96,8 @@ private:
struct FdSource : BufferedSource
{
int fd;
+ size_t read = 0;
+
FdSource() : fd(-1) { }
FdSource(int fd) : fd(fd) { }
size_t readUnbuffered(unsigned char * data, size_t len) override;