diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2017-06-28 23:36:19 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2017-08-23 04:02:19 +0000 |
commit | 189e9c93d7ed42202ad51507c8944d64e9a7888d (patch) | |
tree | 82f14423f4e78206024d5360922e9869b0224b1a /src/corelib/io/qfile.cpp | |
parent | b6a61211280aa6ddd56f107a9795c9824b7702b0 (diff) |
QTemporaryFile: Add support for Linux's O_TMPFILE
That means a file is never created, unless you ask for the name. There's
no chance of left-over temporary files being left behind. QSaveFile also
benefits from this, since the save file is not present on disk until
commit(). Unfortunately, QSaveFile must go through a temporary name
because linkat(2) cannot overwrite -- we need rename(2) for that (for
now).
[ChangeLog][Important Behavior Changes][QTemporaryFile] On Linux,
QTemporaryFile will attempt to create unnamed temporary files. If that
succeeds, open() will return true but exists() will be false. If you
call fileName() or any function that calls it, QTemporaryFile will give
the file a name, so most applications will not see a difference.
Change-Id: I1eba2b016de74620bfc8fffd14cc843e5b0919d0
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/corelib/io/qfile.cpp')
-rw-r--r-- | src/corelib/io/qfile.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index d32c2ed9fd..bac995ff25 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -556,7 +556,9 @@ bool QFile::rename(const QString &newName) { Q_D(QFile); - if (d->fileName.isEmpty()) { + + // if this is a QTemporaryFile, the virtual fileName() call here may do something + if (fileName().isEmpty()) { qWarning("QFile::rename: Empty or null file name"); return false; } @@ -717,7 +719,7 @@ bool QFile::link(const QString &linkName) { Q_D(QFile); - if (d->fileName.isEmpty()) { + if (fileName().isEmpty()) { qWarning("QFile::link: Empty or null file name"); return false; } @@ -763,7 +765,7 @@ bool QFile::copy(const QString &newName) { Q_D(QFile); - if (d->fileName.isEmpty()) { + if (fileName().isEmpty()) { qWarning("QFile::copy: Empty or null file name"); return false; } |