| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/corelib/io/qsavefile.cpp |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||||||||||||||
| 2 | - | |||||||||||||||||||||||||
| 3 | - | |||||||||||||||||||||||||
| 4 | - | |||||||||||||||||||||||||
| 5 | - | |||||||||||||||||||||||||
| 6 | - | |||||||||||||||||||||||||
| 7 | - | |||||||||||||||||||||||||
| 8 | - | |||||||||||||||||||||||||
| 9 | QSaveFilePrivate::QSaveFilePrivate() | - | ||||||||||||||||||||||||
| 10 | : writeError(QFileDevice::NoError), | - | ||||||||||||||||||||||||
| 11 | useTemporaryFile(true), | - | ||||||||||||||||||||||||
| 12 | directWriteFallback(false) | - | ||||||||||||||||||||||||
| 13 | { | - | ||||||||||||||||||||||||
| 14 | } executed 581 times by 7 tests: end of blockExecuted by:
| 581 | ||||||||||||||||||||||||
| 15 | - | |||||||||||||||||||||||||
| 16 | QSaveFilePrivate::~QSaveFilePrivate() | - | ||||||||||||||||||||||||
| 17 | { | - | ||||||||||||||||||||||||
| 18 | } | - | ||||||||||||||||||||||||
| 19 | QSaveFile::QSaveFile(QObject *parent) | - | ||||||||||||||||||||||||
| 20 | : QFileDevice(*new QSaveFilePrivate, parent) | - | ||||||||||||||||||||||||
| 21 | { | - | ||||||||||||||||||||||||
| 22 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 23 | - | |||||||||||||||||||||||||
| 24 | - | |||||||||||||||||||||||||
| 25 | - | |||||||||||||||||||||||||
| 26 | QSaveFile::QSaveFile(const QString &name) | - | ||||||||||||||||||||||||
| 27 | : QFileDevice(*new QSaveFilePrivate, 0) | - | ||||||||||||||||||||||||
| 28 | { | - | ||||||||||||||||||||||||
| 29 | QSaveFilePrivate * const d = d_func(); | - | ||||||||||||||||||||||||
| 30 | d->fileName = name; | - | ||||||||||||||||||||||||
| 31 | } executed 581 times by 7 tests: end of blockExecuted by:
| 581 | ||||||||||||||||||||||||
| 32 | - | |||||||||||||||||||||||||
| 33 | - | |||||||||||||||||||||||||
| 34 | - | |||||||||||||||||||||||||
| 35 | - | |||||||||||||||||||||||||
| 36 | QSaveFile::QSaveFile(const QString &name, QObject *parent) | - | ||||||||||||||||||||||||
| 37 | : QFileDevice(*new QSaveFilePrivate, parent) | - | ||||||||||||||||||||||||
| 38 | { | - | ||||||||||||||||||||||||
| 39 | QSaveFilePrivate * const d = d_func(); | - | ||||||||||||||||||||||||
| 40 | d->fileName = name; | - | ||||||||||||||||||||||||
| 41 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 42 | - | |||||||||||||||||||||||||
| 43 | - | |||||||||||||||||||||||||
| 44 | - | |||||||||||||||||||||||||
| 45 | - | |||||||||||||||||||||||||
| 46 | QSaveFile::~QSaveFile() | - | ||||||||||||||||||||||||
| 47 | { | - | ||||||||||||||||||||||||
| 48 | QSaveFilePrivate * const d = d_func(); | - | ||||||||||||||||||||||||
| 49 | QFileDevice::close(); | - | ||||||||||||||||||||||||
| 50 | if (d->fileEngine
| 3-578 | ||||||||||||||||||||||||
| 51 | d->fileEngine->remove(); | - | ||||||||||||||||||||||||
| 52 | delete d->fileEngine; | - | ||||||||||||||||||||||||
| 53 | d->fileEngine = 0; | - | ||||||||||||||||||||||||
| 54 | } executed 3 times by 1 test: end of blockExecuted by:
| 3 | ||||||||||||||||||||||||
| 55 | } executed 581 times by 7 tests: end of blockExecuted by:
| 581 | ||||||||||||||||||||||||
| 56 | - | |||||||||||||||||||||||||
| 57 | - | |||||||||||||||||||||||||
| 58 | - | |||||||||||||||||||||||||
| 59 | - | |||||||||||||||||||||||||
| 60 | - | |||||||||||||||||||||||||
| 61 | - | |||||||||||||||||||||||||
| 62 | - | |||||||||||||||||||||||||
| 63 | QString QSaveFile::fileName() const | - | ||||||||||||||||||||||||
| 64 | { | - | ||||||||||||||||||||||||
| 65 | return executed 12 times by 1 test: d_func()->fileName;return d_func()->fileName;Executed by:
executed 12 times by 1 test: return d_func()->fileName;Executed by:
| 12 | ||||||||||||||||||||||||
| 66 | } | - | ||||||||||||||||||||||||
| 67 | - | |||||||||||||||||||||||||
| 68 | - | |||||||||||||||||||||||||
| 69 | - | |||||||||||||||||||||||||
| 70 | - | |||||||||||||||||||||||||
| 71 | - | |||||||||||||||||||||||||
| 72 | - | |||||||||||||||||||||||||
| 73 | - | |||||||||||||||||||||||||
| 74 | void QSaveFile::setFileName(const QString &name) | - | ||||||||||||||||||||||||
| 75 | { | - | ||||||||||||||||||||||||
| 76 | d_func()->fileName = name; | - | ||||||||||||||||||||||||
| 77 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 78 | bool QSaveFile::open(OpenMode mode) | - | ||||||||||||||||||||||||
| 79 | { | - | ||||||||||||||||||||||||
| 80 | QSaveFilePrivate * const d = d_func(); | - | ||||||||||||||||||||||||
| 81 | if (isOpen()
| 0-583 | ||||||||||||||||||||||||
| 82 | QMessageLogger(__FILE__, 185, __PRETTY_FUNCTION__).warning("QSaveFile::open: File (%s) already open", QString(fileName()).toLocal8Bit().constData()); | - | ||||||||||||||||||||||||
| 83 | return never executed: false;return false;never executed: return false; | 0 | ||||||||||||||||||||||||
| 84 | } | - | ||||||||||||||||||||||||
| 85 | unsetError(); | - | ||||||||||||||||||||||||
| 86 | if ((
| 0-583 | ||||||||||||||||||||||||
| 87 | QMessageLogger(__FILE__, 190, __PRETTY_FUNCTION__).warning("QSaveFile::open: Open mode not specified"); | - | ||||||||||||||||||||||||
| 88 | return never executed: false;return false;never executed: return false; | 0 | ||||||||||||||||||||||||
| 89 | } | - | ||||||||||||||||||||||||
| 90 | - | |||||||||||||||||||||||||
| 91 | if ((mode & ReadOnly) || (mode & Append)) { | - | ||||||||||||||||||||||||
| 92 | QMessageLogger(__FILE__, 195, __PRETTY_FUNCTION__).warning("QSaveFile::open: Unsupported open mode 0x%x", int(mode)); | - | ||||||||||||||||||||||||
| 93 | return never executed: false;return false;never executed: return false; | 0 | ||||||||||||||||||||||||
| 94 | } | - | ||||||||||||||||||||||||
| 95 | - | |||||||||||||||||||||||||
| 96 | - | |||||||||||||||||||||||||
| 97 | QFileInfo existingFile(d->fileName); | - | ||||||||||||||||||||||||
| 98 | if (existingFile.exists()
| 1-457 | ||||||||||||||||||||||||
| 99 | d->setError(QFileDevice::WriteError, QSaveFile::tr("Existing file %1 is not writable").arg(d->fileName)); | - | ||||||||||||||||||||||||
| 100 | d->writeError = QFileDevice::WriteError; | - | ||||||||||||||||||||||||
| 101 | return executed 1 time by 1 test: false;return false;Executed by:
executed 1 time by 1 test: return false;Executed by:
| 1 | ||||||||||||||||||||||||
| 102 | } | - | ||||||||||||||||||||||||
| 103 | - | |||||||||||||||||||||||||
| 104 | if (existingFile.isDir()
| 0-582 | ||||||||||||||||||||||||
| 105 | d->setError(QFileDevice::WriteError, QSaveFile::tr("Filename refers to a directory")); | - | ||||||||||||||||||||||||
| 106 | d->writeError = QFileDevice::WriteError; | - | ||||||||||||||||||||||||
| 107 | return never executed: false;return false;never executed: return false; | 0 | ||||||||||||||||||||||||
| 108 | } | - | ||||||||||||||||||||||||
| 109 | - | |||||||||||||||||||||||||
| 110 | - | |||||||||||||||||||||||||
| 111 | - | |||||||||||||||||||||||||
| 112 | d->finalFileName = d->fileName; | - | ||||||||||||||||||||||||
| 113 | if (existingFile.isSymLink()
| 5-577 | ||||||||||||||||||||||||
| 114 | int maxDepth = 128; | - | ||||||||||||||||||||||||
| 115 | while (--
| 2-261 | ||||||||||||||||||||||||
| 116 | existingFile.setFile(existingFile.symLinkTarget()); executed 258 times by 1 test: existingFile.setFile(existingFile.symLinkTarget());Executed by:
| 258 | ||||||||||||||||||||||||
| 117 | if (maxDepth > 0
| 2-3 | ||||||||||||||||||||||||
| 118 | d->finalFileName = existingFile.filePath(); executed 3 times by 1 test: d->finalFileName = existingFile.filePath();Executed by:
| 3 | ||||||||||||||||||||||||
| 119 | } executed 5 times by 1 test: end of blockExecuted by:
| 5 | ||||||||||||||||||||||||
| 120 | - | |||||||||||||||||||||||||
| 121 | d->fileEngine = new QTemporaryFileEngine; | - | ||||||||||||||||||||||||
| 122 | static_cast<QTemporaryFileEngine *>(d->fileEngine)->initialize(d->finalFileName, 0666); | - | ||||||||||||||||||||||||
| 123 | - | |||||||||||||||||||||||||
| 124 | if (!d->fileEngine->open(mode | QIODevice::Unbuffered)
| 5-577 | ||||||||||||||||||||||||
| 125 | QFileDevice::FileError err = d->fileEngine->error(); | - | ||||||||||||||||||||||||
| 126 | - | |||||||||||||||||||||||||
| 127 | if (d->directWriteFallback
| 0-3 | ||||||||||||||||||||||||
| 128 | delete d->fileEngine; | - | ||||||||||||||||||||||||
| 129 | d->fileEngine = QAbstractFileEngine::create(d->finalFileName); | - | ||||||||||||||||||||||||
| 130 | if (d->fileEngine->open(mode | QIODevice::Unbuffered)
| 0-2 | ||||||||||||||||||||||||
| 131 | d->useTemporaryFile = false; | - | ||||||||||||||||||||||||
| 132 | QFileDevice::open(mode); | - | ||||||||||||||||||||||||
| 133 | return executed 2 times by 1 test: true;return true;Executed by:
executed 2 times by 1 test: return true;Executed by:
| 2 | ||||||||||||||||||||||||
| 134 | } | - | ||||||||||||||||||||||||
| 135 | err = d->fileEngine->error(); | - | ||||||||||||||||||||||||
| 136 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 137 | - | |||||||||||||||||||||||||
| 138 | if (err == QFileDevice::UnspecifiedError
| 0-3 | ||||||||||||||||||||||||
| 139 | err = QFileDevice::OpenError; never executed: err = QFileDevice::OpenError; | 0 | ||||||||||||||||||||||||
| 140 | d->setError(err, d->fileEngine->errorString()); | - | ||||||||||||||||||||||||
| 141 | delete d->fileEngine; | - | ||||||||||||||||||||||||
| 142 | d->fileEngine = 0; | - | ||||||||||||||||||||||||
| 143 | return executed 3 times by 1 test: false;return false;Executed by:
executed 3 times by 1 test: return false;Executed by:
| 3 | ||||||||||||||||||||||||
| 144 | } | - | ||||||||||||||||||||||||
| 145 | - | |||||||||||||||||||||||||
| 146 | d->useTemporaryFile = true; | - | ||||||||||||||||||||||||
| 147 | QFileDevice::open(mode); | - | ||||||||||||||||||||||||
| 148 | if (existingFile.exists()
| 124-453 | ||||||||||||||||||||||||
| 149 | setPermissions(existingFile.permissions()); executed 453 times by 7 tests: setPermissions(existingFile.permissions());Executed by:
| 453 | ||||||||||||||||||||||||
| 150 | return executed 577 times by 7 tests: true;return true;Executed by:
executed 577 times by 7 tests: return true;Executed by:
| 577 | ||||||||||||||||||||||||
| 151 | } | - | ||||||||||||||||||||||||
| 152 | - | |||||||||||||||||||||||||
| 153 | - | |||||||||||||||||||||||||
| 154 | - | |||||||||||||||||||||||||
| 155 | - | |||||||||||||||||||||||||
| 156 | - | |||||||||||||||||||||||||
| 157 | - | |||||||||||||||||||||||||
| 158 | - | |||||||||||||||||||||||||
| 159 | void QSaveFile::close() | - | ||||||||||||||||||||||||
| 160 | { | - | ||||||||||||||||||||||||
| 161 | QMessageLogger(__FILE__, 264, __PRETTY_FUNCTION__).fatal("QSaveFile::close called"); | - | ||||||||||||||||||||||||
| 162 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 163 | bool QSaveFile::commit() | - | ||||||||||||||||||||||||
| 164 | { | - | ||||||||||||||||||||||||
| 165 | QSaveFilePrivate * const d = d_func(); | - | ||||||||||||||||||||||||
| 166 | if (!d->fileEngine
| 2-576 | ||||||||||||||||||||||||
| 167 | return executed 2 times by 1 test: false;return false;Executed by:
executed 2 times by 1 test: return false;Executed by:
| 2 | ||||||||||||||||||||||||
| 168 | - | |||||||||||||||||||||||||
| 169 | if (!isOpen()
| 0-576 | ||||||||||||||||||||||||
| 170 | QMessageLogger(__FILE__, 286, __PRETTY_FUNCTION__).warning("QSaveFile::commit: File (%s) is not open", QString(fileName()).toLocal8Bit().constData()); | - | ||||||||||||||||||||||||
| 171 | return never executed: false;return false;never executed: return false; | 0 | ||||||||||||||||||||||||
| 172 | } | - | ||||||||||||||||||||||||
| 173 | QFileDevice::close(); | - | ||||||||||||||||||||||||
| 174 | - | |||||||||||||||||||||||||
| 175 | - | |||||||||||||||||||||||||
| 176 | d->fileEngine->syncToDisk(); | - | ||||||||||||||||||||||||
| 177 | - | |||||||||||||||||||||||||
| 178 | if (d->useTemporaryFile
| 2-574 | ||||||||||||||||||||||||
| 179 | if (d->writeError != QFileDevice::NoError
| 1-573 | ||||||||||||||||||||||||
| 180 | d->fileEngine->remove(); | - | ||||||||||||||||||||||||
| 181 | d->writeError = QFileDevice::NoError; | - | ||||||||||||||||||||||||
| 182 | delete d->fileEngine; | - | ||||||||||||||||||||||||
| 183 | d->fileEngine = 0; | - | ||||||||||||||||||||||||
| 184 | return executed 1 time by 1 test: false;return false;Executed by:
executed 1 time by 1 test: return false;Executed by:
| 1 | ||||||||||||||||||||||||
| 185 | } | - | ||||||||||||||||||||||||
| 186 | - | |||||||||||||||||||||||||
| 187 | - | |||||||||||||||||||||||||
| 188 | ((!(d->fileEngine)) ? qt_assert("d->fileEngine",__FILE__,304) : qt_noop()); | - | ||||||||||||||||||||||||
| 189 | if (!d->fileEngine->renameOverwrite(d->finalFileName)
| 1-572 | ||||||||||||||||||||||||
| 190 | d->setError(d->fileEngine->error(), d->fileEngine->errorString()); | - | ||||||||||||||||||||||||
| 191 | d->fileEngine->remove(); | - | ||||||||||||||||||||||||
| 192 | delete d->fileEngine; | - | ||||||||||||||||||||||||
| 193 | d->fileEngine = 0; | - | ||||||||||||||||||||||||
| 194 | return executed 1 time by 1 test: false;return false;Executed by:
executed 1 time by 1 test: return false;Executed by:
| 1 | ||||||||||||||||||||||||
| 195 | } | - | ||||||||||||||||||||||||
| 196 | } executed 572 times by 7 tests: end of blockExecuted by:
| 572 | ||||||||||||||||||||||||
| 197 | delete d->fileEngine; | - | ||||||||||||||||||||||||
| 198 | d->fileEngine = 0; | - | ||||||||||||||||||||||||
| 199 | return executed 574 times by 7 tests: true;return true;Executed by:
executed 574 times by 7 tests: return true;Executed by:
| 574 | ||||||||||||||||||||||||
| 200 | } | - | ||||||||||||||||||||||||
| 201 | void QSaveFile::cancelWriting() | - | ||||||||||||||||||||||||
| 202 | { | - | ||||||||||||||||||||||||
| 203 | QSaveFilePrivate * const d = d_func(); | - | ||||||||||||||||||||||||
| 204 | if (!isOpen()
| 0-2 | ||||||||||||||||||||||||
| 205 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 206 | d->setError(QFileDevice::WriteError, QSaveFile::tr("Writing canceled by application")); | - | ||||||||||||||||||||||||
| 207 | d->writeError = QFileDevice::WriteError; | - | ||||||||||||||||||||||||
| 208 | } executed 2 times by 1 test: end of blockExecuted by:
| 2 | ||||||||||||||||||||||||
| 209 | - | |||||||||||||||||||||||||
| 210 | - | |||||||||||||||||||||||||
| 211 | - | |||||||||||||||||||||||||
| 212 | - | |||||||||||||||||||||||||
| 213 | qint64 QSaveFile::writeData(const char *data, qint64 len) | - | ||||||||||||||||||||||||
| 214 | { | - | ||||||||||||||||||||||||
| 215 | QSaveFilePrivate * const d = d_func(); | - | ||||||||||||||||||||||||
| 216 | if (d->writeError != QFileDevice::NoError
| 0-6672 | ||||||||||||||||||||||||
| 217 | return never executed: -1;return -1;never executed: return -1; | 0 | ||||||||||||||||||||||||
| 218 | - | |||||||||||||||||||||||||
| 219 | const qint64 ret = QFileDevice::writeData(data, len); | - | ||||||||||||||||||||||||
| 220 | - | |||||||||||||||||||||||||
| 221 | if (d->error != QFileDevice::NoError
| 0-6672 | ||||||||||||||||||||||||
| 222 | d->writeError = d->error; never executed: d->writeError = d->error; | 0 | ||||||||||||||||||||||||
| 223 | return executed 6672 times by 7 tests: ret;return ret;Executed by:
executed 6672 times by 7 tests: return ret;Executed by:
| 6672 | ||||||||||||||||||||||||
| 224 | } | - | ||||||||||||||||||||||||
| 225 | void QSaveFile::setDirectWriteFallback(bool enabled) | - | ||||||||||||||||||||||||
| 226 | { | - | ||||||||||||||||||||||||
| 227 | QSaveFilePrivate * const d = d_func(); | - | ||||||||||||||||||||||||
| 228 | d->directWriteFallback = enabled; | - | ||||||||||||||||||||||||
| 229 | } executed 2 times by 1 test: end of blockExecuted by:
| 2 | ||||||||||||||||||||||||
| 230 | - | |||||||||||||||||||||||||
| 231 | - | |||||||||||||||||||||||||
| 232 | - | |||||||||||||||||||||||||
| 233 | - | |||||||||||||||||||||||||
| 234 | - | |||||||||||||||||||||||||
| 235 | - | |||||||||||||||||||||||||
| 236 | - | |||||||||||||||||||||||||
| 237 | bool QSaveFile::directWriteFallback() const | - | ||||||||||||||||||||||||
| 238 | { | - | ||||||||||||||||||||||||
| 239 | const QSaveFilePrivate * const d = d_func(); | - | ||||||||||||||||||||||||
| 240 | return executed 2 times by 1 test: d->directWriteFallback;return d->directWriteFallback;Executed by:
executed 2 times by 1 test: return d->directWriteFallback;Executed by:
| 2 | ||||||||||||||||||||||||
| 241 | } | - | ||||||||||||||||||||||||
| 242 | - | |||||||||||||||||||||||||
| 243 | - | |||||||||||||||||||||||||
| Switch to Source code | Preprocessed file |