diff --git a/panda/src/express/virtualFileMount.cxx b/panda/src/express/virtualFileMount.cxx index 7c3721a34a..26f12890a8 100644 --- a/panda/src/express/virtualFileMount.cxx +++ b/panda/src/express/virtualFileMount.cxx @@ -74,7 +74,7 @@ read_file(const Filename &file, bool do_uncompress, } off_t file_size = get_file_size(file, in); - if (file_size != 0) { + if (file_size > 0) { result.reserve((size_t)file_size); } diff --git a/panda/src/express/virtualFileMountSystem.cxx b/panda/src/express/virtualFileMountSystem.cxx index 5de0e34aba..96c80d4333 100644 --- a/panda/src/express/virtualFileMountSystem.cxx +++ b/panda/src/express/virtualFileMountSystem.cxx @@ -127,17 +127,25 @@ open_read_file(const Filename &file) const { // the size. //////////////////////////////////////////////////////////////////// off_t VirtualFileMountSystem:: -get_file_size(const Filename &, istream *stream) const { +get_file_size(const Filename &file, istream *stream) const { // First, save the original stream position. streampos orig = stream->tellg(); // Seek to the end and get the stream position there. stream->seekg(0, ios::end); + if (stream->fail()) { + // Seeking not supported. + stream->clear(); + return get_file_size(file); + } streampos size = stream->tellg(); // Then return to the original point. stream->seekg(orig, ios::beg); + // Make sure there are no error flags set as a result of the seek. + stream->clear(); + return size; }