diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2020-04-06 14:54:23 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2020-04-06 14:54:23 +0200 |
commit | 004a355bf27d3edd82571dd0d086f7939e108df6 (patch) | |
tree | 41c8070d7873d7b3687e809c3e5b11bb3ff64e20 /fastos | |
parent | 9ad65f905b55fc553a439b1271d1cd81d6c5ef49 (diff) |
Call failed handler for io error on non-linux platform.
Diffstat (limited to 'fastos')
-rw-r--r-- | fastos/src/vespa/fastos/unix_file.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/fastos/src/vespa/fastos/unix_file.cpp b/fastos/src/vespa/fastos/unix_file.cpp index 17a11cd68f3..e1ecb13d6e0 100644 --- a/fastos/src/vespa/fastos/unix_file.cpp +++ b/fastos/src/vespa/fastos/unix_file.cpp @@ -26,6 +26,13 @@ ssize_t FastOS_UNIX_File::Read(void *buffer, size_t len) { ssize_t nRead = read(_filedes, buffer, len); + if (nRead < 0 && _failedHandler != nullptr) { + int error = errno; + int64_t readOffset = GetPosition(); + const char *fileName = GetFileName(); + _failedHandler("read", fileName, error, readOffset, len, nRead); + errno = error; + } return nRead; } @@ -34,6 +41,13 @@ ssize_t FastOS_UNIX_File::Write2(const void *buffer, size_t len) { ssize_t writeRes = write(_filedes, buffer, len); + if (writeRes < 0 && _failedHandler != nullptr) { + int error = errno; + int64_t writeOffset = GetPosition(); + const char *fileName = GetFileName(); + _failedHandler("write", fileName, error, writeOffset, len, writeRes); + errno = error; + } return writeRes; } @@ -58,6 +72,12 @@ void FastOS_UNIX_File::ReadBuf(void *buffer, size_t length, ssize_t readResult; readResult = pread(_filedes, buffer, length, readOffset); + if (readResult < 0 && _failedHandler != nullptr) { + int error = errno; + const char *fileName = GetFileName(); + _failedHandler("read", fileName, error, readOffset, length, readResult); + errno = error; + } if (static_cast<size_t>(readResult) != length) { std::string errorString = readResult != -1 ? std::string("short read") : |