290bool QFileDevice::flush()
293 if (!d->fileEngine) {
294 qWarning(
"QFileDevice::flush: No file engine. Is IODevice open?");
298 if (!d->writeBuffer.isEmpty()) {
299 qint64 size = d->writeBuffer.nextDataBlockSize();
300 qint64 written = d->fileEngine->write(d->writeBuffer.readPointer(), size);
302 d->writeBuffer.free(written);
303 if (written != size) {
304 QFileDevice::FileError err = d->fileEngine->error();
305 if (err == QFileDevice::UnspecifiedError)
306 err = QFileDevice::WriteError;
307 d->setError(err, d->fileEngine->errorString());
312 if (!d->fileEngine->flush()) {
313 QFileDevice::FileError err = d->fileEngine->error();
314 if (err == QFileDevice::UnspecifiedError)
315 err = QFileDevice::WriteError;
316 d->setError(err, d->fileEngine->errorString());
412bool QFileDevice::seek(qint64 off)
416 qWarning(
"QFileDevice::seek: IODevice is not open");
420 if (!d->ensureFlushed())
423 if (!d->fileEngine->seek(off) || !QIODevice::seek(off)) {
424 QFileDevice::FileError err = d->fileEngine->error();
425 if (err == QFileDevice::UnspecifiedError)
426 err = QFileDevice::PositionError;
427 d->setError(err, d->fileEngine->errorString());
437qint64 QFileDevice::readLineData(
char *data, qint64 maxlen)
440 if (!d->ensureFlushed())
444 if (d->fileEngine->supportsExtension(QAbstractFileEngine::FastReadLineExtension)) {
445 read = d->fileEngine->readLine(data, maxlen);
449 read = QIODevice::readLineData(data, maxlen);
463qint64 QFileDevice::readData(
char *data, qint64 len)
469 if (!d->ensureFlushed())
472 const qint64 read = d->fileEngine->read(data, len);
474 QFileDevice::FileError err = d->fileEngine->error();
475 if (err == QFileDevice::UnspecifiedError)
476 err = QFileDevice::ReadError;
477 d->setError(err, d->fileEngine->errorString());
494 return QIODevicePrivate::putCharHelper(c);
498 qint64 writeBufferSize = writeBuffer.size();
499 if ((openMode & QIODevice::Unbuffered) || writeBufferSize + 1 >= writeBufferChunkSize
501 || ((openMode & QIODevice::Text) && c ==
'\n'
502 && writeBufferSize + 2 >= writeBufferChunkSize)
505 return QIODevicePrivate::putCharHelper(c);
508 if (!(openMode & QIODevice::WriteOnly)) {
509 if (openMode == QIODevice::NotOpen)
510 qWarning(
"QIODevice::putChar: Closed device");
512 qWarning(
"QIODevice::putChar: ReadOnly device");
517 const bool sequential = isSequential();
518 if (pos != devicePos && !sequential && !q_func()->seek(pos))
525 if ((openMode & QIODevice::Text) && c ==
'\n') {
527 *writeBuffer.reserve(1) =
'\r';
532 *writeBuffer.reserve(1) = c;
537 if (!buffer.isEmpty())
548qint64 QFileDevice::writeData(
const char *data, qint64 len)
552 d->lastWasWrite =
true;
553 bool buffered = !(d->openMode & Unbuffered);
556 if (buffered && (d->writeBuffer.size() + len) > d->writeBufferChunkSize) {
563 if (!buffered || len > d->writeBufferChunkSize) {
564 const qint64 ret = d->fileEngine->write(data, len);
566 QFileDevice::FileError err = d->fileEngine->error();
567 if (err == QFileDevice::UnspecifiedError)
568 err = QFileDevice::WriteError;
569 d->setError(err, d->fileEngine->errorString());
575 d->writeBuffer.append(data, len);
631bool QFileDevice::resize(qint64 sz)
634 if (!d->ensureFlushed())
637 if (isOpen() && d->fileEngine->pos() > sz)
639 if (d->fileEngine->setSize(sz)) {
645 d->setError(QFile::ResizeError, d->fileEngine->errorString());
716uchar *QFileDevice::map(qint64 offset, qint64 size, MemoryMapFlags flags)
720 && d->fileEngine->supportsExtension(QAbstractFileEngine::MapExtension)) {
722 uchar *address = d->fileEngine->map(offset, size, flags);
723 if (address ==
nullptr)
724 d->setError(d->fileEngine->error(), d->fileEngine->errorString());
737bool QFileDevice::unmap(uchar *address)
741 && d->fileEngine->supportsExtension(QAbstractFileEngine::UnMapExtension)) {
743 bool success = d->fileEngine->unmap(address);
745 d->setError(d->fileEngine->error(), d->fileEngine->errorString());
748 d->setError(PermissionsError, tr(
"No file engine available or engine does not support UnMapExtension"));
795bool QFileDevice::setFileTime(
const QDateTime &newDate, QFileDevice::FileTime fileTime)
800 d->setError(QFileDevice::UnspecifiedError, tr(
"No file engine available"));
804 if (!d->fileEngine->setFileTime(newDate, fileTime)) {
805 d->setError(d->fileEngine->error(), d->fileEngine->errorString());