mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-21 23:09:40 +00:00
Remove createTempFile method
and use the new and safer tempFileName() method instead for the creation of temporary directories
This commit is contained in:
parent
9e2928be68
commit
84658d37e2
@ -40,7 +40,6 @@
|
||||
#include "support/TempFile.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <QTemporaryFile>
|
||||
|
||||
#include "support/lassert.h"
|
||||
#include "support/regex.h"
|
||||
@ -460,7 +459,7 @@ string const commandPrep(string const & command_in)
|
||||
}
|
||||
|
||||
|
||||
FileName const tempFileName(string const & mask)
|
||||
FileName const tempFileName(string const & mask, bool const dir)
|
||||
{
|
||||
FileName tempfile = TempFile(mask).name();
|
||||
// Since the QTemporaryFile object is destroyed at function return
|
||||
@ -475,11 +474,16 @@ FileName const tempFileName(string const & mask)
|
||||
|
||||
// OK, we need another name. Simply append digits.
|
||||
FileName tmp = tempfile;
|
||||
tmp.changeExtension("");
|
||||
string ext;
|
||||
if (!dir) {
|
||||
// Store and remove extensions
|
||||
ext = "." + tempfile.extension();
|
||||
tmp.changeExtension("");
|
||||
}
|
||||
for (int i = 1; i < INT_MAX ;++i) {
|
||||
// Append digit to filename and re-add extension
|
||||
string const new_fn = tmp.absFileName() + convert<string>(i)
|
||||
+ "." + tempfile.extension();
|
||||
string const new_fn =
|
||||
tmp.absFileName() + convert<string>(i) + ext;
|
||||
if (tmp_names_.find(new_fn) == tmp_names_.end()) {
|
||||
tmp_names_.insert(new_fn);
|
||||
tempfile.set(new_fn);
|
||||
@ -505,35 +509,14 @@ void removeTempFile(FileName const & fn)
|
||||
}
|
||||
|
||||
|
||||
static string createTempFile(QString const & mask)
|
||||
{
|
||||
// FIXME: This is not safe. QTemporaryFile creates a file in open(),
|
||||
// but the file is deleted when qt_tmp goes out of scope.
|
||||
// Therefore the next call to createTempFile() may create the
|
||||
// same file again. To make this safe the QTemporaryFile object
|
||||
// needs to be kept for the whole life time of the temp file name.
|
||||
// This could be achieved by creating a class TempDir (like
|
||||
// TempFile, but using a currently non-existing
|
||||
// QTemporaryDirectory object).
|
||||
QTemporaryFile qt_tmp(mask + ".XXXXXXXXXXXX");
|
||||
if (qt_tmp.open()) {
|
||||
string const temp_file = fromqstr(qt_tmp.fileName());
|
||||
LYXERR(Debug::FILES, "Temporary file `" << temp_file << "' created.");
|
||||
return temp_file;
|
||||
}
|
||||
LYXERR(Debug::FILES, "Unable to create temporary file with following template: "
|
||||
<< qt_tmp.fileTemplate());
|
||||
return string();
|
||||
}
|
||||
|
||||
|
||||
static FileName createTmpDir(FileName const & tempdir, string const & mask)
|
||||
{
|
||||
LYXERR(Debug::FILES, "createTmpDir: tempdir=`" << tempdir << "'\n"
|
||||
<< "createTmpDir: mask=`" << mask << '\'');
|
||||
|
||||
QFileInfo tmp_fi(QDir(toqstr(tempdir.absFileName())), toqstr(mask));
|
||||
FileName const tmpfl(createTempFile(tmp_fi.absoluteFilePath()));
|
||||
FileName const tmpfl =
|
||||
tempFileName(fromqstr(tmp_fi.absoluteFilePath()) + ".XXXXXXXXXXXX", true);
|
||||
|
||||
if (tmpfl.empty() || !tmpfl.createDirectory(0700)) {
|
||||
LYXERR0("LyX could not create temporary directory in " << tempdir
|
||||
|
@ -40,7 +40,7 @@ static std::set<std::string> tmp_names_;
|
||||
* all used temp file names.
|
||||
* If you don't have to remove the temp file manually, use TempFile instead!
|
||||
*/
|
||||
FileName const tempFileName(std::string const &);
|
||||
FileName const tempFileName(std::string const &, bool const dir = false);
|
||||
|
||||
/// Remove and unregister a temporary file.
|
||||
void removeTempFile(FileName const &);
|
||||
|
Loading…
x
Reference in New Issue
Block a user