| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/corelib/io/qabstractfileengine.cpp |
| Source code | Switch to Preprocessed file |
| Line | Source | Count | ||||||
|---|---|---|---|---|---|---|---|---|
| 1 | /**************************************************************************** | - | ||||||
| 2 | ** | - | ||||||
| 3 | ** Copyright (C) 2016 The Qt Company Ltd. | - | ||||||
| 4 | ** Contact: https://www.qt.io/licensing/ | - | ||||||
| 5 | ** | - | ||||||
| 6 | ** This file is part of the QtCore module of the Qt Toolkit. | - | ||||||
| 7 | ** | - | ||||||
| 8 | ** $QT_BEGIN_LICENSE:LGPL$ | - | ||||||
| 9 | ** Commercial License Usage | - | ||||||
| 10 | ** Licensees holding valid commercial Qt licenses may use this file in | - | ||||||
| 11 | ** accordance with the commercial license agreement provided with the | - | ||||||
| 12 | ** Software or, alternatively, in accordance with the terms contained in | - | ||||||
| 13 | ** a written agreement between you and The Qt Company. For licensing terms | - | ||||||
| 14 | ** and conditions see https://www.qt.io/terms-conditions. For further | - | ||||||
| 15 | ** information use the contact form at https://www.qt.io/contact-us. | - | ||||||
| 16 | ** | - | ||||||
| 17 | ** GNU Lesser General Public License Usage | - | ||||||
| 18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | - | ||||||
| 19 | ** General Public License version 3 as published by the Free Software | - | ||||||
| 20 | ** Foundation and appearing in the file LICENSE.LGPL3 included in the | - | ||||||
| 21 | ** packaging of this file. Please review the following information to | - | ||||||
| 22 | ** ensure the GNU Lesser General Public License version 3 requirements | - | ||||||
| 23 | ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. | - | ||||||
| 24 | ** | - | ||||||
| 25 | ** GNU General Public License Usage | - | ||||||
| 26 | ** Alternatively, this file may be used under the terms of the GNU | - | ||||||
| 27 | ** General Public License version 2.0 or (at your option) the GNU General | - | ||||||
| 28 | ** Public license version 3 or any later version approved by the KDE Free | - | ||||||
| 29 | ** Qt Foundation. The licenses are as published by the Free Software | - | ||||||
| 30 | ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 | - | ||||||
| 31 | ** included in the packaging of this file. Please review the following | - | ||||||
| 32 | ** information to ensure the GNU General Public License requirements will | - | ||||||
| 33 | ** be met: https://www.gnu.org/licenses/gpl-2.0.html and | - | ||||||
| 34 | ** https://www.gnu.org/licenses/gpl-3.0.html. | - | ||||||
| 35 | ** | - | ||||||
| 36 | ** $QT_END_LICENSE$ | - | ||||||
| 37 | ** | - | ||||||
| 38 | ****************************************************************************/ | - | ||||||
| 39 | - | |||||||
| 40 | #include "private/qabstractfileengine_p.h" | - | ||||||
| 41 | #include "private/qfsfileengine_p.h" | - | ||||||
| 42 | #ifdef QT_BUILD_CORE_LIB | - | ||||||
| 43 | #include "private/qresource_p.h" | - | ||||||
| 44 | #endif | - | ||||||
| 45 | #include "qdatetime.h" | - | ||||||
| 46 | #include "qreadwritelock.h" | - | ||||||
| 47 | #include "qvariant.h" | - | ||||||
| 48 | // built-in handlers | - | ||||||
| 49 | #include "qdiriterator.h" | - | ||||||
| 50 | #include "qstringbuilder.h" | - | ||||||
| 51 | - | |||||||
| 52 | #include <QtCore/private/qfilesystementry_p.h> | - | ||||||
| 53 | #include <QtCore/private/qfilesystemmetadata_p.h> | - | ||||||
| 54 | #include <QtCore/private/qfilesystemengine_p.h> | - | ||||||
| 55 | - | |||||||
| 56 | QT_BEGIN_NAMESPACE | - | ||||||
| 57 | - | |||||||
| 58 | /*! | - | ||||||
| 59 | \class QAbstractFileEngineHandler | - | ||||||
| 60 | \inmodule QtCore | - | ||||||
| 61 | \reentrant | - | ||||||
| 62 | \internal | - | ||||||
| 63 | - | |||||||
| 64 | \brief The QAbstractFileEngineHandler class provides a way to register | - | ||||||
| 65 | custom file engines with your application. | - | ||||||
| 66 | - | |||||||
| 67 | \ingroup io | - | ||||||
| 68 | \since 4.1 | - | ||||||
| 69 | - | |||||||
| 70 | QAbstractFileEngineHandler is a factory for creating QAbstractFileEngine | - | ||||||
| 71 | objects (file engines), which are used internally by QFile, QFileInfo, and | - | ||||||
| 72 | QDir when working with files and directories. | - | ||||||
| 73 | - | |||||||
| 74 | When you open a file, Qt chooses a suitable file engine by passing the | - | ||||||
| 75 | file name from QFile or QDir through an internal list of registered file | - | ||||||
| 76 | engine handlers. The first handler to recognize the file name is used to | - | ||||||
| 77 | create the engine. Qt provides internal file engines for working with | - | ||||||
| 78 | regular files and resources, but you can also register your own | - | ||||||
| 79 | QAbstractFileEngine subclasses. | - | ||||||
| 80 | - | |||||||
| 81 | To install an application-specific file engine, you subclass | - | ||||||
| 82 | QAbstractFileEngineHandler and reimplement create(). When you instantiate | - | ||||||
| 83 | the handler (e.g. by creating an instance on the stack or on the heap), it | - | ||||||
| 84 | will automatically register with Qt. (The latest registered handler takes | - | ||||||
| 85 | precedence over existing handlers.) | - | ||||||
| 86 | - | |||||||
| 87 | For example: | - | ||||||
| 88 | - | |||||||
| 89 | \snippet code/src_corelib_io_qabstractfileengine.cpp 0 | - | ||||||
| 90 | - | |||||||
| 91 | When the handler is destroyed, it is automatically removed from Qt. | - | ||||||
| 92 | - | |||||||
| 93 | The most common approach to registering a handler is to create an instance | - | ||||||
| 94 | as part of the start-up phase of your application. It is also possible to | - | ||||||
| 95 | limit the scope of the file engine handler to a particular area of | - | ||||||
| 96 | interest (e.g. a special file dialog that needs a custom file engine). By | - | ||||||
| 97 | creating the handler inside a local scope, you can precisely control the | - | ||||||
| 98 | area in which your engine will be applied without disturbing file | - | ||||||
| 99 | operations in other parts of your application. | - | ||||||
| 100 | - | |||||||
| 101 | \sa QAbstractFileEngine, QAbstractFileEngine::create() | - | ||||||
| 102 | */ | - | ||||||
| 103 | - | |||||||
| 104 | static bool qt_file_engine_handlers_in_use = false; | - | ||||||
| 105 | - | |||||||
| 106 | /* | - | ||||||
| 107 | All application-wide handlers are stored in this list. The mutex must be | - | ||||||
| 108 | acquired to ensure thread safety. | - | ||||||
| 109 | */ | - | ||||||
| 110 | Q_GLOBAL_STATIC_WITH_ARGS(QReadWriteLock, fileEngineHandlerMutex, (QReadWriteLock::Recursive)) executed 3 times by 3 tests: end of blockExecuted by:
executed 3 times by 3 tests: guard.store(QtGlobalStatic::Destroyed);Executed by:
executed 120 times by 6 tests: return &holder.value;Executed by:
| 0-120 | ||||||
| 111 | static bool qt_abstractfileenginehandlerlist_shutDown = false; | - | ||||||
| 112 | class QAbstractFileEngineHandlerList : public QList<QAbstractFileEngineHandler *> | - | ||||||
| 113 | { | - | ||||||
| 114 | public: | - | ||||||
| 115 | ~QAbstractFileEngineHandlerList() | - | ||||||
| 116 | { | - | ||||||
| 117 | QWriteLocker locker(fileEngineHandlerMutex()); | - | ||||||
| 118 | qt_abstractfileenginehandlerlist_shutDown = true; | - | ||||||
| 119 | } executed 3 times by 3 tests: end of blockExecuted by:
| 3 | ||||||
| 120 | }; | - | ||||||
| 121 | Q_GLOBAL_STATIC(QAbstractFileEngineHandlerList, fileEngineHandlers) executed 3 times by 3 tests: end of blockExecuted by:
executed 3 times by 3 tests: guard.store(QtGlobalStatic::Destroyed);Executed by:
executed 117 times by 3 tests: return &holder.value;Executed by:
| 0-117 | ||||||
| 122 | - | |||||||
| 123 | /*! | - | ||||||
| 124 | Constructs a file handler and registers it with Qt. Once created this | - | ||||||
| 125 | handler's create() function will be called (along with all the other | - | ||||||
| 126 | handlers) for any paths used. The most recently created handler that | - | ||||||
| 127 | recognizes the given path (i.e. that returns a QAbstractFileEngine) is | - | ||||||
| 128 | used for the new path. | - | ||||||
| 129 | - | |||||||
| 130 | \sa create() | - | ||||||
| 131 | */ | - | ||||||
| 132 | QAbstractFileEngineHandler::QAbstractFileEngineHandler() | - | ||||||
| 133 | { | - | ||||||
| 134 | QWriteLocker locker(fileEngineHandlerMutex()); | - | ||||||
| 135 | qt_file_engine_handlers_in_use = true; | - | ||||||
| 136 | fileEngineHandlers()->prepend(this); | - | ||||||
| 137 | } executed 15 times by 3 tests: end of blockExecuted by:
| 15 | ||||||
| 138 | - | |||||||
| 139 | /*! | - | ||||||
| 140 | Destroys the file handler. This will automatically unregister the handler | - | ||||||
| 141 | from Qt. | - | ||||||
| 142 | */ | - | ||||||
| 143 | QAbstractFileEngineHandler::~QAbstractFileEngineHandler() | - | ||||||
| 144 | { | - | ||||||
| 145 | QWriteLocker locker(fileEngineHandlerMutex()); | - | ||||||
| 146 | // Remove this handler from the handler list only if the list is valid. | - | ||||||
| 147 | if (!qt_abstractfileenginehandlerlist_shutDown) {
| 0-15 | ||||||
| 148 | QAbstractFileEngineHandlerList *handlers = fileEngineHandlers(); | - | ||||||
| 149 | handlers->removeOne(this); | - | ||||||
| 150 | if (handlers->isEmpty())
| 1-14 | ||||||
| 151 | qt_file_engine_handlers_in_use = false; executed 14 times by 3 tests: qt_file_engine_handlers_in_use = false;Executed by:
| 14 | ||||||
| 152 | } executed 15 times by 3 tests: end of blockExecuted by:
| 15 | ||||||
| 153 | } executed 15 times by 3 tests: end of blockExecuted by:
| 15 | ||||||
| 154 | - | |||||||
| 155 | /* | - | ||||||
| 156 | \internal | - | ||||||
| 157 | - | |||||||
| 158 | Handles calls to custom file engine handlers. | - | ||||||
| 159 | */ | - | ||||||
| 160 | QAbstractFileEngine *qt_custom_file_engine_handler_create(const QString &path) | - | ||||||
| 161 | { | - | ||||||
| 162 | QAbstractFileEngine *engine = 0; | - | ||||||
| 163 | - | |||||||
| 164 | if (qt_file_engine_handlers_in_use) {
| 87-305828 | ||||||
| 165 | QReadLocker locker(fileEngineHandlerMutex()); | - | ||||||
| 166 | - | |||||||
| 167 | // check for registered handlers that can load the file | - | ||||||
| 168 | QAbstractFileEngineHandlerList *handlers = fileEngineHandlers(); | - | ||||||
| 169 | for (int i = 0; i < handlers->size(); i++) {
| 34-87 | ||||||
| 170 | if ((engine = handlers->at(i)->create(path)))
| 34-53 | ||||||
| 171 | break; executed 53 times by 3 tests: break;Executed by:
| 53 | ||||||
| 172 | } executed 34 times by 2 tests: end of blockExecuted by:
| 34 | ||||||
| 173 | } executed 87 times by 3 tests: end of blockExecuted by:
| 87 | ||||||
| 174 | - | |||||||
| 175 | return engine; executed 305915 times by 303 tests: return engine;Executed by:
| 305915 | ||||||
| 176 | } | - | ||||||
| 177 | - | |||||||
| 178 | /*! | - | ||||||
| 179 | \fn QAbstractFileEngine *QAbstractFileEngineHandler::create(const QString &fileName) const | - | ||||||
| 180 | - | |||||||
| 181 | Creates a file engine for file \a fileName. Returns 0 if this | - | ||||||
| 182 | file handler cannot handle \a fileName. | - | ||||||
| 183 | - | |||||||
| 184 | Example: | - | ||||||
| 185 | - | |||||||
| 186 | \snippet code/src_corelib_io_qabstractfileengine.cpp 1 | - | ||||||
| 187 | - | |||||||
| 188 | \sa QAbstractFileEngine::create() | - | ||||||
| 189 | */ | - | ||||||
| 190 | - | |||||||
| 191 | /*! | - | ||||||
| 192 | Creates and returns a QAbstractFileEngine suitable for processing \a | - | ||||||
| 193 | fileName. | - | ||||||
| 194 | - | |||||||
| 195 | You should not need to call this function; use QFile, QFileInfo or | - | ||||||
| 196 | QDir directly instead. | - | ||||||
| 197 | - | |||||||
| 198 | If you reimplemnt this function, it should only return file | - | ||||||
| 199 | engines that knows how to handle \a fileName; otherwise, it should | - | ||||||
| 200 | return 0. | - | ||||||
| 201 | - | |||||||
| 202 | \sa QAbstractFileEngineHandler | - | ||||||
| 203 | */ | - | ||||||
| 204 | QAbstractFileEngine *QAbstractFileEngine::create(const QString &fileName) | - | ||||||
| 205 | { | - | ||||||
| 206 | QFileSystemEntry entry(fileName); | - | ||||||
| 207 | QFileSystemMetaData metaData; | - | ||||||
| 208 | QAbstractFileEngine *engine = QFileSystemEngine::resolveEntryAndCreateLegacyEngine(entry, metaData); | - | ||||||
| 209 | - | |||||||
| 210 | #ifndef QT_NO_FSFILEENGINE | - | ||||||
| 211 | if (!engine)
| 14942-47048 | ||||||
| 212 | // fall back to regular file engine | - | ||||||
| 213 | return new QFSFileEngine(entry.filePath()); executed 47048 times by 207 tests: return new QFSFileEngine(entry.filePath());Executed by:
| 47048 | ||||||
| 214 | #endif | - | ||||||
| 215 | - | |||||||
| 216 | return engine; executed 14942 times by 83 tests: return engine;Executed by:
| 14942 | ||||||
| 217 | } | - | ||||||
| 218 | - | |||||||
| 219 | /*! | - | ||||||
| 220 | \class QAbstractFileEngine | - | ||||||
| 221 | \inmodule QtCore | - | ||||||
| 222 | \reentrant | - | ||||||
| 223 | \internal | - | ||||||
| 224 | - | |||||||
| 225 | \brief The QAbstractFileEngine class provides an abstraction for accessing | - | ||||||
| 226 | the filesystem. | - | ||||||
| 227 | - | |||||||
| 228 | \ingroup io | - | ||||||
| 229 | \since 4.1 | - | ||||||
| 230 | - | |||||||
| 231 | The QDir, QFile, and QFileInfo classes all make use of a | - | ||||||
| 232 | QAbstractFileEngine internally. If you create your own QAbstractFileEngine | - | ||||||
| 233 | subclass (and register it with Qt by creating a QAbstractFileEngineHandler | - | ||||||
| 234 | subclass), your file engine will be used when the path is one that your | - | ||||||
| 235 | file engine handles. | - | ||||||
| 236 | - | |||||||
| 237 | A QAbstractFileEngine refers to one file or one directory. If the referent | - | ||||||
| 238 | is a file, the setFileName(), rename(), and remove() functions are | - | ||||||
| 239 | applicable. If the referent is a directory the mkdir(), rmdir(), and | - | ||||||
| 240 | entryList() functions are applicable. In all cases the caseSensitive(), | - | ||||||
| 241 | isRelativePath(), fileFlags(), ownerId(), owner(), and fileTime() | - | ||||||
| 242 | functions are applicable. | - | ||||||
| 243 | - | |||||||
| 244 | A QAbstractFileEngine subclass can be created to do synchronous network I/O | - | ||||||
| 245 | based file system operations, local file system operations, or to operate | - | ||||||
| 246 | as a resource system to access file based resources. | - | ||||||
| 247 | - | |||||||
| 248 | \sa QAbstractFileEngineHandler | - | ||||||
| 249 | */ | - | ||||||
| 250 | - | |||||||
| 251 | /*! | - | ||||||
| 252 | \enum QAbstractFileEngine::FileName | - | ||||||
| 253 | - | |||||||
| 254 | These values are used to request a file name in a particular | - | ||||||
| 255 | format. | - | ||||||
| 256 | - | |||||||
| 257 | \value DefaultName The same filename that was passed to the | - | ||||||
| 258 | QAbstractFileEngine. | - | ||||||
| 259 | \value BaseName The name of the file excluding the path. | - | ||||||
| 260 | \value PathName The path to the file excluding the base name. | - | ||||||
| 261 | \value AbsoluteName The absolute path to the file (including | - | ||||||
| 262 | the base name). | - | ||||||
| 263 | \value AbsolutePathName The absolute path to the file (excluding | - | ||||||
| 264 | the base name). | - | ||||||
| 265 | \value LinkName The full file name of the file that this file is a | - | ||||||
| 266 | link to. (This will be empty if this file is not a link.) | - | ||||||
| 267 | \value CanonicalName Often very similar to LinkName. Will return the true path to the file. | - | ||||||
| 268 | \value CanonicalPathName Same as CanonicalName, excluding the base name. | - | ||||||
| 269 | \value BundleName Returns the name of the bundle implies BundleType is set. | - | ||||||
| 270 | - | |||||||
| 271 | \omitvalue NFileNames | - | ||||||
| 272 | - | |||||||
| 273 | \sa fileName(), setFileName() | - | ||||||
| 274 | */ | - | ||||||
| 275 | - | |||||||
| 276 | /*! | - | ||||||
| 277 | \enum QAbstractFileEngine::FileFlag | - | ||||||
| 278 | - | |||||||
| 279 | The permissions and types of a file, suitable for OR'ing together. | - | ||||||
| 280 | - | |||||||
| 281 | \value ReadOwnerPerm The owner of the file has permission to read | - | ||||||
| 282 | it. | - | ||||||
| 283 | \value WriteOwnerPerm The owner of the file has permission to | - | ||||||
| 284 | write to it. | - | ||||||
| 285 | \value ExeOwnerPerm The owner of the file has permission to | - | ||||||
| 286 | execute it. | - | ||||||
| 287 | \value ReadUserPerm The current user has permission to read the | - | ||||||
| 288 | file. | - | ||||||
| 289 | \value WriteUserPerm The current user has permission to write to | - | ||||||
| 290 | the file. | - | ||||||
| 291 | \value ExeUserPerm The current user has permission to execute the | - | ||||||
| 292 | file. | - | ||||||
| 293 | \value ReadGroupPerm Members of the current user's group have | - | ||||||
| 294 | permission to read the file. | - | ||||||
| 295 | \value WriteGroupPerm Members of the current user's group have | - | ||||||
| 296 | permission to write to the file. | - | ||||||
| 297 | \value ExeGroupPerm Members of the current user's group have | - | ||||||
| 298 | permission to execute the file. | - | ||||||
| 299 | \value ReadOtherPerm All users have permission to read the file. | - | ||||||
| 300 | \value WriteOtherPerm All users have permission to write to the | - | ||||||
| 301 | file. | - | ||||||
| 302 | \value ExeOtherPerm All users have permission to execute the file. | - | ||||||
| 303 | - | |||||||
| 304 | \value LinkType The file is a link to another file (or link) in | - | ||||||
| 305 | the file system (i.e. not a file or directory). | - | ||||||
| 306 | \value FileType The file is a regular file to the file system | - | ||||||
| 307 | (i.e. not a link or directory) | - | ||||||
| 308 | \value BundleType \macos and iOS: the file is a bundle; implies DirectoryType | - | ||||||
| 309 | \value DirectoryType The file is a directory in the file system | - | ||||||
| 310 | (i.e. not a link or file). | - | ||||||
| 311 | - | |||||||
| 312 | \value HiddenFlag The file is hidden. | - | ||||||
| 313 | \value ExistsFlag The file actually exists in the file system. | - | ||||||
| 314 | \value RootFlag The file or the file pointed to is the root of the filesystem. | - | ||||||
| 315 | \value LocalDiskFlag The file resides on the local disk and can be passed to standard file functions. | - | ||||||
| 316 | \value Refresh Passing this flag will force the file engine to refresh all flags. | - | ||||||
| 317 | - | |||||||
| 318 | \omitvalue PermsMask | - | ||||||
| 319 | \omitvalue TypesMask | - | ||||||
| 320 | \omitvalue FlagsMask | - | ||||||
| 321 | \omitvalue FileInfoAll | - | ||||||
| 322 | - | |||||||
| 323 | \sa fileFlags(), setFileName() | - | ||||||
| 324 | */ | - | ||||||
| 325 | - | |||||||
| 326 | /*! | - | ||||||
| 327 | \enum QAbstractFileEngine::FileTime | - | ||||||
| 328 | - | |||||||
| 329 | These are used by the fileTime() function. | - | ||||||
| 330 | - | |||||||
| 331 | \value CreationTime When the file was created. | - | ||||||
| 332 | \value ModificationTime When the file was most recently modified. | - | ||||||
| 333 | \value AccessTime When the file was most recently accessed (e.g. | - | ||||||
| 334 | read or written to). | - | ||||||
| 335 | - | |||||||
| 336 | \sa setFileName() | - | ||||||
| 337 | */ | - | ||||||
| 338 | - | |||||||
| 339 | /*! | - | ||||||
| 340 | \enum QAbstractFileEngine::FileOwner | - | ||||||
| 341 | - | |||||||
| 342 | \value OwnerUser The user who owns the file. | - | ||||||
| 343 | \value OwnerGroup The group who owns the file. | - | ||||||
| 344 | - | |||||||
| 345 | \sa owner(), ownerId(), setFileName() | - | ||||||
| 346 | */ | - | ||||||
| 347 | - | |||||||
| 348 | /*! | - | ||||||
| 349 | Constructs a new QAbstractFileEngine that does not refer to any file or directory. | - | ||||||
| 350 | - | |||||||
| 351 | \sa setFileName() | - | ||||||
| 352 | */ | - | ||||||
| 353 | QAbstractFileEngine::QAbstractFileEngine() : d_ptr(new QAbstractFileEnginePrivate) | - | ||||||
| 354 | { | - | ||||||
| 355 | d_ptr->q_ptr = this; | - | ||||||
| 356 | } executed 18 times by 2 tests: end of blockExecuted by:
| 18 | ||||||
| 357 | - | |||||||
| 358 | /*! | - | ||||||
| 359 | \internal | - | ||||||
| 360 | - | |||||||
| 361 | Constructs a QAbstractFileEngine. | - | ||||||
| 362 | */ | - | ||||||
| 363 | QAbstractFileEngine::QAbstractFileEngine(QAbstractFileEnginePrivate &dd) : d_ptr(&dd) | - | ||||||
| 364 | { | - | ||||||
| 365 | d_ptr->q_ptr = this; | - | ||||||
| 366 | } executed 98631 times by 217 tests: end of blockExecuted by:
| 98631 | ||||||
| 367 | - | |||||||
| 368 | /*! | - | ||||||
| 369 | Destroys the QAbstractFileEngine. | - | ||||||
| 370 | */ | - | ||||||
| 371 | QAbstractFileEngine::~QAbstractFileEngine() | - | ||||||
| 372 | { | - | ||||||
| 373 | } | - | ||||||
| 374 | - | |||||||
| 375 | /*! | - | ||||||
| 376 | \fn bool QAbstractFileEngine::open(QIODevice::OpenMode mode) | - | ||||||
| 377 | - | |||||||
| 378 | Opens the file in the specified \a mode. Returns \c true if the file | - | ||||||
| 379 | was successfully opened; otherwise returns \c false. | - | ||||||
| 380 | - | |||||||
| 381 | The \a mode is an OR combination of QIODevice::OpenMode and | - | ||||||
| 382 | QIODevice::HandlingMode values. | - | ||||||
| 383 | */ | - | ||||||
| 384 | bool QAbstractFileEngine::open(QIODevice::OpenMode openMode) | - | ||||||
| 385 | { | - | ||||||
| 386 | Q_UNUSED(openMode); | - | ||||||
| 387 | return false; never executed: return false; | 0 | ||||||
| 388 | } | - | ||||||
| 389 | - | |||||||
| 390 | /*! | - | ||||||
| 391 | Closes the file, returning true if successful; otherwise returns \c false. | - | ||||||
| 392 | - | |||||||
| 393 | The default implementation always returns \c false. | - | ||||||
| 394 | */ | - | ||||||
| 395 | bool QAbstractFileEngine::close() | - | ||||||
| 396 | { | - | ||||||
| 397 | return false; never executed: return false; | 0 | ||||||
| 398 | } | - | ||||||
| 399 | - | |||||||
| 400 | /*! | - | ||||||
| 401 | \since 5.1 | - | ||||||
| 402 | - | |||||||
| 403 | Flushes and syncs the file to disk. | - | ||||||
| 404 | - | |||||||
| 405 | Returns \c true if successful; otherwise returns \c false. | - | ||||||
| 406 | The default implementation always returns \c false. | - | ||||||
| 407 | */ | - | ||||||
| 408 | bool QAbstractFileEngine::syncToDisk() | - | ||||||
| 409 | { | - | ||||||
| 410 | return false; never executed: return false; | 0 | ||||||
| 411 | } | - | ||||||
| 412 | - | |||||||
| 413 | /*! | - | ||||||
| 414 | Flushes the open file, returning true if successful; otherwise returns | - | ||||||
| 415 | false. | - | ||||||
| 416 | - | |||||||
| 417 | The default implementation always returns \c false. | - | ||||||
| 418 | */ | - | ||||||
| 419 | bool QAbstractFileEngine::flush() | - | ||||||
| 420 | { | - | ||||||
| 421 | return false; never executed: return false; | 0 | ||||||
| 422 | } | - | ||||||
| 423 | - | |||||||
| 424 | /*! | - | ||||||
| 425 | Returns the size of the file. | - | ||||||
| 426 | */ | - | ||||||
| 427 | qint64 QAbstractFileEngine::size() const | - | ||||||
| 428 | { | - | ||||||
| 429 | return 0; never executed: return 0; | 0 | ||||||
| 430 | } | - | ||||||
| 431 | - | |||||||
| 432 | /*! | - | ||||||
| 433 | Returns the current file position. | - | ||||||
| 434 | - | |||||||
| 435 | This is the position of the data read/write head of the file. | - | ||||||
| 436 | */ | - | ||||||
| 437 | qint64 QAbstractFileEngine::pos() const | - | ||||||
| 438 | { | - | ||||||
| 439 | return 0; never executed: return 0; | 0 | ||||||
| 440 | } | - | ||||||
| 441 | - | |||||||
| 442 | /*! | - | ||||||
| 443 | \fn bool QAbstractFileEngine::seek(qint64 offset) | - | ||||||
| 444 | - | |||||||
| 445 | Sets the file position to the given \a offset. Returns \c true if | - | ||||||
| 446 | the position was successfully set; otherwise returns \c false. | - | ||||||
| 447 | - | |||||||
| 448 | The offset is from the beginning of the file, unless the | - | ||||||
| 449 | file is sequential. | - | ||||||
| 450 | - | |||||||
| 451 | \sa isSequential() | - | ||||||
| 452 | */ | - | ||||||
| 453 | bool QAbstractFileEngine::seek(qint64 pos) | - | ||||||
| 454 | { | - | ||||||
| 455 | Q_UNUSED(pos); | - | ||||||
| 456 | return false; never executed: return false; | 0 | ||||||
| 457 | } | - | ||||||
| 458 | - | |||||||
| 459 | /*! | - | ||||||
| 460 | Returns \c true if the file is a sequential access device; returns | - | ||||||
| 461 | false if the file is a direct access device. | - | ||||||
| 462 | - | |||||||
| 463 | Operations involving size() and seek(int) are not valid on | - | ||||||
| 464 | sequential devices. | - | ||||||
| 465 | */ | - | ||||||
| 466 | bool QAbstractFileEngine::isSequential() const | - | ||||||
| 467 | { | - | ||||||
| 468 | return false; executed 13 times by 1 test: return false;Executed by:
| 13 | ||||||
| 469 | } | - | ||||||
| 470 | - | |||||||
| 471 | /*! | - | ||||||
| 472 | Requests that the file is deleted from the file system. If the | - | ||||||
| 473 | operation succeeds return true; otherwise return false. | - | ||||||
| 474 | - | |||||||
| 475 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 476 | - | |||||||
| 477 | \sa setFileName(), rmdir() | - | ||||||
| 478 | */ | - | ||||||
| 479 | bool QAbstractFileEngine::remove() | - | ||||||
| 480 | { | - | ||||||
| 481 | return false; never executed: return false; | 0 | ||||||
| 482 | } | - | ||||||
| 483 | - | |||||||
| 484 | /*! | - | ||||||
| 485 | Copies the contents of this file to a file with the name \a newName. | - | ||||||
| 486 | Returns \c true on success; otherwise, false is returned. | - | ||||||
| 487 | */ | - | ||||||
| 488 | bool QAbstractFileEngine::copy(const QString &newName) | - | ||||||
| 489 | { | - | ||||||
| 490 | Q_UNUSED(newName); | - | ||||||
| 491 | return false; never executed: return false; | 0 | ||||||
| 492 | } | - | ||||||
| 493 | - | |||||||
| 494 | /*! | - | ||||||
| 495 | Requests that the file be renamed to \a newName in the file | - | ||||||
| 496 | system. If the operation succeeds return true; otherwise return | - | ||||||
| 497 | false. | - | ||||||
| 498 | - | |||||||
| 499 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 500 | - | |||||||
| 501 | \sa setFileName() | - | ||||||
| 502 | */ | - | ||||||
| 503 | bool QAbstractFileEngine::rename(const QString &newName) | - | ||||||
| 504 | { | - | ||||||
| 505 | Q_UNUSED(newName); | - | ||||||
| 506 | return false; never executed: return false; | 0 | ||||||
| 507 | } | - | ||||||
| 508 | - | |||||||
| 509 | /*! | - | ||||||
| 510 | \since 5.1 | - | ||||||
| 511 | - | |||||||
| 512 | Requests that the file be renamed to \a newName in the file | - | ||||||
| 513 | system. If the new name already exists, it must be overwritten. | - | ||||||
| 514 | If the operation succeeds, returns \c true; otherwise returns | - | ||||||
| 515 | false. | - | ||||||
| 516 | - | |||||||
| 517 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 518 | - | |||||||
| 519 | \sa setFileName() | - | ||||||
| 520 | */ | - | ||||||
| 521 | bool QAbstractFileEngine::renameOverwrite(const QString &newName) | - | ||||||
| 522 | { | - | ||||||
| 523 | Q_UNUSED(newName); | - | ||||||
| 524 | return false; never executed: return false; | 0 | ||||||
| 525 | } | - | ||||||
| 526 | - | |||||||
| 527 | /*! | - | ||||||
| 528 | Creates a link from the file currently specified by fileName() to | - | ||||||
| 529 | \a newName. What a link is depends on the underlying filesystem | - | ||||||
| 530 | (be it a shortcut on Windows or a symbolic link on Unix). Returns | - | ||||||
| 531 | true if successful; otherwise returns \c false. | - | ||||||
| 532 | */ | - | ||||||
| 533 | bool QAbstractFileEngine::link(const QString &newName) | - | ||||||
| 534 | { | - | ||||||
| 535 | Q_UNUSED(newName); | - | ||||||
| 536 | return false; never executed: return false; | 0 | ||||||
| 537 | } | - | ||||||
| 538 | - | |||||||
| 539 | /*! | - | ||||||
| 540 | Requests that the directory \a dirName be created. If | - | ||||||
| 541 | \a createParentDirectories is true, then any sub-directories in \a dirName | - | ||||||
| 542 | that don't exist must be created. If \a createParentDirectories is false then | - | ||||||
| 543 | any sub-directories in \a dirName must already exist for the function to | - | ||||||
| 544 | succeed. If the operation succeeds return true; otherwise return | - | ||||||
| 545 | false. | - | ||||||
| 546 | - | |||||||
| 547 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 548 | - | |||||||
| 549 | \sa setFileName(), rmdir(), isRelativePath() | - | ||||||
| 550 | */ | - | ||||||
| 551 | bool QAbstractFileEngine::mkdir(const QString &dirName, bool createParentDirectories) const | - | ||||||
| 552 | { | - | ||||||
| 553 | Q_UNUSED(dirName); | - | ||||||
| 554 | Q_UNUSED(createParentDirectories); | - | ||||||
| 555 | return false; never executed: return false; | 0 | ||||||
| 556 | } | - | ||||||
| 557 | - | |||||||
| 558 | /*! | - | ||||||
| 559 | Requests that the directory \a dirName is deleted from the file | - | ||||||
| 560 | system. When \a recurseParentDirectories is true, then any empty | - | ||||||
| 561 | parent-directories in \a dirName must also be deleted. If | - | ||||||
| 562 | \a recurseParentDirectories is false, only the \a dirName leaf-node | - | ||||||
| 563 | should be deleted. In most file systems a directory cannot be deleted | - | ||||||
| 564 | using this function if it is non-empty. If the operation succeeds | - | ||||||
| 565 | return true; otherwise return false. | - | ||||||
| 566 | - | |||||||
| 567 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 568 | - | |||||||
| 569 | \sa setFileName(), remove(), mkdir(), isRelativePath() | - | ||||||
| 570 | */ | - | ||||||
| 571 | bool QAbstractFileEngine::rmdir(const QString &dirName, bool recurseParentDirectories) const | - | ||||||
| 572 | { | - | ||||||
| 573 | Q_UNUSED(dirName); | - | ||||||
| 574 | Q_UNUSED(recurseParentDirectories); | - | ||||||
| 575 | return false; never executed: return false; | 0 | ||||||
| 576 | } | - | ||||||
| 577 | - | |||||||
| 578 | /*! | - | ||||||
| 579 | Requests that the file be set to size \a size. If \a size is larger | - | ||||||
| 580 | than the current file then it is filled with 0's, if smaller it is | - | ||||||
| 581 | simply truncated. If the operations succceeds return true; otherwise | - | ||||||
| 582 | return false; | - | ||||||
| 583 | - | |||||||
| 584 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 585 | - | |||||||
| 586 | \sa size() | - | ||||||
| 587 | */ | - | ||||||
| 588 | bool QAbstractFileEngine::setSize(qint64 size) | - | ||||||
| 589 | { | - | ||||||
| 590 | Q_UNUSED(size); | - | ||||||
| 591 | return false; never executed: return false; | 0 | ||||||
| 592 | } | - | ||||||
| 593 | - | |||||||
| 594 | /*! | - | ||||||
| 595 | Should return true if the underlying file system is case-sensitive; | - | ||||||
| 596 | otherwise return false. | - | ||||||
| 597 | - | |||||||
| 598 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 599 | */ | - | ||||||
| 600 | bool QAbstractFileEngine::caseSensitive() const | - | ||||||
| 601 | { | - | ||||||
| 602 | return false; never executed: return false; | 0 | ||||||
| 603 | } | - | ||||||
| 604 | - | |||||||
| 605 | /*! | - | ||||||
| 606 | Return true if the file referred to by this file engine has a | - | ||||||
| 607 | relative path; otherwise return false. | - | ||||||
| 608 | - | |||||||
| 609 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 610 | - | |||||||
| 611 | \sa setFileName() | - | ||||||
| 612 | */ | - | ||||||
| 613 | bool QAbstractFileEngine::isRelativePath() const | - | ||||||
| 614 | { | - | ||||||
| 615 | return false; never executed: return false; | 0 | ||||||
| 616 | } | - | ||||||
| 617 | - | |||||||
| 618 | /*! | - | ||||||
| 619 | Requests that a list of all the files matching the \a filters | - | ||||||
| 620 | list based on the \a filterNames in the file engine's directory | - | ||||||
| 621 | are returned. | - | ||||||
| 622 | - | |||||||
| 623 | Should return an empty list if the file engine refers to a file | - | ||||||
| 624 | rather than a directory, or if the directory is unreadable or does | - | ||||||
| 625 | not exist or if nothing matches the specifications. | - | ||||||
| 626 | - | |||||||
| 627 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 628 | - | |||||||
| 629 | \sa setFileName() | - | ||||||
| 630 | */ | - | ||||||
| 631 | QStringList QAbstractFileEngine::entryList(QDir::Filters filters, const QStringList &filterNames) const | - | ||||||
| 632 | { | - | ||||||
| 633 | QStringList ret; | - | ||||||
| 634 | QDirIterator it(fileName(), filterNames, filters); | - | ||||||
| 635 | while (it.hasNext()) {
| 0 | ||||||
| 636 | it.next(); | - | ||||||
| 637 | ret << it.fileName(); | - | ||||||
| 638 | } never executed: end of block | 0 | ||||||
| 639 | return ret; never executed: return ret; | 0 | ||||||
| 640 | } | - | ||||||
| 641 | - | |||||||
| 642 | /*! | - | ||||||
| 643 | This function should return the set of OR'd flags that are true | - | ||||||
| 644 | for the file engine's file, and that are in the \a type's OR'd | - | ||||||
| 645 | members. | - | ||||||
| 646 | - | |||||||
| 647 | In your reimplementation you can use the \a type argument as an | - | ||||||
| 648 | optimization hint and only return the OR'd set of members that are | - | ||||||
| 649 | true and that match those in \a type; in other words you can | - | ||||||
| 650 | ignore any members not mentioned in \a type, thus avoiding some | - | ||||||
| 651 | potentially expensive lookups or system calls. | - | ||||||
| 652 | - | |||||||
| 653 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 654 | - | |||||||
| 655 | \sa setFileName() | - | ||||||
| 656 | */ | - | ||||||
| 657 | QAbstractFileEngine::FileFlags QAbstractFileEngine::fileFlags(FileFlags type) const | - | ||||||
| 658 | { | - | ||||||
| 659 | Q_UNUSED(type); | - | ||||||
| 660 | return 0; never executed: return 0; | 0 | ||||||
| 661 | } | - | ||||||
| 662 | - | |||||||
| 663 | /*! | - | ||||||
| 664 | Requests that the file's permissions be set to \a perms. The argument | - | ||||||
| 665 | perms will be set to the OR-ed together combination of | - | ||||||
| 666 | QAbstractFileEngine::FileInfo, with only the QAbstractFileEngine::PermsMask being | - | ||||||
| 667 | honored. If the operations succceeds return true; otherwise return | - | ||||||
| 668 | false; | - | ||||||
| 669 | - | |||||||
| 670 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 671 | - | |||||||
| 672 | \sa size() | - | ||||||
| 673 | */ | - | ||||||
| 674 | bool QAbstractFileEngine::setPermissions(uint perms) | - | ||||||
| 675 | { | - | ||||||
| 676 | Q_UNUSED(perms); | - | ||||||
| 677 | return false; never executed: return false; | 0 | ||||||
| 678 | } | - | ||||||
| 679 | - | |||||||
| 680 | /*! | - | ||||||
| 681 | Return the file engine's current file name in the format | - | ||||||
| 682 | specified by \a file. | - | ||||||
| 683 | - | |||||||
| 684 | If you don't handle some \c FileName possibilities, return the | - | ||||||
| 685 | file name set in setFileName() when an unhandled format is | - | ||||||
| 686 | requested. | - | ||||||
| 687 | - | |||||||
| 688 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 689 | - | |||||||
| 690 | \sa setFileName(), FileName | - | ||||||
| 691 | */ | - | ||||||
| 692 | QString QAbstractFileEngine::fileName(FileName file) const | - | ||||||
| 693 | { | - | ||||||
| 694 | Q_UNUSED(file); | - | ||||||
| 695 | return QString(); never executed: return QString(); | 0 | ||||||
| 696 | } | - | ||||||
| 697 | - | |||||||
| 698 | /*! | - | ||||||
| 699 | If \a owner is \c OwnerUser return the ID of the user who owns | - | ||||||
| 700 | the file. If \a owner is \c OwnerGroup return the ID of the group | - | ||||||
| 701 | that own the file. If you can't determine the owner return -2. | - | ||||||
| 702 | - | |||||||
| 703 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 704 | - | |||||||
| 705 | \sa owner(), setFileName(), FileOwner | - | ||||||
| 706 | */ | - | ||||||
| 707 | uint QAbstractFileEngine::ownerId(FileOwner owner) const | - | ||||||
| 708 | { | - | ||||||
| 709 | Q_UNUSED(owner); | - | ||||||
| 710 | return 0; never executed: return 0; | 0 | ||||||
| 711 | } | - | ||||||
| 712 | - | |||||||
| 713 | /*! | - | ||||||
| 714 | If \a owner is \c OwnerUser return the name of the user who owns | - | ||||||
| 715 | the file. If \a owner is \c OwnerGroup return the name of the group | - | ||||||
| 716 | that own the file. If you can't determine the owner return | - | ||||||
| 717 | QString(). | - | ||||||
| 718 | - | |||||||
| 719 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 720 | - | |||||||
| 721 | \sa ownerId(), setFileName(), FileOwner | - | ||||||
| 722 | */ | - | ||||||
| 723 | QString QAbstractFileEngine::owner(FileOwner owner) const | - | ||||||
| 724 | { | - | ||||||
| 725 | Q_UNUSED(owner); | - | ||||||
| 726 | return QString(); never executed: return QString(); | 0 | ||||||
| 727 | } | - | ||||||
| 728 | - | |||||||
| 729 | /*! | - | ||||||
| 730 | If \a time is \c CreationTime, return when the file was created. | - | ||||||
| 731 | If \a time is \c ModificationTime, return when the file was most | - | ||||||
| 732 | recently modified. If \a time is \c AccessTime, return when the | - | ||||||
| 733 | file was most recently accessed (e.g. read or written). | - | ||||||
| 734 | If the time cannot be determined return QDateTime() (an invalid | - | ||||||
| 735 | date time). | - | ||||||
| 736 | - | |||||||
| 737 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 738 | - | |||||||
| 739 | \sa setFileName(), QDateTime, QDateTime::isValid(), FileTime | - | ||||||
| 740 | */ | - | ||||||
| 741 | QDateTime QAbstractFileEngine::fileTime(FileTime time) const | - | ||||||
| 742 | { | - | ||||||
| 743 | Q_UNUSED(time); | - | ||||||
| 744 | return QDateTime(); never executed: return QDateTime(); | 0 | ||||||
| 745 | } | - | ||||||
| 746 | - | |||||||
| 747 | /*! | - | ||||||
| 748 | Sets the file engine's file name to \a file. This file name is the | - | ||||||
| 749 | file that the rest of the virtual functions will operate on. | - | ||||||
| 750 | - | |||||||
| 751 | This virtual function must be reimplemented by all subclasses. | - | ||||||
| 752 | - | |||||||
| 753 | \sa rename() | - | ||||||
| 754 | */ | - | ||||||
| 755 | void QAbstractFileEngine::setFileName(const QString &file) | - | ||||||
| 756 | { | - | ||||||
| 757 | Q_UNUSED(file); | - | ||||||
| 758 | } never executed: end of block | 0 | ||||||
| 759 | - | |||||||
| 760 | /*! | - | ||||||
| 761 | Returns the native file handle for this file engine. This handle must be | - | ||||||
| 762 | used with care; its value and type are platform specific, and using it | - | ||||||
| 763 | will most likely lead to non-portable code. | - | ||||||
| 764 | */ | - | ||||||
| 765 | int QAbstractFileEngine::handle() const | - | ||||||
| 766 | { | - | ||||||
| 767 | return -1; executed 1 time by 1 test: return -1;Executed by:
| 1 | ||||||
| 768 | } | - | ||||||
| 769 | - | |||||||
| 770 | /*! | - | ||||||
| 771 | \since 4.3 | - | ||||||
| 772 | - | |||||||
| 773 | Returns \c true if the current position is at the end of the file; otherwise, | - | ||||||
| 774 | returns \c false. | - | ||||||
| 775 | - | |||||||
| 776 | This function bases its behavior on calling extension() with | - | ||||||
| 777 | AtEndExtension. If the engine does not support this extension, false is | - | ||||||
| 778 | returned. | - | ||||||
| 779 | - | |||||||
| 780 | \sa extension(), supportsExtension(), QFile::atEnd() | - | ||||||
| 781 | */ | - | ||||||
| 782 | bool QAbstractFileEngine::atEnd() const | - | ||||||
| 783 | { | - | ||||||
| 784 | return const_cast<QAbstractFileEngine *>(this)->extension(AtEndExtension); never executed: return const_cast<QAbstractFileEngine *>(this)->extension(AtEndExtension); | 0 | ||||||
| 785 | } | - | ||||||
| 786 | - | |||||||
| 787 | /*! | - | ||||||
| 788 | \since 4.4 | - | ||||||
| 789 | - | |||||||
| 790 | Maps \a size bytes of the file into memory starting at \a offset. | - | ||||||
| 791 | Returns a pointer to the memory if successful; otherwise returns \c false | - | ||||||
| 792 | if, for example, an error occurs. | - | ||||||
| 793 | - | |||||||
| 794 | This function bases its behavior on calling extension() with | - | ||||||
| 795 | MapExtensionOption. If the engine does not support this extension, 0 is | - | ||||||
| 796 | returned. | - | ||||||
| 797 | - | |||||||
| 798 | \a flags is currently not used, but could be used in the future. | - | ||||||
| 799 | - | |||||||
| 800 | \sa unmap(), supportsExtension() | - | ||||||
| 801 | */ | - | ||||||
| 802 | - | |||||||
| 803 | uchar *QAbstractFileEngine::map(qint64 offset, qint64 size, QFile::MemoryMapFlags flags) | - | ||||||
| 804 | { | - | ||||||
| 805 | MapExtensionOption option; | - | ||||||
| 806 | option.offset = offset; | - | ||||||
| 807 | option.size = size; | - | ||||||
| 808 | option.flags = flags; | - | ||||||
| 809 | MapExtensionReturn r; | - | ||||||
| 810 | if (!extension(MapExtension, &option, &r))
| 24-34366 | ||||||
| 811 | return 0; executed 24 times by 1 test: return 0;Executed by:
| 24 | ||||||
| 812 | return r.address; executed 34366 times by 121 tests: return r.address;Executed by:
| 34366 | ||||||
| 813 | } | - | ||||||
| 814 | - | |||||||
| 815 | /*! | - | ||||||
| 816 | \since 4.4 | - | ||||||
| 817 | - | |||||||
| 818 | Unmaps the memory \a address. Returns \c true if the unmap succeeds; otherwise | - | ||||||
| 819 | returns \c false. | - | ||||||
| 820 | - | |||||||
| 821 | This function bases its behavior on calling extension() with | - | ||||||
| 822 | UnMapExtensionOption. If the engine does not support this extension, false is | - | ||||||
| 823 | returned. | - | ||||||
| 824 | - | |||||||
| 825 | \sa map(), supportsExtension() | - | ||||||
| 826 | */ | - | ||||||
| 827 | bool QAbstractFileEngine::unmap(uchar *address) | - | ||||||
| 828 | { | - | ||||||
| 829 | UnMapExtensionOption options; | - | ||||||
| 830 | options.address = address; | - | ||||||
| 831 | return extension(UnMapExtension, &options); executed 32814 times by 2 tests: return extension(UnMapExtension, &options);Executed by:
| 32814 | ||||||
| 832 | } | - | ||||||
| 833 | - | |||||||
| 834 | /*! | - | ||||||
| 835 | \since 4.3 | - | ||||||
| 836 | \class QAbstractFileEngineIterator | - | ||||||
| 837 | \inmodule QtCore | - | ||||||
| 838 | \brief The QAbstractFileEngineIterator class provides an iterator | - | ||||||
| 839 | interface for custom file engines. | - | ||||||
| 840 | \internal | - | ||||||
| 841 | - | |||||||
| 842 | If all you want is to iterate over entries in a directory, see | - | ||||||
| 843 | QDirIterator instead. This class is only for custom file engine authors. | - | ||||||
| 844 | - | |||||||
| 845 | QAbstractFileEngineIterator is a unidirectional single-use virtual | - | ||||||
| 846 | iterator that plugs into QDirIterator, providing transparent proxy | - | ||||||
| 847 | iteration for custom file engines. | - | ||||||
| 848 | - | |||||||
| 849 | You can subclass QAbstractFileEngineIterator to provide an iterator when | - | ||||||
| 850 | writing your own file engine. To plug the iterator into your file system, | - | ||||||
| 851 | you simply return an instance of this subclass from a reimplementation of | - | ||||||
| 852 | QAbstractFileEngine::beginEntryList(). | - | ||||||
| 853 | - | |||||||
| 854 | Example: | - | ||||||
| 855 | - | |||||||
| 856 | \snippet code/src_corelib_io_qabstractfileengine.cpp 2 | - | ||||||
| 857 | - | |||||||
| 858 | QAbstractFileEngineIterator is associated with a path, name filters, and | - | ||||||
| 859 | entry filters. The path is the directory that the iterator lists entries | - | ||||||
| 860 | in. The name filters and entry filters are provided for file engines that | - | ||||||
| 861 | can optimize directory listing at the iterator level (e.g., network file | - | ||||||
| 862 | systems that need to minimize network traffic), but they can also be | - | ||||||
| 863 | ignored by the iterator subclass; QAbstractFileEngineIterator already | - | ||||||
| 864 | provides the required filtering logics in the matchesFilters() function. | - | ||||||
| 865 | You can call dirName() to get the directory name, nameFilters() to get a | - | ||||||
| 866 | stringlist of name filters, and filters() to get the entry filters. | - | ||||||
| 867 | - | |||||||
| 868 | The pure virtual function hasNext() returns \c true if the current directory | - | ||||||
| 869 | has at least one more entry (i.e., the directory name is valid and | - | ||||||
| 870 | accessible, and we have not reached the end of the entry list), and false | - | ||||||
| 871 | otherwise. Reimplement next() to seek to the next entry. | - | ||||||
| 872 | - | |||||||
| 873 | The pure virtual function currentFileName() returns the name of the | - | ||||||
| 874 | current entry without advancing the iterator. The currentFilePath() | - | ||||||
| 875 | function is provided for convenience; it returns the full path of the | - | ||||||
| 876 | current entry. | - | ||||||
| 877 | - | |||||||
| 878 | Here is an example of how to implement an iterator that returns each of | - | ||||||
| 879 | three fixed entries in sequence. | - | ||||||
| 880 | - | |||||||
| 881 | \snippet code/src_corelib_io_qabstractfileengine.cpp 3 | - | ||||||
| 882 | - | |||||||
| 883 | Note: QAbstractFileEngineIterator does not deal with QDir::IteratorFlags; | - | ||||||
| 884 | it simply returns entries for a single directory. | - | ||||||
| 885 | - | |||||||
| 886 | \sa QDirIterator | - | ||||||
| 887 | */ | - | ||||||
| 888 | - | |||||||
| 889 | /*! | - | ||||||
| 890 | \enum QAbstractFileEngineIterator::EntryInfoType | - | ||||||
| 891 | \internal | - | ||||||
| 892 | - | |||||||
| 893 | This enum describes the different types of information that can be | - | ||||||
| 894 | requested through the QAbstractFileEngineIterator::entryInfo() function. | - | ||||||
| 895 | */ | - | ||||||
| 896 | - | |||||||
| 897 | /*! | - | ||||||
| 898 | \typedef QAbstractFileEngine::Iterator | - | ||||||
| 899 | \since 4.3 | - | ||||||
| 900 | - | |||||||
| 901 | Synonym for QAbstractFileEngineIterator. | - | ||||||
| 902 | */ | - | ||||||
| 903 | - | |||||||
| 904 | class QAbstractFileEngineIteratorPrivate | - | ||||||
| 905 | { | - | ||||||
| 906 | public: | - | ||||||
| 907 | QString path; | - | ||||||
| 908 | QDir::Filters filters; | - | ||||||
| 909 | QStringList nameFilters; | - | ||||||
| 910 | QFileInfo fileInfo; | - | ||||||
| 911 | }; | - | ||||||
| 912 | - | |||||||
| 913 | /*! | - | ||||||
| 914 | Constructs a QAbstractFileEngineIterator, using the entry filters \a | - | ||||||
| 915 | filters, and wildcard name filters \a nameFilters. | - | ||||||
| 916 | */ | - | ||||||
| 917 | QAbstractFileEngineIterator::QAbstractFileEngineIterator(QDir::Filters filters, | - | ||||||
| 918 | const QStringList &nameFilters) | - | ||||||
| 919 | : d(new QAbstractFileEngineIteratorPrivate) | - | ||||||
| 920 | { | - | ||||||
| 921 | d->nameFilters = nameFilters; | - | ||||||
| 922 | d->filters = filters; | - | ||||||
| 923 | } executed 176 times by 7 tests: end of blockExecuted by:
| 176 | ||||||
| 924 | - | |||||||
| 925 | /*! | - | ||||||
| 926 | Destroys the QAbstractFileEngineIterator. | - | ||||||
| 927 | - | |||||||
| 928 | \sa QDirIterator | - | ||||||
| 929 | */ | - | ||||||
| 930 | QAbstractFileEngineIterator::~QAbstractFileEngineIterator() | - | ||||||
| 931 | { | - | ||||||
| 932 | } | - | ||||||
| 933 | - | |||||||
| 934 | /*! | - | ||||||
| 935 | Returns the path for this iterator. QDirIterator is responsible for | - | ||||||
| 936 | assigning this path; it cannot change during the iterator's lifetime. | - | ||||||
| 937 | - | |||||||
| 938 | \sa nameFilters(), filters() | - | ||||||
| 939 | */ | - | ||||||
| 940 | QString QAbstractFileEngineIterator::path() const | - | ||||||
| 941 | { | - | ||||||
| 942 | return d->path; executed 1210 times by 7 tests: return d->path;Executed by:
| 1210 | ||||||
| 943 | } | - | ||||||
| 944 | - | |||||||
| 945 | /*! | - | ||||||
| 946 | \internal | - | ||||||
| 947 | - | |||||||
| 948 | Sets the iterator path to \a path. This function is called from within | - | ||||||
| 949 | QDirIterator. | - | ||||||
| 950 | */ | - | ||||||
| 951 | void QAbstractFileEngineIterator::setPath(const QString &path) | - | ||||||
| 952 | { | - | ||||||
| 953 | d->path = path; | - | ||||||
| 954 | } executed 176 times by 7 tests: end of blockExecuted by:
| 176 | ||||||
| 955 | - | |||||||
| 956 | /*! | - | ||||||
| 957 | Returns the name filters for this iterator. | - | ||||||
| 958 | - | |||||||
| 959 | \sa QDir::nameFilters(), filters(), path() | - | ||||||
| 960 | */ | - | ||||||
| 961 | QStringList QAbstractFileEngineIterator::nameFilters() const | - | ||||||
| 962 | { | - | ||||||
| 963 | return d->nameFilters; never executed: return d->nameFilters; | 0 | ||||||
| 964 | } | - | ||||||
| 965 | - | |||||||
| 966 | /*! | - | ||||||
| 967 | Returns the entry filters for this iterator. | - | ||||||
| 968 | - | |||||||
| 969 | \sa QDir::filter(), nameFilters(), path() | - | ||||||
| 970 | */ | - | ||||||
| 971 | QDir::Filters QAbstractFileEngineIterator::filters() const | - | ||||||
| 972 | { | - | ||||||
| 973 | return d->filters; never executed: return d->filters; | 0 | ||||||
| 974 | } | - | ||||||
| 975 | - | |||||||
| 976 | /*! | - | ||||||
| 977 | \fn QString QAbstractFileEngineIterator::currentFileName() const = 0 | - | ||||||
| 978 | - | |||||||
| 979 | This pure virtual function returns the name of the current directory | - | ||||||
| 980 | entry, excluding the path. | - | ||||||
| 981 | - | |||||||
| 982 | \sa currentFilePath() | - | ||||||
| 983 | */ | - | ||||||
| 984 | - | |||||||
| 985 | /*! | - | ||||||
| 986 | Returns the path to the current directory entry. It's the same as | - | ||||||
| 987 | prepending path() to the return value of currentFileName(). | - | ||||||
| 988 | - | |||||||
| 989 | \sa currentFileName() | - | ||||||
| 990 | */ | - | ||||||
| 991 | QString QAbstractFileEngineIterator::currentFilePath() const | - | ||||||
| 992 | { | - | ||||||
| 993 | QString name = currentFileName(); | - | ||||||
| 994 | if (!name.isNull()) {
| 0-1036 | ||||||
| 995 | QString tmp = path(); | - | ||||||
| 996 | if (!tmp.isEmpty()) {
| 0-1036 | ||||||
| 997 | if (!tmp.endsWith(QLatin1Char('/')))
| 142-894 | ||||||
| 998 | tmp.append(QLatin1Char('/')); executed 894 times by 7 tests: tmp.append(QLatin1Char('/'));Executed by:
| 894 | ||||||
| 999 | name.prepend(tmp); | - | ||||||
| 1000 | } executed 1036 times by 7 tests: end of blockExecuted by:
| 1036 | ||||||
| 1001 | } executed 1036 times by 7 tests: end of blockExecuted by:
| 1036 | ||||||
| 1002 | return name; executed 1036 times by 7 tests: return name;Executed by:
| 1036 | ||||||
| 1003 | } | - | ||||||
| 1004 | - | |||||||
| 1005 | /*! | - | ||||||
| 1006 | The virtual function returns a QFileInfo for the current directory | - | ||||||
| 1007 | entry. This function is provided for convenience. It can also be slightly | - | ||||||
| 1008 | faster than creating a QFileInfo object yourself, as the object returned | - | ||||||
| 1009 | by this function might contain cached information that QFileInfo otherwise | - | ||||||
| 1010 | would have to access through the file engine. | - | ||||||
| 1011 | - | |||||||
| 1012 | \sa currentFileName() | - | ||||||
| 1013 | */ | - | ||||||
| 1014 | QFileInfo QAbstractFileEngineIterator::currentFileInfo() const | - | ||||||
| 1015 | { | - | ||||||
| 1016 | QString path = currentFilePath(); | - | ||||||
| 1017 | if (d->fileInfo.filePath() != path)
| 0-518 | ||||||
| 1018 | d->fileInfo.setFile(path); executed 518 times by 7 tests: d->fileInfo.setFile(path);Executed by:
| 518 | ||||||
| 1019 | - | |||||||
| 1020 | // return a shallow copy | - | ||||||
| 1021 | return d->fileInfo; executed 518 times by 7 tests: return d->fileInfo;Executed by:
| 518 | ||||||
| 1022 | } | - | ||||||
| 1023 | - | |||||||
| 1024 | /*! | - | ||||||
| 1025 | \internal | - | ||||||
| 1026 | - | |||||||
| 1027 | Returns the entry info \a type for this iterator's current directory entry | - | ||||||
| 1028 | as a QVariant. If \a type is undefined for this entry, a null QVariant is | - | ||||||
| 1029 | returned. | - | ||||||
| 1030 | - | |||||||
| 1031 | \sa QAbstractFileEngine::beginEntryList(), QDir::beginEntryList() | - | ||||||
| 1032 | */ | - | ||||||
| 1033 | QVariant QAbstractFileEngineIterator::entryInfo(EntryInfoType type) const | - | ||||||
| 1034 | { | - | ||||||
| 1035 | Q_UNUSED(type) | - | ||||||
| 1036 | return QVariant(); never executed: return QVariant(); | 0 | ||||||
| 1037 | } | - | ||||||
| 1038 | - | |||||||
| 1039 | /*! | - | ||||||
| 1040 | \fn virtual QString QAbstractFileEngineIterator::next() = 0 | - | ||||||
| 1041 | - | |||||||
| 1042 | This pure virtual function advances the iterator to the next directory | - | ||||||
| 1043 | entry, and returns the file path to the current entry. | - | ||||||
| 1044 | - | |||||||
| 1045 | This function can optionally make use of nameFilters() and filters() to | - | ||||||
| 1046 | optimize its performance. | - | ||||||
| 1047 | - | |||||||
| 1048 | Reimplement this function in a subclass to advance the iterator. | - | ||||||
| 1049 | - | |||||||
| 1050 | \sa QDirIterator::next() | - | ||||||
| 1051 | */ | - | ||||||
| 1052 | - | |||||||
| 1053 | /*! | - | ||||||
| 1054 | \fn virtual bool QAbstractFileEngineIterator::hasNext() const = 0 | - | ||||||
| 1055 | - | |||||||
| 1056 | This pure virtual function returns \c true if there is at least one more | - | ||||||
| 1057 | entry in the current directory (i.e., the iterator path is valid and | - | ||||||
| 1058 | accessible, and the iterator has not reached the end of the entry list). | - | ||||||
| 1059 | - | |||||||
| 1060 | \sa QDirIterator::hasNext() | - | ||||||
| 1061 | */ | - | ||||||
| 1062 | - | |||||||
| 1063 | /*! | - | ||||||
| 1064 | Returns an instance of a QAbstractFileEngineIterator using \a filters for | - | ||||||
| 1065 | entry filtering and \a filterNames for name filtering. This function is | - | ||||||
| 1066 | called by QDirIterator to initiate directory iteration. | - | ||||||
| 1067 | - | |||||||
| 1068 | QDirIterator takes ownership of the returned instance, and deletes it when | - | ||||||
| 1069 | it's done. | - | ||||||
| 1070 | - | |||||||
| 1071 | \sa QDirIterator | - | ||||||
| 1072 | */ | - | ||||||
| 1073 | QAbstractFileEngine::Iterator *QAbstractFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames) | - | ||||||
| 1074 | { | - | ||||||
| 1075 | Q_UNUSED(filters); | - | ||||||
| 1076 | Q_UNUSED(filterNames); | - | ||||||
| 1077 | return 0; never executed: return 0; | 0 | ||||||
| 1078 | } | - | ||||||
| 1079 | - | |||||||
| 1080 | /*! | - | ||||||
| 1081 | \internal | - | ||||||
| 1082 | */ | - | ||||||
| 1083 | QAbstractFileEngine::Iterator *QAbstractFileEngine::endEntryList() | - | ||||||
| 1084 | { | - | ||||||
| 1085 | return 0; never executed: return 0; | 0 | ||||||
| 1086 | } | - | ||||||
| 1087 | - | |||||||
| 1088 | /*! | - | ||||||
| 1089 | Reads a number of characters from the file into \a data. At most | - | ||||||
| 1090 | \a maxlen characters will be read. | - | ||||||
| 1091 | - | |||||||
| 1092 | Returns -1 if a fatal error occurs, or 0 if there are no bytes to | - | ||||||
| 1093 | read. | - | ||||||
| 1094 | */ | - | ||||||
| 1095 | qint64 QAbstractFileEngine::read(char *data, qint64 maxlen) | - | ||||||
| 1096 | { | - | ||||||
| 1097 | Q_UNUSED(data); | - | ||||||
| 1098 | Q_UNUSED(maxlen); | - | ||||||
| 1099 | return -1; never executed: return -1; | 0 | ||||||
| 1100 | } | - | ||||||
| 1101 | - | |||||||
| 1102 | /*! | - | ||||||
| 1103 | Writes \a len bytes from \a data to the file. Returns the number | - | ||||||
| 1104 | of characters written on success; otherwise returns -1. | - | ||||||
| 1105 | */ | - | ||||||
| 1106 | qint64 QAbstractFileEngine::write(const char *data, qint64 len) | - | ||||||
| 1107 | { | - | ||||||
| 1108 | Q_UNUSED(data); | - | ||||||
| 1109 | Q_UNUSED(len); | - | ||||||
| 1110 | return -1; never executed: return -1; | 0 | ||||||
| 1111 | } | - | ||||||
| 1112 | - | |||||||
| 1113 | /*! | - | ||||||
| 1114 | This function reads one line, terminated by a '\\n' character, from the | - | ||||||
| 1115 | file info \a data. At most \a maxlen characters will be read. The | - | ||||||
| 1116 | end-of-line character is included. | - | ||||||
| 1117 | */ | - | ||||||
| 1118 | qint64 QAbstractFileEngine::readLine(char *data, qint64 maxlen) | - | ||||||
| 1119 | { | - | ||||||
| 1120 | qint64 readSoFar = 0; | - | ||||||
| 1121 | while (readSoFar < maxlen) {
| 0-8 | ||||||
| 1122 | char c; | - | ||||||
| 1123 | qint64 readResult = read(&c, 1); | - | ||||||
| 1124 | if (readResult <= 0)
| 0-8 | ||||||
| 1125 | return (readSoFar > 0) ? readSoFar : -1; executed 8 times by 1 test: return (readSoFar > 0) ? readSoFar : -1;Executed by:
| 8 | ||||||
| 1126 | ++readSoFar; | - | ||||||
| 1127 | *data++ = c; | - | ||||||
| 1128 | if (c == '\n')
| 0 | ||||||
| 1129 | return readSoFar; never executed: return readSoFar; | 0 | ||||||
| 1130 | } never executed: end of block | 0 | ||||||
| 1131 | return readSoFar; never executed: return readSoFar; | 0 | ||||||
| 1132 | } | - | ||||||
| 1133 | - | |||||||
| 1134 | /*! | - | ||||||
| 1135 | \enum QAbstractFileEngine::Extension | - | ||||||
| 1136 | \since 4.3 | - | ||||||
| 1137 | - | |||||||
| 1138 | This enum describes the types of extensions that the file engine can | - | ||||||
| 1139 | support. Before using these extensions, you must verify that the extension | - | ||||||
| 1140 | is supported (i.e., call supportsExtension()). | - | ||||||
| 1141 | - | |||||||
| 1142 | \value AtEndExtension Whether the current file position is at the end of | - | ||||||
| 1143 | the file or not. This extension allows file engines that implement local | - | ||||||
| 1144 | buffering to report end-of-file status without having to check the size of | - | ||||||
| 1145 | the file. It is also useful for sequential files, where the size of the | - | ||||||
| 1146 | file cannot be used to determine whether or not you have reached the end. | - | ||||||
| 1147 | This extension returns \c true if the file is at the end; otherwise it returns | - | ||||||
| 1148 | false. The input and output arguments to extension() are ignored. | - | ||||||
| 1149 | - | |||||||
| 1150 | \value FastReadLineExtension Whether the file engine provides a | - | ||||||
| 1151 | fast implementation for readLine() or not. If readLine() remains | - | ||||||
| 1152 | unimplemented in the file engine, QAbstractFileEngine will provide | - | ||||||
| 1153 | an implementation based on calling read() repeatedly. If | - | ||||||
| 1154 | supportsExtension() returns \c false for this extension, however, | - | ||||||
| 1155 | QIODevice can provide a faster implementation by making use of its | - | ||||||
| 1156 | internal buffer. For engines that already provide a fast readLine() | - | ||||||
| 1157 | implementation, returning false for this extension can avoid | - | ||||||
| 1158 | unnnecessary double-buffering in QIODevice. | - | ||||||
| 1159 | - | |||||||
| 1160 | \value MapExtension Whether the file engine provides the ability to map | - | ||||||
| 1161 | a file to memory. | - | ||||||
| 1162 | - | |||||||
| 1163 | \value UnMapExtension Whether the file engine provides the ability to | - | ||||||
| 1164 | unmap memory that was previously mapped. | - | ||||||
| 1165 | */ | - | ||||||
| 1166 | - | |||||||
| 1167 | /*! | - | ||||||
| 1168 | \class QAbstractFileEngine::ExtensionOption | - | ||||||
| 1169 | \inmodule QtCore | - | ||||||
| 1170 | \since 4.3 | - | ||||||
| 1171 | \brief provides an extended input argument to QAbstractFileEngine's | - | ||||||
| 1172 | extension support. | - | ||||||
| 1173 | - | |||||||
| 1174 | \sa QAbstractFileEngine::extension() | - | ||||||
| 1175 | */ | - | ||||||
| 1176 | - | |||||||
| 1177 | /*! | - | ||||||
| 1178 | \class QAbstractFileEngine::ExtensionReturn | - | ||||||
| 1179 | \inmodule QtCore | - | ||||||
| 1180 | \since 4.3 | - | ||||||
| 1181 | \brief provides an extended output argument to QAbstractFileEngine's | - | ||||||
| 1182 | extension support. | - | ||||||
| 1183 | - | |||||||
| 1184 | \sa QAbstractFileEngine::extension() | - | ||||||
| 1185 | */ | - | ||||||
| 1186 | - | |||||||
| 1187 | /*! | - | ||||||
| 1188 | \since 4.3 | - | ||||||
| 1189 | - | |||||||
| 1190 | This virtual function can be reimplemented in a QAbstractFileEngine | - | ||||||
| 1191 | subclass to provide support for extensions. The \a option argument is | - | ||||||
| 1192 | provided as input to the extension, and this function can store output | - | ||||||
| 1193 | results in \a output. | - | ||||||
| 1194 | - | |||||||
| 1195 | The behavior of this function is determined by \a extension; see the | - | ||||||
| 1196 | Extension documentation for details. | - | ||||||
| 1197 | - | |||||||
| 1198 | You can call supportsExtension() to check if an extension is supported by | - | ||||||
| 1199 | the file engine. | - | ||||||
| 1200 | - | |||||||
| 1201 | By default, no extensions are supported, and this function returns \c false. | - | ||||||
| 1202 | - | |||||||
| 1203 | \sa supportsExtension(), Extension | - | ||||||
| 1204 | */ | - | ||||||
| 1205 | bool QAbstractFileEngine::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output) | - | ||||||
| 1206 | { | - | ||||||
| 1207 | Q_UNUSED(extension); | - | ||||||
| 1208 | Q_UNUSED(option); | - | ||||||
| 1209 | Q_UNUSED(output); | - | ||||||
| 1210 | return false; never executed: return false; | 0 | ||||||
| 1211 | } | - | ||||||
| 1212 | - | |||||||
| 1213 | /*! | - | ||||||
| 1214 | \since 4.3 | - | ||||||
| 1215 | - | |||||||
| 1216 | This virtual function returns \c true if the file engine supports \a | - | ||||||
| 1217 | extension; otherwise, false is returned. By default, no extensions are | - | ||||||
| 1218 | supported. | - | ||||||
| 1219 | - | |||||||
| 1220 | \sa extension() | - | ||||||
| 1221 | */ | - | ||||||
| 1222 | bool QAbstractFileEngine::supportsExtension(Extension extension) const | - | ||||||
| 1223 | { | - | ||||||
| 1224 | Q_UNUSED(extension); | - | ||||||
| 1225 | return false; never executed: return false; | 0 | ||||||
| 1226 | } | - | ||||||
| 1227 | - | |||||||
| 1228 | /*! | - | ||||||
| 1229 | Returns the QFile::FileError that resulted from the last failed | - | ||||||
| 1230 | operation. If QFile::UnspecifiedError is returned, QFile will | - | ||||||
| 1231 | use its own idea of the error status. | - | ||||||
| 1232 | - | |||||||
| 1233 | \sa QFile::FileError, errorString() | - | ||||||
| 1234 | */ | - | ||||||
| 1235 | QFile::FileError QAbstractFileEngine::error() const | - | ||||||
| 1236 | { | - | ||||||
| 1237 | Q_D(const QAbstractFileEngine); | - | ||||||
| 1238 | return d->fileError; executed 3754 times by 53 tests: return d->fileError;Executed by:
| 3754 | ||||||
| 1239 | } | - | ||||||
| 1240 | - | |||||||
| 1241 | /*! | - | ||||||
| 1242 | Returns the human-readable message appropriate to the current error | - | ||||||
| 1243 | reported by error(). If no suitable string is available, an | - | ||||||
| 1244 | empty string is returned. | - | ||||||
| 1245 | - | |||||||
| 1246 | \sa error() | - | ||||||
| 1247 | */ | - | ||||||
| 1248 | QString QAbstractFileEngine::errorString() const | - | ||||||
| 1249 | { | - | ||||||
| 1250 | Q_D(const QAbstractFileEngine); | - | ||||||
| 1251 | return d->errorString; executed 4349 times by 63 tests: return d->errorString;Executed by:
| 4349 | ||||||
| 1252 | } | - | ||||||
| 1253 | - | |||||||
| 1254 | /*! | - | ||||||
| 1255 | Sets the error type to \a error, and the error string to \a errorString. | - | ||||||
| 1256 | Call this function to set the error values returned by the higher-level | - | ||||||
| 1257 | classes. | - | ||||||
| 1258 | - | |||||||
| 1259 | \sa QFile::error(), QIODevice::errorString(), QIODevice::setErrorString() | - | ||||||
| 1260 | */ | - | ||||||
| 1261 | void QAbstractFileEngine::setError(QFile::FileError error, const QString &errorString) | - | ||||||
| 1262 | { | - | ||||||
| 1263 | Q_D(QAbstractFileEngine); | - | ||||||
| 1264 | d->fileError = error; | - | ||||||
| 1265 | d->errorString = errorString; | - | ||||||
| 1266 | } executed 6409 times by 71 tests: end of blockExecuted by:
| 6409 | ||||||
| 1267 | - | |||||||
| 1268 | QT_END_NAMESPACE | - | ||||||
| Source code | Switch to Preprocessed file |