summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen McMorran <bemcmorr@microsoft.com>2020-08-01 00:37:26 (GMT)
committerBrad King <brad.king@kitware.com>2020-08-03 16:56:41 (GMT)
commit67599c7ada47f37da950ca276538076be90eabb9 (patch)
treed78cf84b417209232b656bd782217fb74fbfaf4f
parent03d3cc1136f7736df5171e5153ed7f8a45a4107a (diff)
downloadCMake-67599c7ada47f37da950ca276538076be90eabb9.zip
CMake-67599c7ada47f37da950ca276538076be90eabb9.tar.gz
CMake-67599c7ada47f37da950ca276538076be90eabb9.tar.bz2
cmGeneratedFileStream: Add WriteRaw method
-rw-r--r--Source/cmGeneratedFileStream.cxx14
-rw-r--r--Source/cmGeneratedFileStream.h10
2 files changed, 23 insertions, 1 deletions
diff --git a/Source/cmGeneratedFileStream.cxx b/Source/cmGeneratedFileStream.cxx
index 345f0ba..2768547 100644
--- a/Source/cmGeneratedFileStream.cxx
+++ b/Source/cmGeneratedFileStream.cxx
@@ -14,10 +14,11 @@
#endif
cmGeneratedFileStream::cmGeneratedFileStream(Encoding encoding)
+ : OriginalLocale(getloc())
{
#ifndef CMAKE_BOOTSTRAP
if (encoding != codecvt::None) {
- imbue(std::locale(getloc(), new codecvt(encoding)));
+ imbue(std::locale(OriginalLocale, new codecvt(encoding)));
}
#else
static_cast<void>(encoding);
@@ -228,3 +229,14 @@ void cmGeneratedFileStream::SetTempExt(std::string const& ext)
{
this->TempExt = ext;
}
+
+void cmGeneratedFileStream::WriteRaw(std::string const& data)
+{
+#ifndef CMAKE_BOOTSTRAP
+ std::locale activeLocale = this->imbue(this->OriginalLocale);
+ this->write(data.data(), data.size());
+ this->imbue(activeLocale);
+#else
+ this->write(data.data(), data.size());
+#endif
+}
diff --git a/Source/cmGeneratedFileStream.h b/Source/cmGeneratedFileStream.h
index 3dee142..f6da86e 100644
--- a/Source/cmGeneratedFileStream.h
+++ b/Source/cmGeneratedFileStream.h
@@ -147,6 +147,16 @@ public:
* This does not work if the file was opened by the constructor.
*/
void SetTempExt(std::string const& ext);
+
+ /**
+ * Writes the given string directly to the file without changing the
+ * encoding.
+ */
+ void WriteRaw(std::string const& data);
+
+private:
+ // The original locale of the stream (performs no encoding conversion).
+ std::locale OriginalLocale;
};
#endif