mirror of
https://github.com/love2d/love.git
synced 2026-08-14 01:20:56 +02:00
File objects inherit from Stream.
This commit is contained in:
@@ -39,13 +39,14 @@ namespace filesystem
|
||||
|
||||
love::Type NativeFile::type("NativeFile", &File::type);
|
||||
|
||||
NativeFile::NativeFile(const std::string &filename)
|
||||
NativeFile::NativeFile(const std::string &filename, Mode mode)
|
||||
: filename(filename)
|
||||
, file(nullptr)
|
||||
, mode(MODE_CLOSED)
|
||||
, bufferMode(BUFFER_NONE)
|
||||
, bufferSize(0)
|
||||
{
|
||||
open(mode);
|
||||
}
|
||||
|
||||
NativeFile::~NativeFile()
|
||||
@@ -54,10 +55,28 @@ NativeFile::~NativeFile()
|
||||
close();
|
||||
}
|
||||
|
||||
NativeFile::NativeFile(const NativeFile &other)
|
||||
: filename(other.filename)
|
||||
, file(nullptr)
|
||||
, mode(MODE_CLOSED)
|
||||
, bufferMode(other.bufferMode)
|
||||
, bufferSize(other.bufferSize)
|
||||
{
|
||||
open(other.mode);
|
||||
}
|
||||
|
||||
NativeFile *NativeFile::clone()
|
||||
{
|
||||
return new NativeFile(*this);
|
||||
}
|
||||
|
||||
bool NativeFile::open(Mode newmode)
|
||||
{
|
||||
if (newmode == MODE_CLOSED)
|
||||
{
|
||||
close();
|
||||
return true;
|
||||
}
|
||||
|
||||
// File already open?
|
||||
if (file != nullptr)
|
||||
@@ -197,15 +216,22 @@ int64 NativeFile::tell()
|
||||
#endif
|
||||
}
|
||||
|
||||
bool NativeFile::seek(uint64 pos)
|
||||
bool NativeFile::seek(int64 pos, SeekOrigin origin)
|
||||
{
|
||||
if (file == nullptr)
|
||||
return false;
|
||||
|
||||
int forigin = SEEK_SET;
|
||||
if (origin == SEEKORIGIN_CURRENT)
|
||||
forigin = SEEK_CUR;
|
||||
else if (origin == SEEKORIGIN_END)
|
||||
forigin = SEEK_END;
|
||||
|
||||
// TODO
|
||||
#ifdef LOVE_WINDOWS
|
||||
return _fseeki64(file, (int64) pos, SEEK_SET) == 0;
|
||||
return _fseeki64(file, pos, forigin) == 0;
|
||||
#else
|
||||
return fseeko(file, (off_t) pos, SEEK_SET) == 0;
|
||||
return fseeko(file, (off_t) pos, forigin) == 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user