#include "support/gzstream.h"
#include "support/lstrings.h"
#include "support/lyxalgo.h"
+#include "support/mutex.h"
#include "support/os.h"
#include "support/Package.h"
#include "support/PathChanger.h"
/// Creates the per buffer temporary directory
static FileName createBufferTmpDir()
{
- // FIXME THREAD
- static int count;
+ // FIXME This would be the ideal application for a TempDir class (like
+ // TempFile but for directories)
+ string counter;
+ {
+ static int count;
+ static Mutex mutex;
+ Mutex::Locker locker(&mutex);
+ counter = convert<string>(count++);
+ }
// We are in our own directory. Why bother to mangle name?
// In fact I wrote this code to circumvent a problematic behaviour
// (bug?) of EMX mkstemp().
FileName tmpfl(package().temp_dir().absFileName() + "/lyx_tmpbuf" +
- convert<string>(count++));
+ counter);
if (!tmpfl.createDirectory(0777)) {
throw ExceptionMessage(WarningException, _("Disk Error: "), bformat(
// Copy child authors to the params. We need those pointers.
AuthorList const & child_authors = params().authors();
AuthorList::Authors::const_iterator it = child_authors.begin();
- for (; it != child_authors.end(); it++)
+ for (; it != child_authors.end(); ++it)
mparams.authors().record(*it);
return mparams;
}
}
-void Buffer::getSourceCode(odocstream & os, string const format,
+void Buffer::getSourceCode(odocstream & os, string const & format,
pit_type par_begin, pit_type par_end,
OutputWhat output, bool master) const
{
tempfile.setAutoRemove(false);
FileName const tmp_ret = tempfile.name();
if (!tmp_ret.empty()) {
- buffer_.writeFile(tmp_ret);
- // assume successful write of tmp_ret
- if (!tmp_ret.moveTo(fname_))
+ if (!buffer_.writeFile(tmp_ret))
+ failed = true;
+ else if (!tmp_ret.moveTo(fname_))
failed = true;
} else
failed = true;