};
auto size = file_size(file);
- if (offset < 0 || size <= (size_t)offset ||
- (0 != offset && 0 != std::fseek(file, offset, SEEK_SET))) {
+ if (offset < 0 || size < (size_t)offset) {
+ std::string err_msg = std::string("offset is smaller than zero or greater than size.");
+ throw std::system_error{EINVAL, std::generic_category(), err_msg};
+ }
+
+ if (0 != offset && 0 != std::fseek(file, offset, SEEK_SET)) {
std::string err_msg = std::string("Cannot perform seek. ") + GetErrorString(errno);
throw std::system_error{errno, std::generic_category(), err_msg};
}