X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffile_group.cc;h=942eb435d87f081e38ef5e48bf53ea0e4dd3cdea;hb=372555641062f5c7c6e4a1d5f67cfaf12a2c6799;hp=90aa10e28beb9d86aef50479555f378bf524e39d;hpb=513947df0f421c086ac56dff48dfe540b0a380c2;p=dcpomatic.git diff --git a/src/lib/file_group.cc b/src/lib/file_group.cc index 90aa10e28..942eb435d 100644 --- a/src/lib/file_group.cc +++ b/src/lib/file_group.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2014 Carl Hetherington + Copyright (C) 2013-2018 Carl Hetherington This file is part of DCP-o-matic. @@ -22,11 +22,12 @@ * @brief FileGroup class. */ -#include -#include #include "file_group.h" #include "exceptions.h" #include "cross.h" +#include "compose.hpp" +#include +#include #include using std::vector; @@ -92,7 +93,7 @@ FileGroup::ensure_open_path (size_t p) const _current_path = p; _current_file = fopen_boost (_paths[_current_path], "rb"); if (_current_file == 0) { - throw OpenFileError (_paths[_current_path], errno); + throw OpenFileError (_paths[_current_path], errno, true); } } @@ -147,7 +148,7 @@ FileGroup::seek (int64_t pos, int whence) const /** Try to read some data from the current position into a buffer. * @param buffer Buffer to write data into. * @param amount Number of bytes to read. - * @return Number of bytes read, or -1 in the case of error. + * @return Number of bytes read. */ int FileGroup::read (uint8_t* buffer, int amount) const @@ -161,11 +162,17 @@ FileGroup::read (uint8_t* buffer, int amount) const break; } - /* See if there is another file to use */ - if ((_current_path + 1) >= _paths.size()) { - break; + if (ferror(_current_file)) { + throw FileError (String::compose("fread error %1", errno), _paths[_current_path]); + } + + if (feof (_current_file)) { + /* See if there is another file to use */ + if ((_current_path + 1) >= _paths.size()) { + break; + } + ensure_open_path (_current_path + 1); } - ensure_open_path (_current_path + 1); } return read;