5#ifndef QTEMPORARYFILE_P_H
6#define QTEMPORARYFILE_P_H
19#include <QtCore/qglobal.h>
21#include "private/qfsfileengine_p.h"
22#include "private/qfilesystemengine_p.h"
23#include "private/qfile_p.h"
26#if defined(Q_OS_LINUX) && QT_CONFIG(linkat)
31# if (O_TMPFILE & O_DIRECTORY) == O_DIRECTORY
32# define LINUX_UNNAMED_TMPFILE
39struct QTemporaryFileName
41 QFileSystemEntry::NativePath path;
45 QTemporaryFileName(
const QString &templateName);
46 QFileSystemEntry::NativePath generateNext();
49#if QT_CONFIG(temporaryfile)
51class QTemporaryFilePrivate :
public QFilePrivate
53 Q_DECLARE_PUBLIC(QTemporaryFile)
56 QTemporaryFilePrivate();
57 explicit QTemporaryFilePrivate(
const QString &templateNameIn);
58 ~QTemporaryFilePrivate();
60 bool rename(
const QString &newName,
bool overwrite);
62 QAbstractFileEngine *engine()
const override;
63 void resetFileEngine()
const;
64 void materializeUnnamedFile();
66 bool autoRemove =
true;
67 QString templateName = defaultTemplateName();
69 static QString defaultTemplateName();
71 friend class QLockFilePrivate;
74class QTemporaryFileEngine :
public QFSFileEngine
76 Q_DECLARE_PRIVATE(QFSFileEngine)
78 enum Flags { Win32NonShared = 0x1 };
80 explicit QTemporaryFileEngine(
const QString *_templateName,
int _flags = 0)
81 : templateName(*_templateName), flags(_flags)
84 void initialize(
const QString &file, quint32 mode,
bool nameIsTemplate =
true)
87 Q_ASSERT(!isReallyOpen());
89 filePathIsTemplate = filePathWasTemplate = nameIsTemplate;
91 if (filePathIsTemplate) {
94 QFSFileEngine::setFileEntry(QFileSystemEntry(file));
97 ~QTemporaryFileEngine();
99 bool isReallyOpen()
const;
100 void setFileName(
const QString &file) override;
102 bool open(QIODevice::OpenMode flags, std::optional<QFile::Permissions> permissions) override;
103 bool remove() override;
104 bool rename(
const QString &newName) override;
105 bool renameOverwrite(
const QString &newName) override;
106 bool close() override;
107 QString fileName(FileName file)
const override;
109 enum MaterializationMode { Overwrite, DontOverwrite, NameIsTemplate };
110 bool materializeUnnamedFile(
const QString &newName, MaterializationMode mode);
111 bool isUnnamedFile()
const override final;
113 const QString &templateName;
114 quint32 fileMode = 0;
116 bool filePathIsTemplate =
true;
117 bool filePathWasTemplate =
true;
118 bool unnamedFile =
false;