Georg's mangling patch.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8485 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Angus Leeming 2004-03-11 11:45:08 +00:00
parent 60e502702e
commit f146640834
3 changed files with 31 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2004-03-09 Georg Baum <Georg.Baum@post.rwth-aachen.de>
* filename.[Ch] (mangledFilename): make sure that mangled names are
unique
2004-02-21 Georg Baum <Georg.Baum@post.rwth-aachen.de> 2004-02-21 Georg Baum <Georg.Baum@post.rwth-aachen.de>
* filetools.[Ch] (CreateBufferTmpDir): rename to createBufferTmpDir, * filetools.[Ch] (CreateBufferTmpDir): rename to createBufferTmpDir,

View File

@ -18,7 +18,11 @@
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <map>
#include <sstream>
using std::map;
using std::string; using std::string;
@ -65,6 +69,15 @@ string const FileName::outputFilename(string const & path) const
string const FileName::mangledFilename() const string const FileName::mangledFilename() const
{ {
// We need to make sure that every FileName instance for a given
// filename returns the same mangled name.
typedef map<string, string> MangledMap;
static MangledMap mangledNames;
MangledMap::const_iterator const it = mangledNames.find(name_);
if (it != mangledNames.end())
return (*it).second;
// Now the real work
string mname = os::slashify_path(name_); string mname = os::slashify_path(name_);
// Remove the extension. // Remove the extension.
mname = ChangeExtension(name_, string()); mname = ChangeExtension(name_, string());
@ -73,7 +86,15 @@ string const FileName::mangledFilename() const
// Replace '.' in the file name with '_' // Replace '.' in the file name with '_'
mname = subst(mname, ".", "_"); mname = subst(mname, ".", "_");
// Add the extension back on // Add the extension back on
return ChangeExtension(mname, GetExtension(name_)); mname = ChangeExtension(mname, GetExtension(name_));
// Prepend a counter to the filename. This is necessary to make
// the mangled name unique.
static int counter = 0;
std::ostringstream s;
s << counter++;
mname = s.str() + mname;
mangledNames[name_] = mname;
return mname;
} }

View File

@ -46,6 +46,10 @@ public:
/** \return a mangled version of the absolute file name, /** \return a mangled version of the absolute file name,
* suitable for use in the temp dir when, for example, converting * suitable for use in the temp dir when, for example, converting
* an image file to another format. * an image file to another format.
* It is guaranteed that
* - two different filenames have different mangled names
* - two FileName instances with the same filename have identical
* mangled names
*/ */
std::string const mangledFilename() const; std::string const mangledFilename() const;