From 9a4533405beae781b1dbb68e9273242730c58fdb Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 12 Sep 2024 12:51:06 -0400 Subject: [PATCH] cmExecuteProcessCommand: Explicitly ignore unknown ENCODING values The logic did this implicitly before. Make it easier to follow. --- Source/cmExecuteProcessCommand.cxx | 13 ++++++++++--- Source/cmProcessOutput.cxx | 6 ++++-- Source/cmProcessOutput.h | 4 +++- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Source/cmExecuteProcessCommand.cxx b/Source/cmExecuteProcessCommand.cxx index 2b923dfbfd..f98228bf89 100644 --- a/Source/cmExecuteProcessCommand.cxx +++ b/Source/cmExecuteProcessCommand.cxx @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -69,7 +70,7 @@ bool cmExecuteProcessCommand(std::vector const& args, bool ErrorStripTrailingWhitespace = false; bool EchoOutputVariable = false; bool EchoErrorVariable = false; - std::string Encoding; + cm::optional Encoding; std::string CommandErrorIsFatal; }; @@ -296,8 +297,14 @@ bool cmExecuteProcessCommand(std::vector const& args, }; ReadData outputData; ReadData errorData; - cmProcessOutput processOutput( - cmProcessOutput::FindEncoding(arguments.Encoding)); + cmProcessOutput::Encoding encoding = cmProcessOutput::Auto; + if (arguments.Encoding) { + if (cm::optional maybeEncoding = + cmProcessOutput::FindEncoding(*arguments.Encoding)) { + encoding = *maybeEncoding; + } + } + cmProcessOutput processOutput(encoding); std::string strdata; std::unique_ptr outputHandle; diff --git a/Source/cmProcessOutput.cxx b/Source/cmProcessOutput.cxx index e1df66116f..601d70183f 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::FindEncoding( std::string const& name) { - Encoding encoding = Auto; + cm::optional 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 8cee987a2b..f15e3f9e47 100644 --- a/Source/cmProcessOutput.h +++ b/Source/cmProcessOutput.h @@ -8,6 +8,8 @@ #include #include +#include + /** \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 FindEncoding(std::string const& name); /// The code page that is used as internal encoding to which we will encode. static unsigned int defaultCodepage;