summaryrefslogtreecommitdiffstats
path: root/lldb/source/Host/common/File.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Host/common/File.cpp')
-rw-r--r--lldb/source/Host/common/File.cpp105
1 files changed, 78 insertions, 27 deletions
diff --git a/lldb/source/Host/common/File.cpp b/lldb/source/Host/common/File.cpp
index d0512192a37..c0d3c290f4c 100644
--- a/lldb/source/Host/common/File.cpp
+++ b/lldb/source/Host/common/File.cpp
@@ -318,58 +318,109 @@ File::GetFileSpec (FileSpec &file_spec) const
return error;
}
-Error
-File::SeekFromStart (off_t& offset)
+off_t
+File::SeekFromStart (off_t offset, Error *error_ptr)
{
- Error error;
+ off_t result = 0;
if (DescriptorIsValid())
{
- offset = ::lseek (m_descriptor, offset, SEEK_SET);
+ result = ::lseek (m_descriptor, offset, SEEK_SET);
- if (offset == -1)
- error.SetErrorToErrno();
+ if (error_ptr)
+ {
+ if (result == -1)
+ error_ptr->SetErrorToErrno();
+ else
+ error_ptr->Clear();
+ }
}
- else
+ else if (StreamIsValid ())
{
- error.SetErrorString("invalid file handle");
+ result = ::fseek(m_stream, offset, SEEK_SET);
+
+ if (error_ptr)
+ {
+ if (result == -1)
+ error_ptr->SetErrorToErrno();
+ else
+ error_ptr->Clear();
+ }
}
- return error;
+ else if (error_ptr)
+ {
+ error_ptr->SetErrorString("invalid file handle");
+ }
+ return result;
}
-Error
-File::SeekFromCurrent (off_t& offset)
+off_t
+File::SeekFromCurrent (off_t offset, Error *error_ptr)
{
- Error error;
+ off_t result = -1;
if (DescriptorIsValid())
{
- offset = ::lseek (m_descriptor, offset, SEEK_CUR);
+ result = ::lseek (m_descriptor, offset, SEEK_CUR);
- if (offset == -1)
- error.SetErrorToErrno();
+ if (error_ptr)
+ {
+ if (result == -1)
+ error_ptr->SetErrorToErrno();
+ else
+ error_ptr->Clear();
+ }
}
- else
+ else if (StreamIsValid ())
{
- error.SetErrorString("invalid file handle");
+ result = ::fseek(m_stream, offset, SEEK_CUR);
+
+ if (error_ptr)
+ {
+ if (result == -1)
+ error_ptr->SetErrorToErrno();
+ else
+ error_ptr->Clear();
+ }
}
- return error;
+ else if (error_ptr)
+ {
+ error_ptr->SetErrorString("invalid file handle");
+ }
+ return result;
}
-Error
-File::SeekFromEnd (off_t& offset)
+off_t
+File::SeekFromEnd (off_t offset, Error *error_ptr)
{
- Error error;
+ off_t result = -1;
if (DescriptorIsValid())
{
- offset = ::lseek (m_descriptor, offset, SEEK_END);
+ result = ::lseek (m_descriptor, offset, SEEK_END);
- if (offset == -1)
- error.SetErrorToErrno();
+ if (error_ptr)
+ {
+ if (result == -1)
+ error_ptr->SetErrorToErrno();
+ else
+ error_ptr->Clear();
+ }
}
- else
+ else if (StreamIsValid ())
{
- error.SetErrorString("invalid file handle");
+ result = ::fseek(m_stream, offset, SEEK_END);
+
+ if (error_ptr)
+ {
+ if (result == -1)
+ error_ptr->SetErrorToErrno();
+ else
+ error_ptr->Clear();
+ }
}
- return error;
+ else if (error_ptr)
+ {
+ error_ptr->SetErrorString("invalid file handle");
+ }
+ return result;
}
Error
OpenPOWER on IntegriCloud