X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2FFileName.cpp;h=929c4165bebd541bead6ce6e7a6a61774e12f89d;hb=8d640dc77608bedddb5b00982c23665584f52d21;hp=95880a0e79f7cf91e49239f68a9f5aa5ff71fd0d;hpb=f76d6997b710f7fb5180f0cd05415786de5d9417;p=lyx.git diff --git a/src/support/FileName.cpp b/src/support/FileName.cpp index 95880a0e79..929c4165be 100644 --- a/src/support/FileName.cpp +++ b/src/support/FileName.cpp @@ -17,7 +17,7 @@ #include "support/filetools.h" #include "support/lassert.h" #include "support/lstrings.h" -#include "support/qstring_helpers.h" +#include "support/mutex.h" #include "support/os.h" #include "support/Package.h" #include "support/qstring_helpers.h" @@ -31,7 +31,6 @@ #include #include -#include #include #include @@ -248,7 +247,7 @@ bool FileName::copyTo(FileName const & name, bool keepsymlink, bool FileName::renameTo(FileName const & name) const { - LYXERR(Debug::FILES, "Renaming " << name); + LYXERR(Debug::FILES, "Renaming " << name << " as " << *this); bool success = QFile::rename(d->fi.absoluteFilePath(), name.d->fi.absoluteFilePath()); if (!success) LYXERR0("Could not rename file " << *this << " to " << name); @@ -258,7 +257,7 @@ bool FileName::renameTo(FileName const & name) const bool FileName::moveTo(FileName const & name) const { - LYXERR(Debug::FILES, "Moving " << name); + LYXERR(Debug::FILES, "Moving " << name << " to " << *this); QFile::remove(name.d->fi.absoluteFilePath()); bool success = QFile::rename(d->fi.absoluteFilePath(), @@ -319,6 +318,9 @@ bool FileName::isSymLink() const } +//QFileInfo caching info might fool this test if file was changed meanwhile. +//refresh() helps, but we don't want to put it blindly here, because it might +//trigger slowdown on networked file systems. bool FileName::isFileEmpty() const { LASSERT(!empty(), return true); @@ -490,6 +492,12 @@ bool FileName::chdir() const } +bool FileName::link(FileName const & name) const +{ + return QFile::link(toqstr(absFileName()), toqstr(name.absFileName())); +} + + unsigned long checksum_ifstream_fallback(char const * file) { unsigned long result = 0; @@ -910,13 +918,15 @@ string DocFileName::outputFileName(string const & path) const string DocFileName::mangledFileName(string const & dir) const { - // FIXME THREAD // Concurrent access to these variables is possible. // We need to make sure that every DocFileName instance for a given // filename returns the same mangled name. typedef map MangledMap; static MangledMap mangledNames; + static Mutex mangledMutex; + // this locks both access to mangledNames and counter below + Mutex::Locker lock(&mangledMutex); MangledMap::const_iterator const it = mangledNames.find(absFileName()); if (it != mangledNames.end()) return (*it).second; @@ -942,7 +952,6 @@ string DocFileName::mangledFileName(string const & dir) const // Add the extension back on mname = support::changeExtension(mname, getExtension(name)); - // FIXME THREAD // Prepend a counter to the filename. This is necessary to make // the mangled name unique. static int counter = 0;