Apply the same rules to closed captions.
[libdcp.git] / src / file.cc
index 5f07c02cea0f074bdbae54ea14ac4ab3f552cc30..ce7a4c5e224a9365e403092e9771a736515893e8 100644 (file)
     You should have received a copy of the GNU General Public License
     along with libdcp.  If not, see <http://www.gnu.org/licenses/>.
 
+    In addition, as a special exception, the copyright holders give
+    permission to link the code of portions of this program with the
+    OpenSSL library under certain conditions as described in each
+    individual source file, and distribute linked combinations
+    including the two.
+
+    You must obey the GNU General Public License in all respects
+    for all of the code used other than OpenSSL.  If you modify
+    file(s) with this exception, you may extend this exception to your
+    version of the file(s), but you are not obligated to do so.  If you
+    do not wish to do so, delete this exception statement from your
+    version.  If you delete this exception statement from all source
+    files in the program, then also delete it here.
 */
 
 /** @file  src/file.cc
@@ -25,6 +38,7 @@
 #include "file.h"
 #include "util.h"
 #include "dcp_assert.h"
+#include "compose.hpp"
 #include <stdio.h>
 
 using namespace dcp;
@@ -38,7 +52,16 @@ File::File (boost::filesystem::path file)
        _data = new uint8_t[_size];
        FILE* f = dcp::fopen_boost (file, "rb");
        DCP_ASSERT (f);
-       fread (_data, 1, _size, f);
+       int const N = fread (_data, 1, _size, f);
+       if (N != _size) {
+               if (ferror(f)) {
+                       fclose (f);
+                       throw FileError (String::compose("fread error %1", errno), file, errno);
+               } else {
+                       fclose (f);
+                       throw FileError ("unexpected short read", file, -1);
+               }
+       }
        fclose (f);
 }