void QTemporaryDirPrivate::create(const QString &templateName) { QTemporaryFileName tfn(templateName); for (int i = 0; i < 256; ++i) { tfn.generateNext(); QFileSystemEntry fileSystemEntry(tfn.path, QFileSystemEntry::FromNativePath()); if (QFileSystemEngine::createDirectory(fileSystemEntry, false)) { QSystemError error; QFileSystemEngine::setPermissions(fileSystemEntry, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner, error); if (error.error() != 0) { if (!QFileSystemEngine::removeDirectory(fileSystemEntry, false)) qWarning() << "Unable to remove unused directory" << templateName; continue; } success = true; pathOrError = fileSystemEntry.filePath(); return; } # ifdef Q_OS_WIN const int exists = ERROR_ALREADY_EXISTS; int code = GetLastError(); # else const int exists = EEXIST; int code = errno; # endif if (code != exists) break; } pathOrError = qt_error_string(); success = false; }
bool QFSFileEngine::setPermissions(uint perms) { Q_D(QFSFileEngine); QSystemError error; bool ret = QFileSystemEngine::setPermissions(d->fileEntry, QFile::Permissions(perms), error); if (!ret) setError(QFile::PermissionsError, error.toString()); return ret; }
bool QFSFileEngine::rename(const QString &newName) { Q_D(QFSFileEngine); QSystemError error; bool ret = QFileSystemEngine::renameFile(d->fileEntry, QFileSystemEntry(newName), error); if (!ret) setError(QFile::RenameError, error.toString()); return ret; }
bool QFSFileEngine::copy(const QString ©Name) { Q_D(QFSFileEngine); QSystemError error; bool ret = QFileSystemEngine::copyFile(d->fileEntry, QFileSystemEntry(copyName), error); if (!ret) setError(QFile::CopyError, error.toString()); return ret; }
bool QFSFileEngine::remove() { Q_D(QFSFileEngine); QSystemError error; bool ret = QFileSystemEngine::removeFile(d->fileEntry, error); if (!ret) setError(QFile::RemoveError, error.toString()); return ret; }
bool QFSFileEngine::setPermissions(uint perms) { Q_D(QFSFileEngine); QSystemError error; if (!QFileSystemEngine::setPermissions(d->fileEntry, QFile::Permissions(perms), error, 0)) { setError(QFile::PermissionsError, error.toString()); return false; } return true; }
bool QFSFileEngine::link(const QString &newName) { Q_D(QFSFileEngine); QSystemError error; bool ret = QFileSystemEngine::createLink(d->fileEntry, QFileSystemEntry(newName), error); if (!ret) { setError(QFile::RenameError, error.toString()); } return ret; }
bool QFSFileEngine::setSize(qint64 size) { Q_D(QFSFileEngine); bool ret = false; TInt err = KErrNone; if (d->symbianFile.SubSessionHandle()) { TInt err = d->symbianFile.SetSize(size); ret = (err == KErrNone); if (ret && d->symbianFilePos > size) d->symbianFilePos = size; } else if (d->fd != -1) ret = QT_FTRUNCATE(d->fd, size) == 0; else if (d->fh) ret = QT_FTRUNCATE(QT_FILENO(d->fh), size) == 0; else { RFile tmp; QString symbianFilename(d->fileEntry.nativeFilePath()); err = tmp.Open(qt_s60GetRFs(), qt_QString2TPtrC(symbianFilename), EFileWrite); if (err == KErrNone) { err = tmp.SetSize(size); tmp.Close(); } ret = (err == KErrNone); } if (!ret) { QSystemError error; if (err) error = QSystemError(err, QSystemError::NativeError); else error = QSystemError(errno, QSystemError::StandardLibraryError); setError(QFile::ResizeError, error.toString()); } return ret; }
bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) { Q_D(QFSFileEngine); Q_ASSERT(!isReallyOpen()); openMode |= QIODevice::ReadWrite; if (!filePathIsTemplate) return QFSFileEngine::open(openMode); QString qfilename = d->fileEntry.filePath(); // Ensure there is a placeholder mask uint phPos = qfilename.length(); uint phLength = 0; while (phPos != 0) { --phPos; if (qfilename[phPos] == QLatin1Char('X')) { ++phLength; continue; } if (phLength >= 6 || qfilename[phPos] == QLatin1Char('/')) { ++phPos; break; } // start over phLength = 0; } if (phLength < 6) qfilename.append(QLatin1String(".XXXXXX")); // "Nativify" :-) QFileSystemEntry::NativePath filename = QFileSystemEngine::absoluteName( QFileSystemEntry(qfilename, QFileSystemEntry::FromInternalPath())) .nativeFilePath(); // Find mask in native path phPos = filename.length(); phLength = 0; while (phPos != 0) { --phPos; if (filename[phPos] == Latin1Char('X')) { ++phLength; continue; } if (phLength >= 6) { ++phPos; break; } // start over phLength = 0; } Q_ASSERT(phLength >= 6); QSystemError error; #if defined(Q_OS_WIN) NativeFileHandle &file = d->fileHandle; #else // POSIX NativeFileHandle &file = d->fd; #endif if (!createFileFromTemplate(file, filename, phPos, phLength, error)) { setError(QFile::OpenError, error.toString()); return false; } d->fileEntry = QFileSystemEntry(filename, QFileSystemEntry::FromNativePath()); #if !defined(Q_OS_WIN) || defined(Q_OS_WINRT) d->closeFileHandle = true; #endif filePathIsTemplate = false; d->openMode = openMode; d->lastFlushFailed = false; d->tried_stat = 0; return true; }