aboutsummaryrefslogtreecommitdiffstats
path: root/fastos
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2020-04-06 14:54:23 +0200
committerTor Egge <Tor.Egge@broadpark.no>2020-04-06 14:54:23 +0200
commit004a355bf27d3edd82571dd0d086f7939e108df6 (patch)
tree41c8070d7873d7b3687e809c3e5b11bb3ff64e20 /fastos
parent9ad65f905b55fc553a439b1271d1cd81d6c5ef49 (diff)
Call failed handler for io error on non-linux platform.
Diffstat (limited to 'fastos')
-rw-r--r--fastos/src/vespa/fastos/unix_file.cpp20
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") :