diff --git a/components/files/lowlevelfile.cpp b/components/files/lowlevelfile.cpp index 424527b9d9..07915abba0 100644 --- a/components/files/lowlevelfile.cpp +++ b/components/files/lowlevelfile.cpp @@ -4,6 +4,11 @@ #include #include +#if FILE_API == FILE_API_STDIO +#include +#include +#endif + #if FILE_API == FILE_API_POSIX #include #include @@ -39,7 +44,7 @@ void LowLevelFile::open (char const * filename) if (mHandle == nullptr) { std::ostringstream os; - os << "Failed to open '" << filename << "' for reading."; + os << "Failed to open '" << filename << "' for reading: " << strerror(errno); throw std::runtime_error (os.str ()); } } @@ -58,42 +63,63 @@ size_t LowLevelFile::size () assert (mHandle != nullptr); long oldPosition = ftell (mHandle); - if (oldPosition == -1) - throw std::runtime_error ("A query operation on a file failed."); + { + std::ostringstream os; + os << "An ftell() call failed: " << strerror(errno); + throw std::runtime_error (os.str ()); + } if (fseek (mHandle, 0, SEEK_END) != 0) - throw std::runtime_error ("A query operation on a file failed."); + { + std::ostringstream os; + os << "An fseek() call failed: " << strerror(errno); + throw std::runtime_error (os.str ()); + } - long Size = ftell (mHandle); - - if (Size == -1) - throw std::runtime_error ("A query operation on a file failed."); + long size = ftell (mHandle); + if (size == -1) + { + std::ostringstream os; + os << "An ftell() call failed: " << strerror(errno); + throw std::runtime_error (os.str ()); + } if (fseek (mHandle, oldPosition, SEEK_SET) != 0) - throw std::runtime_error ("A query operation on a file failed."); + { + std::ostringstream os; + os << "An fseek() call failed: " << strerror(errno); + throw std::runtime_error (os.str ()); + } - return size_t (Size); + return size_t (size); } -void LowLevelFile::seek (size_t Position) +void LowLevelFile::seek (size_t position) { assert (mHandle != nullptr); - if (fseek (mHandle, Position, SEEK_SET) != 0) - throw std::runtime_error ("A seek operation on a file failed."); + if (fseek (mHandle, position, SEEK_SET) != 0) + { + std::ostringstream os; + os << "An fseek() call failed: " << strerror(errno); + throw std::runtime_error (os.str ()); + } } size_t LowLevelFile::tell () { assert (mHandle != nullptr); - long Position = ftell (mHandle); + long position = ftell (mHandle); + if (position == -1) + { + std::ostringstream os; + os << "An ftell() call failed: " << strerror(errno); + throw std::runtime_error (os.str ()); + } - if (Position == -1) - throw std::runtime_error ("A query operation on a file failed."); - - return size_t (Position); + return size_t (position); } size_t LowLevelFile::read (void * data, size_t size) @@ -103,7 +129,11 @@ size_t LowLevelFile::read (void * data, size_t size) int amount = fread (data, 1, size, mHandle); if (amount == 0 && ferror (mHandle)) - throw std::runtime_error ("A read operation on a file failed."); + { + std::ostringstream os; + os << "An attempt to read " << size << " bytes failed: " << strerror(errno); + throw std::runtime_error (os.str ()); + } return amount; } @@ -164,37 +194,37 @@ size_t LowLevelFile::size () if (oldPosition == size_t (-1)) { std::ostringstream os; - os << "An lseek() call failed:" << strerror(errno); + os << "An lseek() call failed: " << strerror(errno); throw std::runtime_error (os.str ()); } - size_t Size = ::lseek (mHandle, 0, SEEK_END); + size_t size = ::lseek (mHandle, 0, SEEK_END); - if (Size == size_t (-1)) + if (size == size_t (-1)) { std::ostringstream os; - os << "An lseek() call failed:" << strerror(errno); + os << "An lseek() call failed: " << strerror(errno); throw std::runtime_error (os.str ()); } if (lseek (mHandle, oldPosition, SEEK_SET) == -1) { std::ostringstream os; - os << "An lseek() call failed:" << strerror(errno); + os << "An lseek() call failed: " << strerror(errno); throw std::runtime_error (os.str ()); } - return Size; + return size; } -void LowLevelFile::seek (size_t Position) +void LowLevelFile::seek (size_t position) { assert (mHandle != -1); - if (::lseek (mHandle, Position, SEEK_SET) == -1) + if (::lseek (mHandle, position, SEEK_SET) == -1) { std::ostringstream os; - os << "An lseek() call failed:" << strerror(errno); + os << "An lseek() call failed: " << strerror(errno); throw std::runtime_error (os.str ()); } } @@ -203,16 +233,16 @@ size_t LowLevelFile::tell () { assert (mHandle != -1); - size_t Position = ::lseek (mHandle, 0, SEEK_CUR); + size_t position = ::lseek (mHandle, 0, SEEK_CUR); - if (Position == size_t (-1)) + if (position == size_t (-1)) { std::ostringstream os; - os << "An lseek() call failed:" << strerror(errno); + os << "An lseek() call failed: " << strerror(errno); throw std::runtime_error (os.str ()); } - return Position; + return position; } size_t LowLevelFile::read (void * data, size_t size) @@ -224,7 +254,7 @@ size_t LowLevelFile::read (void * data, size_t size) if (amount == -1) { std::ostringstream os; - os << "An attempt to read " << size << "bytes failed:" << strerror(errno); + os << "An attempt to read " << size << " bytes failed: " << strerror(errno); throw std::runtime_error (os.str ()); } @@ -292,11 +322,11 @@ size_t LowLevelFile::size () return info.nFileSizeLow; } -void LowLevelFile::seek (size_t Position) +void LowLevelFile::seek (size_t position) { assert (mHandle != INVALID_HANDLE_VALUE); - if (SetFilePointer (mHandle, Position, nullptr, SEEK_SET) == INVALID_SET_FILE_POINTER) + if (SetFilePointer (mHandle, position, nullptr, SEEK_SET) == INVALID_SET_FILE_POINTER) if (GetLastError () != NO_ERROR) throw std::runtime_error ("A seek operation on a file failed."); }