Update FileStream seek, tell and size to support files greater than 4GB, and max size is 2^63.

This commit is contained in:
rh101 2021-08-20 00:53:02 +10:00
parent 426aa0db93
commit cb696b06ac
3 changed files with 13 additions and 13 deletions

View File

@ -40,7 +40,7 @@ public:
* @param origin SEEK_SET | SEEK_CUR | SEEK_END * @param origin SEEK_SET | SEEK_CUR | SEEK_END
* @return 0 if successful, -1 if not * @return 0 if successful, -1 if not
*/ */
virtual int seek(long offset, int origin) = 0; virtual long seek(int64_t offset, int origin) = 0;
/** /**
* Read data from file stream * Read data from file stream
@ -62,13 +62,13 @@ public:
* Get the current position in the file stream * Get the current position in the file stream
* @return current position, -1 if error * @return current position, -1 if error
*/ */
virtual int tell() = 0; virtual int64_t tell() = 0;
/** /**
* Get the size of the file stream * Get the size of the file stream
* @return stream size, -1 if error (Mode::WRITE and Mode::APPEND may return -1) * @return stream size, -1 if error (Mode::WRITE and Mode::APPEND may return -1)
*/ */
virtual long long size() = 0; virtual int64_t size() = 0;
/** /**
* Get status of file stream * Get status of file stream
@ -79,7 +79,7 @@ public:
virtual operator bool() const { return isOpen(); } virtual operator bool() const { return isOpen(); }
protected: protected:
FileStream() = default; FileStream() {};
}; };
NS_CC_END NS_CC_END

View File

@ -178,9 +178,9 @@ int PosixFileStream::close()
return internalClose(); return internalClose();
} }
int PosixFileStream::seek(long offset, int origin) long PosixFileStream::seek(int64_t offset, int origin)
{ {
const auto result = _iof->seek(_handle, offset, origin); // this returns -1 for error, and resulting offset on success const auto result = _iof->seek(_handle, static_cast<int32_t>(offset), origin); // this returns -1 for error, and resulting offset on success
return result < 0 ? -1 : 0; // return 0 for success return result < 0 ? -1 : 0; // return 0 for success
} }
@ -191,15 +191,15 @@ int PosixFileStream::read(void* buf, unsigned int size)
int PosixFileStream::write(const void* buf, unsigned int size) int PosixFileStream::write(const void* buf, unsigned int size)
{ {
return static_cast<int>(posix_write(_handle._fd, buf, size)); return posix_write(_handle._fd, buf, size);
} }
int PosixFileStream::tell() int64_t PosixFileStream::tell()
{ {
return static_cast<int>(_iof->seek(_handle, 0, SEEK_CUR)); return _iof->seek(_handle, 0, SEEK_CUR);
} }
long long PosixFileStream::size() int64_t PosixFileStream::size()
{ {
return _iof->size(_handle); return _iof->size(_handle);
} }

View File

@ -109,11 +109,11 @@ public:
bool open(const std::string& path, FileStream::Mode mode) override; bool open(const std::string& path, FileStream::Mode mode) override;
int close() override; int close() override;
int seek(long offset, int origin) override; long seek(int64_t offset, int origin) override;
int read(void* buf, unsigned int size) override; int read(void* buf, unsigned int size) override;
int write(const void* buf, unsigned int size) override; int write(const void* buf, unsigned int size) override;
int tell() override; int64_t tell() override;
long long size() override; int64_t size() override;
bool isOpen() const override; bool isOpen() const override;
private: private: