summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-09-12 16:51:06 (GMT)
committerBrad King <brad.king@kitware.com>2024-09-16 10:37:15 (GMT)
commit9a4533405beae781b1dbb68e9273242730c58fdb (patch)
treed3daa2b6f7af03fdbdf1fde6e185d6c5bbb0e28a
parentc76a5458acd3f1278208eae2c8d336604ec2b058 (diff)
downloadCMake-9a4533405beae781b1dbb68e9273242730c58fdb.zip
CMake-9a4533405beae781b1dbb68e9273242730c58fdb.tar.gz
CMake-9a4533405beae781b1dbb68e9273242730c58fdb.tar.bz2
cmExecuteProcessCommand: Explicitly ignore unknown ENCODING values
The logic did this implicitly before. Make it easier to follow.
-rw-r--r--Source/cmExecuteProcessCommand.cxx13
-rw-r--r--Source/cmProcessOutput.cxx6
-rw-r--r--Source/cmProcessOutput.h4
3 files changed, 17 insertions, 6 deletions
diff --git a/Source/cmExecuteProcessCommand.cxx b/Source/cmExecuteProcessCommand.cxx
index 2b923df..f98228b 100644
--- a/Source/cmExecuteProcessCommand.cxx
+++ b/Source/cmExecuteProcessCommand.cxx
@@ -11,6 +11,7 @@
#include <utility>
#include <vector>
+#include <cm/optional>
#include <cm/string_view>
#include <cmext/algorithm>
#include <cmext/string_view>
@@ -69,7 +70,7 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args,
bool ErrorStripTrailingWhitespace = false;
bool EchoOutputVariable = false;
bool EchoErrorVariable = false;
- std::string Encoding;
+ cm::optional<std::string> Encoding;
std::string CommandErrorIsFatal;
};
@@ -296,8 +297,14 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args,
};
ReadData outputData;
ReadData errorData;
- cmProcessOutput processOutput(
- cmProcessOutput::FindEncoding(arguments.Encoding));
+ cmProcessOutput::Encoding encoding = cmProcessOutput::Auto;
+ if (arguments.Encoding) {
+ if (cm::optional<cmProcessOutput::Encoding> maybeEncoding =
+ cmProcessOutput::FindEncoding(*arguments.Encoding)) {
+ encoding = *maybeEncoding;
+ }
+ }
+ cmProcessOutput processOutput(encoding);
std::string strdata;
std::unique_ptr<cmUVStreamReadHandle> outputHandle;
diff --git a/Source/cmProcessOutput.cxx b/Source/cmProcessOutput.cxx
index e1df661..601d701 100644
--- a/Source/cmProcessOutput.cxx
+++ b/Source/cmProcessOutput.cxx
@@ -12,16 +12,18 @@ unsigned int cmProcessOutput::defaultCodepage =
KWSYS_ENCODING_DEFAULT_CODEPAGE;
#endif
-cmProcessOutput::Encoding cmProcessOutput::FindEncoding(
+cm::optional<cmProcessOutput::Encoding> cmProcessOutput::FindEncoding(
std::string const& name)
{
- Encoding encoding = Auto;
+ cm::optional<Encoding> encoding;
if ((name == "UTF8") || (name == "UTF-8")) {
encoding = UTF8;
} else if (name == "NONE") {
encoding = None;
} else if (name == "ANSI") {
encoding = ANSI;
+ } else if (name == "AUTO") {
+ encoding = Auto;
} else if (name == "OEM") {
encoding = OEM;
}
diff --git a/Source/cmProcessOutput.h b/Source/cmProcessOutput.h
index 8cee987..f15e3f9 100644
--- a/Source/cmProcessOutput.h
+++ b/Source/cmProcessOutput.h
@@ -8,6 +8,8 @@
#include <string>
#include <vector>
+#include <cm/optional>
+
/** \class cmProcessOutput
* \brief Decode text data to internal encoding.
*
@@ -31,7 +33,7 @@ public:
* \param name a encoding name.
* \return encoding enum value or Auto if \a name was not found.
*/
- static Encoding FindEncoding(std::string const& name);
+ static cm::optional<Encoding> FindEncoding(std::string const& name);
/// The code page that is used as internal encoding to which we will encode.
static unsigned int defaultCodepage;