306bool QFileDevice::flush()
309 if (!d->fileEngine) {
310 qWarning(
"QFileDevice::flush: No file engine. Is IODevice open?");
314 if (!d->writeBuffer.isEmpty()) {
315 qint64 size = d->writeBuffer.nextDataBlockSize();
316 qint64 written = d->fileEngine->write(d->writeBuffer.readPointer(), size);
318 d->writeBuffer.free(written);
319 if (written != size) {
320 QFileDevice::FileError err = d->fileEngine->error();
321 if (err == QFileDevice::UnspecifiedError)
322 err = QFileDevice::WriteError;
323 d->setError(err, d->fileEngine->errorString());
328 if (!d->fileEngine->flush()) {
329 QFileDevice::FileError err = d->fileEngine->error();
330 if (err == QFileDevice::UnspecifiedError)
331 err = QFileDevice::WriteError;
332 d->setError(err, d->fileEngine->errorString());
428bool QFileDevice::seek(qint64 off)
432 qWarning(
"QFileDevice::seek: IODevice is not open");
436 if (!d->ensureFlushed())
439 if (!d->fileEngine->seek(off) || !QIODevice::seek(off)) {
440 QFileDevice::FileError err = d->fileEngine->error();
441 if (err == QFileDevice::UnspecifiedError)
442 err = QFileDevice::PositionError;
443 d->setError(err, d->fileEngine->errorString());
453qint64 QFileDevice::readLineData(
char *data, qint64 maxlen)
456 if (!d->ensureFlushed())
460 if (d->fileEngine->supportsExtension(QAbstractFileEngine::FastReadLineExtension)) {
461 read = d->fileEngine->readLine(data, maxlen);
465 read = QIODevice::readLineData(data, maxlen);
479qint64 QFileDevice::readData(
char *data, qint64 len)
485 if (!d->ensureFlushed())
488 const qint64 read = d->fileEngine->read(data, len);
490 QFileDevice::FileError err = d->fileEngine->error();
491 if (err == QFileDevice::UnspecifiedError)
492 err = QFileDevice::ReadError;
493 d->setError(err, d->fileEngine->errorString());
510 return QIODevicePrivate::putCharHelper(c);
514 qint64 writeBufferSize = writeBuffer.size();
515 if ((openMode & QIODevice::Unbuffered) || writeBufferSize + 1 >= writeBufferChunkSize
517 || ((openMode & QIODevice::Text) && c ==
'\n'
518 && writeBufferSize + 2 >= writeBufferChunkSize)
521 return QIODevicePrivate::putCharHelper(c);
524 if (!(openMode & QIODevice::WriteOnly)) {
525 if (openMode == QIODevice::NotOpen)
526 qWarning(
"QIODevice::putChar: Closed device");
528 qWarning(
"QIODevice::putChar: ReadOnly device");
533 const bool sequential = isSequential();
534 if (pos != devicePos && !sequential && !q_func()->seek(pos))
541 if ((openMode & QIODevice::Text) && c ==
'\n') {
543 *writeBuffer.reserve(1) =
'\r';
548 *writeBuffer.reserve(1) = c;
553 if (!buffer.isEmpty())
564qint64 QFileDevice::writeData(
const char *data, qint64 len)
568 d->lastWasWrite =
true;
569 bool buffered = !(d->openMode & Unbuffered);
572 if (buffered && (d->writeBuffer.size() + len) > d->writeBufferChunkSize) {
579 if (!buffered || len > d->writeBufferChunkSize) {
580 const qint64 ret = d->fileEngine->write(data, len);
582 QFileDevice::FileError err = d->fileEngine->error();
583 if (err == QFileDevice::UnspecifiedError)
584 err = QFileDevice::WriteError;
585 d->setError(err, d->fileEngine->errorString());
591 d->writeBuffer.append(data, len);
647bool QFileDevice::resize(qint64 sz)
650 if (!d->ensureFlushed())
653 if (isOpen() && d->fileEngine->pos() > sz)
655 if (d->fileEngine->setSize(sz)) {
661 d->setError(QFile::ResizeError, d->fileEngine->errorString());
726uchar *QFileDevice::map(qint64 offset, qint64 size, MemoryMapFlags flags)
730 && d->fileEngine->supportsExtension(QAbstractFileEngine::MapExtension)) {
732 uchar *address = d->fileEngine->map(offset, size, flags);
733 if (address ==
nullptr)
734 d->setError(d->fileEngine->error(), d->fileEngine->errorString());
747bool QFileDevice::unmap(uchar *address)
751 && d->fileEngine->supportsExtension(QAbstractFileEngine::UnMapExtension)) {
753 bool success = d->fileEngine->unmap(address);
755 d->setError(d->fileEngine->error(), d->fileEngine->errorString());
758 d->setError(PermissionsError, tr(
"No file engine available or engine does not support UnMapExtension"));
805bool QFileDevice::setFileTime(
const QDateTime &newDate, QFileDevice::FileTime fileTime)
810 d->setError(QFileDevice::UnspecifiedError, tr(
"No file engine available"));
814 if (!d->fileEngine->setFileTime(newDate, fileTime)) {
815 d->setError(d->fileEngine->error(), d->fileEngine->errorString());