Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qabstractfileengine_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QABSTRACTFILEENGINE_P_H
6#define QABSTRACTFILEENGINE_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtCore/private/qglobal_p.h>
20#include "QtCore/qfile.h"
21#include "QtCore/qdir.h"
22#include "QtCore/qdirlisting.h"
23
24#include <memory>
25#include <optional>
26
27#ifdef open
28#error qabstractfileengine_p.h must be included before any header file that defines open
29#endif
30
31QT_BEGIN_NAMESPACE
32
33class QVariant;
34class QAbstractFileEngineIterator;
36
37class Q_CORE_EXPORT QAbstractFileEngine
38{
39public:
40 enum FileFlag {
41 //perms (overlaps the QFile::Permission)
42 ReadOwnerPerm = 0x4000, WriteOwnerPerm = 0x2000, ExeOwnerPerm = 0x1000,
43 ReadUserPerm = 0x0400, WriteUserPerm = 0x0200, ExeUserPerm = 0x0100,
44 ReadGroupPerm = 0x0040, WriteGroupPerm = 0x0020, ExeGroupPerm = 0x0010,
45 ReadOtherPerm = 0x0004, WriteOtherPerm = 0x0002, ExeOtherPerm = 0x0001,
46
47 //types
48 LinkType = 0x10000,
49 FileType = 0x20000,
50 DirectoryType = 0x40000,
51 BundleType = 0x80000,
52
53 //flags
54 HiddenFlag = 0x0100000,
55 LocalDiskFlag = 0x0200000,
56 ExistsFlag = 0x0400000,
57 RootFlag = 0x0800000,
58 Refresh = 0x1000000,
59
60 //masks
61 PermsMask = 0x0000FFFF,
62 TypesMask = 0x000F0000,
63 FlagsMask = 0x0FF00000,
64 FileInfoAll = FlagsMask | PermsMask | TypesMask
65 };
66 Q_DECLARE_FLAGS(FileFlags, FileFlag)
67
68 enum FileName {
69 DefaultName,
70 BaseName,
71 PathName,
72 AbsoluteName,
73 AbsolutePathName,
74 AbsoluteLinkTarget,
75 CanonicalName,
76 CanonicalPathName,
77 BundleName,
78 JunctionName,
79 RawLinkPath,
80 NFileNames // Must be last.
81 };
82 enum FileOwner {
83 OwnerUser,
84 OwnerGroup
85 };
86
87 enum class TriStateResult : qint8 {
88 NotSupported = -1,
89 Failed = 0,
90 Success = 1,
91 };
92
93 virtual ~QAbstractFileEngine();
94
95 virtual bool open(QIODevice::OpenMode openMode,
96 std::optional<QFile::Permissions> permissions = std::nullopt);
97 virtual bool close();
98 virtual bool flush();
99 virtual bool syncToDisk();
100 virtual qint64 size() const;
101 virtual qint64 pos() const;
102 virtual bool seek(qint64 pos);
103 virtual bool isSequential() const;
104 virtual bool remove();
105 virtual bool copy(const QString &newName);
106 virtual bool rename(const QString &newName);
107 virtual bool renameOverwrite(const QString &newName);
108 virtual bool link(const QString &newName);
109 virtual bool mkdir(const QString &dirName, bool createParentDirectories,
110 std::optional<QFile::Permissions> permissions = std::nullopt) const;
111 virtual bool rmdir(const QString &dirName, bool recurseParentDirectories) const;
112 virtual bool setSize(qint64 size);
113 virtual bool caseSensitive() const;
114 virtual bool isRelativePath() const;
115 virtual FileFlags fileFlags(FileFlags type=FileInfoAll) const;
116 virtual bool setPermissions(uint perms);
117 virtual QByteArray id() const;
118 virtual QString fileName(FileName file=DefaultName) const;
119 virtual uint ownerId(FileOwner) const;
120 virtual QString owner(FileOwner) const;
121 virtual bool setFileTime(const QDateTime &newDate, QFile::FileTime time);
122 virtual QDateTime fileTime(QFile::FileTime time) const;
123 virtual void setFileName(const QString &file);
124 virtual int handle() const;
125 virtual TriStateResult cloneTo(QAbstractFileEngine *target);
126 bool atEnd() const;
127 uchar *map(qint64 offset, qint64 size, QFile::MemoryMapFlags flags);
128 bool unmap(uchar *ptr);
129
130 typedef QAbstractFileEngineIterator Iterator;
131 using IteratorUniquePtr = std::unique_ptr<Iterator>;
132
133 virtual IteratorUniquePtr endEntryList() { return {}; }
134 virtual IteratorUniquePtr
135 beginEntryList(const QString &path, QDirListing::IteratorFlags filters,
136 const QStringList &filterNames);
137
138 virtual qint64 read(char *data, qint64 maxlen);
139 virtual qint64 readLine(char *data, qint64 maxlen);
140 virtual qint64 write(const char *data, qint64 len);
141
142 QFile::FileError error() const;
143 QString errorString() const;
144
145 enum Extension {
146 AtEndExtension,
147 FastReadLineExtension,
148 MapExtension,
149 UnMapExtension
150 };
151 class ExtensionOption
152 {};
153 class ExtensionReturn
154 {};
155
156 class MapExtensionOption : public ExtensionOption {
157 Q_DISABLE_COPY_MOVE(MapExtensionOption)
158 public:
159 qint64 offset;
160 qint64 size;
161 QFile::MemoryMapFlags flags;
162 constexpr MapExtensionOption(qint64 off, qint64 sz, QFile::MemoryMapFlags f)
163 : offset(off), size(sz), flags(f) {}
164 };
165 class MapExtensionReturn : public ExtensionReturn {
166 Q_DISABLE_COPY_MOVE(MapExtensionReturn)
167 public:
168 MapExtensionReturn() = default;
169 uchar *address = nullptr;
170 };
171
172 class UnMapExtensionOption : public ExtensionOption {
173 Q_DISABLE_COPY_MOVE(UnMapExtensionOption)
174 public:
175 uchar *address = nullptr;
176 constexpr UnMapExtensionOption(uchar *p) : address(p) {}
177 };
178
179 virtual bool extension(Extension extension, const ExtensionOption *option = nullptr, ExtensionReturn *output = nullptr);
180 virtual bool supportsExtension(Extension extension) const;
181
182 // Factory
183 static std::unique_ptr<QAbstractFileEngine> create(const QString &fileName);
184
185protected:
186 void setError(QFile::FileError error, const QString &str);
187
188 QAbstractFileEngine();
189 QAbstractFileEngine(QAbstractFileEnginePrivate &);
190
191 QScopedPointer<QAbstractFileEnginePrivate> d_ptr;
192private:
193 Q_DECLARE_PRIVATE(QAbstractFileEngine)
194 Q_DISABLE_COPY_MOVE(QAbstractFileEngine)
195};
196
197Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractFileEngine::FileFlags)
198
199class Q_CORE_EXPORT QAbstractFileEngineHandler
200{
201 Q_DISABLE_COPY_MOVE(QAbstractFileEngineHandler)
202public:
203 QAbstractFileEngineHandler();
204 virtual ~QAbstractFileEngineHandler();
205 virtual std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const = 0;
206};
207
209{
210public:
211 QAbstractFileEngineIterator(const QString &path, QDir::Filters filters,
212 const QStringList &nameFilters);
213 QAbstractFileEngineIterator(const QString &path, QDirListing::IteratorFlags filters,
214 const QStringList &nameFilters);
215 virtual ~QAbstractFileEngineIterator();
216
217 virtual bool advance() = 0;
218
219 QString path() const;
220 QStringList nameFilters() const;
221 QDir::Filters filters() const;
222
223 virtual QString currentFileName() const = 0;
224 virtual QFileInfo currentFileInfo() const;
225 virtual QString currentFilePath() const;
226
227protected:
228 mutable QFileInfo m_fileInfo;
229
230private:
231 Q_DISABLE_COPY_MOVE(QAbstractFileEngineIterator)
232 friend class QDirIterator;
233 friend class QDirIteratorPrivate;
234 friend class QDirListingPrivate;
235
236 QDir::Filters m_filters;
237 QDirListing::IteratorFlags m_listingFilters;
238 QStringList m_nameFilters;
239 QString m_path;
240};
241
243{
244public:
245 inline QAbstractFileEnginePrivate(QAbstractFileEngine *q)
247 {
248 }
250
253
255 Q_DECLARE_PUBLIC(QAbstractFileEngine)
256};
257
259
260QT_END_NAMESPACE
261
262#endif // QABSTRACTFILEENGINE_P_H
The QAbstractFileEngineIterator class provides an iterator interface for custom file engines.
virtual ~QAbstractFileEnginePrivate()
QAbstractFileEnginePrivate(QAbstractFileEngine *q)
QAbstractFileEngine *const q_ptr
\inmodule QtCore \reentrant
\inmodule QtCore
Definition qdirlisting.h:68
QDirPrivate(const QDirPrivate &copy)
Definition qdir.cpp:105
@ UrlNormalizationMode
Definition qdir_p.h:34
@ RemotePath
Definition qdir_p.h:35
MetaDataClearing
Definition qdir_p.h:65
@ IncludingMetaData
Definition qdir_p.h:65
void clearCache(MetaDataClearing mode)
Definition qdir.cpp:470
void initFileLists(const QDir &dir) const
Definition qdir.cpp:455
bool exists() const
Definition qdir.cpp:122
QString resolveAbsoluteEntry() const
Definition qdir.cpp:178
bool operator()(const QDirSortItem &, const QDirSortItem &) const
Definition qdir.cpp:258
QDirSortItemComparator(QDir::SortFlags flags, QCollator *coll=nullptr)
Definition qdir.cpp:232
int compareStrings(const QString &a, const QString &b, Qt::CaseSensitivity cs) const
Definition qdir.cpp:248
\inmodule QtCore
Definition qmutex.h:346
std::unique_ptr< QAbstractFileEngine > qt_custom_file_engine_handler_create(const QString &path)
static void appendIfMatchesNonDirListingFlags(const QDirListing::DirEntry &dirEntry, QDir::Filters filters, QFileInfoList &l)
Definition qdir.cpp:402
static qsizetype rootLength(QStringView name, QDirPrivate::PathNormalizations flags)
Definition qdir.cpp:56
static bool qt_cleanPath(QString *path)
Definition qdir.cpp:2485
bool comparesEqual(const QDir &lhs, const QDir &rhs)
Definition qdir.cpp:1936
static bool treatAsAbsolute(const QString &path)
Definition qdir.cpp:866
static bool checkPermissions(const QDirListing::DirEntry &dirEntry, QDir::Filters filters)
Definition qdir.cpp:364
bool qt_normalizePathSegments(QString *path, QDirPrivate::PathNormalizations flags)
Definition qdir.cpp:2346
static bool checkDotOrDotDot(const QDirListing::DirEntry &dirEntry, QDir::Filters filters)
Definition qdir.cpp:380
Q_AUTOTEST_EXPORT bool qt_normalizePathSegments(QString *path, QDirPrivate::PathNormalizations flags)
Definition qdir.cpp:2346
QFileInfo item
Definition qdir.cpp:220
QString suffix_cache
Definition qdir.cpp:219
QDirSortItem(const QFileInfo &fi, QDir::SortFlags sort)
Definition qdir.cpp:208
QDirSortItem()=default
QString filename_cache
Definition qdir.cpp:218