- int const this_time = fread (buffer + read, 1, amount - read, _current_file);
+ int64_t to_read = amount - read;
+#ifdef DCPOMATIC_WINDOWS
+ /* If we over-read from the file by too much on Windows we get a errno=22 rather than an feof condition,
+ * for unknown reasons. So if we're going to over-read, we need to do it by a little bit, so that feof
+ * still gets triggered but there is no errno=22.
+ */
+ to_read = std::min(to_read, static_cast<int64_t>(_current_size - _ftelli64(_current_file) + 1));
+#endif
+ int const this_time = fread (buffer + read, 1, to_read, _current_file);