summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fs/virtfs/virtfsdirrwops.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/fs/virtfs/virtfsdirrwops.cpp b/src/fs/virtfs/virtfsdirrwops.cpp
index 2170dd05f..f5fc3acd1 100644
--- a/src/fs/virtfs/virtfsdirrwops.cpp
+++ b/src/fs/virtfs/virtfsdirrwops.cpp
@@ -230,7 +230,22 @@ namespace VirtFsDir
{
VirtFile *const handle = static_cast<VirtFile *const>(
rw->hidden.unknown.data1);
- return VirtFs::fileLength(handle);
+ FILEHTYPE fd = handle->mFd;
+#ifdef USE_FILE_FOPEN
+ const long pos = ftell(fd);
+ fseek(fd, 0, SEEK_END);
+ const long sz = ftell(fd);
+ fseek(fd, pos, SEEK_SET);
+ return sz;
+#else // USE_FILE_FOPEN
+ struct stat statbuf;
+ if (fstat(fd, &statbuf) == -1)
+ {
+ reportAlways("VirtFsDir::fileLength error.");
+ return -1;
+ }
+ return static_cast<int64_t>(statbuf.st_size);
+#endif // USE_FILE_FOPEN
}
#endif // USE_SDL2