Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qfilesystemengine_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
4#ifndef QFILESYSTEMENGINE_P_H
5#define QFILESYSTEMENGINE_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qfile.h"
19#include "qfilesystementry_p.h"
21#include <QtCore/private/qsystemerror_p.h>
22
23#include <memory>
24#include <optional>
25
27
28#define Q_RETURN_ON_INVALID_FILENAME(message, result) \
29 { \
30 QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).warning(message); \
31 errno = EINVAL; \
32 return (result); \
33 }
34
36{
37 return name.contains('\0');
38}
39
40inline bool qIsFilenameBroken(const QString &name)
41{
42 return name.contains(QLatin1Char('\0'));
43}
44
46{
47 return qIsFilenameBroken(entry.nativeFilePath());
48}
49
50#define Q_CHECK_FILE_NAME(name, result) \
51 do { \
52 if (Q_UNLIKELY((name).isEmpty())) \
53 Q_RETURN_ON_INVALID_FILENAME("Empty filename passed to function", (result)); \
54 if (Q_UNLIKELY(qIsFilenameBroken(name))) \
55 Q_RETURN_ON_INVALID_FILENAME("Broken filename passed to function", (result)); \
56 } while (false)
57
59{
60public:
61 static bool isCaseSensitive()
62 {
63#ifndef Q_OS_WIN
64 return true;
65#else
66 return false;
67#endif
68 }
69
70 static QFileSystemEntry getLinkTarget(const QFileSystemEntry &link, QFileSystemMetaData &data);
71 static QFileSystemEntry getRawLinkPath(const QFileSystemEntry &link,
73 static QFileSystemEntry getJunctionTarget(const QFileSystemEntry &link, QFileSystemMetaData &data);
74 static QFileSystemEntry canonicalName(const QFileSystemEntry &entry, QFileSystemMetaData &data);
75 static QFileSystemEntry absoluteName(const QFileSystemEntry &entry);
76 static QByteArray id(const QFileSystemEntry &entry);
77 static QString resolveUserName(const QFileSystemEntry &entry, QFileSystemMetaData &data);
78 static QString resolveGroupName(const QFileSystemEntry &entry, QFileSystemMetaData &data);
79
80#if defined(Q_OS_UNIX)
81 static QString resolveUserName(uint userId);
82 static QString resolveGroupName(uint groupId);
83#endif
84
85#if defined(Q_OS_DARWIN)
86 static QString bundleName(const QFileSystemEntry &entry);
87#else
88 static QString bundleName(const QFileSystemEntry &) { return QString(); }
89#endif
90
91 static bool fillMetaData(const QFileSystemEntry &entry, QFileSystemMetaData &data,
92 QFileSystemMetaData::MetaDataFlags what);
93#if defined(Q_OS_UNIX)
94 static bool cloneFile(int srcfd, int dstfd, const QFileSystemMetaData &knownData);
95 static bool fillMetaData(int fd, QFileSystemMetaData &data); // what = PosixStatFlags
96 static QByteArray id(int fd);
97 static bool setFileTime(int fd, const QDateTime &newDate,
99 static bool setPermissions(int fd, QFile::Permissions permissions, QSystemError &error,
100 QFileSystemMetaData *data = nullptr);
101#endif
102#if defined(Q_OS_WIN)
103 static QFileSystemEntry junctionTarget(const QFileSystemEntry &link, QFileSystemMetaData &data);
104 static bool uncListSharesOnServer(const QString &server, QStringList *list); //Used also by QFSFileEngineIterator::hasNext()
105 static bool fillMetaData(int fd, QFileSystemMetaData &data,
106 QFileSystemMetaData::MetaDataFlags what);
107 static bool fillMetaData(HANDLE fHandle, QFileSystemMetaData &data,
108 QFileSystemMetaData::MetaDataFlags what);
109 static bool fillPermissions(const QFileSystemEntry &entry, QFileSystemMetaData &data,
110 QFileSystemMetaData::MetaDataFlags what);
111 static QByteArray id(HANDLE fHandle);
112 static bool setFileTime(HANDLE fHandle, const QDateTime &newDate,
115 static QString nativeAbsoluteFilePath(const QString &path);
116 static bool isDirPath(const QString &path, bool *existed);
117#endif
118 //homePath, rootPath and tempPath shall return clean paths
119 static QString homePath();
120 static QString rootPath();
121 static QString tempPath();
122
123 static bool createDirectory(const QFileSystemEntry &entry, bool createParents,
124 std::optional<QFile::Permissions> permissions = std::nullopt);
125 static bool removeDirectory(const QFileSystemEntry &entry, bool removeEmptyParents);
126
127 static bool createLink(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error);
128
129 static bool copyFile(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error);
130 static bool moveFileToTrash(const QFileSystemEntry &source, QFileSystemEntry &newLocation, QSystemError &error);
131 static bool renameFile(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error);
132 static bool renameOverwriteFile(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error);
133 static bool removeFile(const QFileSystemEntry &entry, QSystemError &error);
134
135 static bool setPermissions(const QFileSystemEntry &entry, QFile::Permissions permissions, QSystemError &error,
136 QFileSystemMetaData *data = nullptr);
137
138 // unused, therefore not implemented
139 static bool setFileTime(const QFileSystemEntry &entry, const QDateTime &newDate,
141
142 static bool setCurrentPath(const QFileSystemEntry &entry);
143 static QFileSystemEntry currentPath();
144
145 static std::unique_ptr<QAbstractFileEngine>
146 createLegacyEngine(QFileSystemEntry &entry, QFileSystemMetaData &data);
147
148private:
149 static QString slowCanonicalized(const QString &path);
150#if defined(Q_OS_WIN)
151 static void clearWinStatData(QFileSystemMetaData &data);
152#endif
153};
154
156
157#endif // include guard
FileOwner
\value OwnerUser The user who owns the file.
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore\reentrant
Definition qdatetime.h:283
static QString bundleName(const QFileSystemEntry &)
static bool isCaseSensitive()
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage return DBusPendingCall DBusPendingCall return DBusPendingCall return dbus_int32_t return DBusServer * server
DBusConnection const char DBusError * error
bool qIsFilenameBroken(const QByteArray &name)
GLenum GLuint id
[7]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum target
GLuint64 GLenum GLint fd
GLuint name
GLsizei GLsizei GLchar * source
GLuint entry
GLsizei const GLchar *const * path
#define Q_AUTOTEST_EXPORT
unsigned int uint
Definition qtypes.h:34
QList< int > list
[14]
\inmodule QtCore \reentrant
Definition qchar.h:18
bool createDirectory(const QString &directory, QString *errorMessage, bool dryRun)
Definition utils.cpp:64