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 block Executed 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 block Executed 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 block Executed by:
| 3 | ||||||||||||||||||||||||
55 | } executed 581 times by 7 tests: end of block Executed 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 block Executed 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 block Executed 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 block Executed 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 block Executed 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 |