diff options
Diffstat (limited to 'lldb/source/Host/common/File.cpp')
| -rw-r--r-- | lldb/source/Host/common/File.cpp | 105 |
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 |

