diff options
author | Brad King <brad.king@kitware.com> | 2024-09-12 16:51:06 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2024-09-16 10:37:15 (GMT) |
commit | 9a4533405beae781b1dbb68e9273242730c58fdb (patch) | |
tree | d3daa2b6f7af03fdbdf1fde6e185d6c5bbb0e28a | |
parent | c76a5458acd3f1278208eae2c8d336604ec2b058 (diff) | |
download | CMake-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.cxx | 13 | ||||
-rw-r--r-- | Source/cmProcessOutput.cxx | 6 | ||||
-rw-r--r-- | Source/cmProcessOutput.h | 4 |
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; |