From db45abe6a31ec00a6f83280ed471296e90c7b16d Mon Sep 17 00:00:00 2001 From: kelson42 Date: Thu, 8 Apr 2010 21:20:22 +0000 Subject: [PATCH] + windows large file support fix --- src/zimlib/include/zim/zim.h | 5 +++++ src/zimlib/src/fileimpl.cpp | 3 +++ src/zimlib/src/fstream.cpp | 17 ++++++++++------- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/zimlib/include/zim/zim.h b/src/zimlib/include/zim/zim.h index dc9b0fd..fb88a39 100644 --- a/src/zimlib/include/zim/zim.h +++ b/src/zimlib/include/zim/zim.h @@ -107,7 +107,12 @@ namespace zim #endif typedef uint32_t size_type; + + #ifdef _WIN32 + typedef __int64 offset_type; + #else typedef uint64_t offset_type; + #endif enum CompressionType { diff --git a/src/zimlib/src/fileimpl.cpp b/src/zimlib/src/fileimpl.cpp index 0cee279..7ca5731 100644 --- a/src/zimlib/src/fileimpl.cpp +++ b/src/zimlib/src/fileimpl.cpp @@ -53,6 +53,9 @@ namespace zim #ifdef HAVE_STAT64 struct stat64 st; int ret = ::stat64(fname, &st); +#elif _WIN32 + struct __stat64 st; + int ret = ::_stat64(fname, &st); #else struct stat st; int ret = ::stat(fname, &st); diff --git a/src/zimlib/src/fstream.cpp b/src/zimlib/src/fstream.cpp index cec81c0..56cf186 100644 --- a/src/zimlib/src/fstream.cpp +++ b/src/zimlib/src/fstream.cpp @@ -25,13 +25,13 @@ #include #include #include -//#include #include #include #ifdef _WIN32 #include int _fmode = _O_BINARY; +#define _LARGEFILE64_SOURCE #endif log_define("zim.fstream") @@ -69,11 +69,11 @@ int streambuf::sync() streambuf::streambuf(const char* fname, unsigned bufsize) : buffer(bufsize), -#ifdef HAVE_OPEN64 + #ifdef HAVE_OPEN64 fd(::open64(fname, 0)) -#else + #else fd(::open(fname, 0)) -#endif + #endif { log_debug("streambuf for " << fname << " with " << bufsize << " bytes"); @@ -93,11 +93,14 @@ streambuf::~streambuf() void streambuf::seekg(offset_type off) { setg(0, 0, 0); -#ifdef HAVE_LSEEK64 + #ifdef HAVE_LSEEK64 off64_t ret = ::lseek64(fd, off, SEEK_SET); -#else + #elif _WIN32 + offset_type ret = ::_lseeki64(fd, off, SEEK_SET); + #else off_t ret = ::lseek(fd, off, SEEK_SET); -#endif + #endif + if (ret < 0) { std::ostringstream msg;