4
#include "qfileengine.h"
5
#include "qbufferedfsfileengine_p.h"
7
// Required to build with msvc.net 2002
9
#define S_ISREG(x) (((x) & S_IFMT) == S_IFREG)
12
QBufferedFSFileEngine::QBufferedFSFileEngine()
13
: QFSFileEngine(*new QBufferedFSFileEnginePrivate)
17
QFileEngine::Type QBufferedFSFileEngine::type() const
19
return Type(BufferedFSFileEngine);
22
bool QBufferedFSFileEngine::open(int /* flags */)
27
bool QBufferedFSFileEngine::open(int /* flags */, FILE *fh)
29
Q_D(QBufferedFSFileEngine);
33
if (::fstat(fileno(fh), &st) != 0)
35
d->sequential = !S_ISREG(st.st_mode);
39
bool QBufferedFSFileEngine::close()
44
void QBufferedFSFileEngine::flush()
46
Q_D(QBufferedFSFileEngine);
49
int gotPos = fgetpos(d->fh, &pos);
56
d->lastIOCommand = QBufferedFSFileEnginePrivate::IOFlushCommand;
59
qint64 QBufferedFSFileEngine::at() const
61
Q_D(const QBufferedFSFileEngine);
62
return qint64(ftell(d->fh));
65
bool QBufferedFSFileEngine::seek(qint64 offset)
67
Q_D(QBufferedFSFileEngine);
68
return fseek(d->fh, long(offset), SEEK_SET) != -1;
71
qint64 QBufferedFSFileEngine::read(char *data, qint64 maxlen)
73
Q_D(QBufferedFSFileEngine);
74
if (d->lastIOCommand != QBufferedFSFileEnginePrivate::IOReadCommand) {
76
d->lastIOCommand = QBufferedFSFileEnginePrivate::IOReadCommand;
80
return fread(data, 1, size_t(maxlen), d->fh);
83
qint64 QBufferedFSFileEngine::write(const char *data, qint64 len)
85
Q_D(QBufferedFSFileEngine);
86
if (d->lastIOCommand != QBufferedFSFileEnginePrivate::IOWriteCommand) {
88
d->lastIOCommand = QBufferedFSFileEnginePrivate::IOWriteCommand;
90
return fwrite(data, 1, size_t(len), d->fh);