1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2024-09-19 23:03:53 -04:00

FdSource: track number of bytes read

This commit is contained in:
Eelco Dolstra 2016-02-26 16:16:08 +01:00
parent bcc9943cee
commit 581e1bc5b4
2 changed files with 8 additions and 5 deletions

View file

@ -64,9 +64,9 @@ static void warnLargeDump()
void FdSink::write(const unsigned char * data, size_t len) void FdSink::write(const unsigned char * data, size_t len)
{ {
written += len;
static bool warned = false; static bool warned = false;
if (warn && !warned) { if (warn && !warned) {
written += len;
if (written > threshold) { if (written > threshold) {
warnLargeDump(); warnLargeDump();
warned = true; warned = true;
@ -131,6 +131,7 @@ size_t FdSource::readUnbuffered(unsigned char * data, size_t 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"); }
read += n;
return n; return n;
} }

View file

@ -76,11 +76,11 @@ struct BufferedSource : Source
struct FdSink : BufferedSink struct FdSink : BufferedSink
{ {
int fd; int fd;
bool warn; bool warn = false;
size_t written; size_t written = 0;
FdSink() : fd(-1), warn(false), written(0) { } FdSink() : fd(-1) { }
FdSink(int fd) : fd(fd), warn(false), written(0) { } FdSink(int fd) : fd(fd) { }
~FdSink(); ~FdSink();
void write(const unsigned char * data, size_t len) override; void write(const unsigned char * data, size_t len) override;
@ -96,6 +96,8 @@ private:
struct FdSource : BufferedSource struct FdSource : BufferedSource
{ {
int fd; int fd;
size_t read = 0;
FdSource() : fd(-1) { } FdSource() : fd(-1) { }
FdSource(int fd) : fd(fd) { } FdSource(int fd) : fd(fd) { }
size_t readUnbuffered(unsigned char * data, size_t len) override; size_t readUnbuffered(unsigned char * data, size_t len) override;