mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 12:26:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef COMPONENTS_FILES_UTILS_H
 | |
| #define COMPONENTS_FILES_UTILS_H
 | |
| 
 | |
| #include <cerrno>
 | |
| #include <format>
 | |
| #include <istream>
 | |
| #include <stdexcept>
 | |
| #include <system_error>
 | |
| 
 | |
| namespace Files
 | |
| {
 | |
|     inline std::streamsize getStreamSizeLeft(std::istream& stream)
 | |
|     {
 | |
|         const auto begin = stream.tellg();
 | |
|         if (stream.fail())
 | |
|             throw std::runtime_error(
 | |
|                 std::format("Failed to get current file position: {}", std::generic_category().message(errno)));
 | |
| 
 | |
|         stream.seekg(0, std::ios_base::end);
 | |
|         if (stream.fail())
 | |
|             throw std::runtime_error(
 | |
|                 std::format("Failed to seek end file position: {}", std::generic_category().message(errno)));
 | |
| 
 | |
|         const auto end = stream.tellg();
 | |
|         if (stream.fail())
 | |
|             throw std::runtime_error(
 | |
|                 std::format("Failed to get current file position: {}", std::generic_category().message(errno)));
 | |
| 
 | |
|         stream.seekg(begin);
 | |
|         if (stream.fail())
 | |
|             throw std::runtime_error(
 | |
|                 std::format("Failed to seek original file position: {}", std::generic_category().message(errno)));
 | |
| 
 | |
|         return end - begin;
 | |
|     }
 | |
| }
 | |
| 
 | |
| #endif
 |