#include <config.h>
-#include "filename.h"
-
-#include "filetools.h"
-#include "lstrings.h"
-#include "os.h"
+#include "support/filename.h"
+#include "support/filetools.h"
+#include "support/lstrings.h"
+#include "support/os.h"
#include <boost/assert.hpp>
{
// We need to make sure that every FileName instance for a given
// filename returns the same mangled name.
- typedef map<string, string> MangledMap;
+ 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::internal_path(name_);
// Remove the extension.
mname = ChangeExtension(name_, string());
// Replace '/' in the file name with '_'
mname = subst(mname, ".", "_");
// Add the extension back on
mname = ChangeExtension(mname, GetExtension(name_));
+
+#if defined(__CYGWIN__) || defined(__CYGWIN32__) || defined(_WIN32)
+ // Mangle the drive letter in a Windows-style path.
+ if (mname.size() >= 2 && mname[1] == ':')
+ mname[1] = '_';
+#endif
+
// Prepend a counter to the filename. This is necessary to make
// the mangled name unique.
static int counter = 0;