This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, master has been updated via f6df9c2565ed00ec6f57c32a36dd451c60917f97 (commit) via ec892a572bc6fa197b8836e4f186b2fc80ff03c9 (commit) via 8573e20c43af4e0313a001f4fbc325ab5a899e3d (commit) via 49117623581f8f154adcf92820dce48a4dfbe71d (commit) via a929255dec9e46ccc27d7b44d000a2e568cbfd99 (commit) via 1b30b28c042660c37f24d11a804ea697ea8601ef (commit) via 6675f785bec2d777720abbdc062f514bd838b879 (commit) via 09977c181641dd4feea8fc13bf718f0f9cfe05bb (commit) via 2f19e53705a6e60af37964c146a742d845f84870 (commit) via 2c5454f227027552966519c40feb2732b37ec542 (commit) via ad3183db8cbc15d25b9326b5b479eba01e87f30a (commit) from f22a2a1fa536127739baa8f6e020d9972adeb5c2 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f6df9c2565ed00ec6f57c32a36dd451c60917f97 commit f6df9c2565ed00ec6f57c32a36dd451c60917f97 Merge: f22a2a1 ec892a5 Author: Brad King <brad.k...@kitware.com> AuthorDate: Mon Jul 29 15:56:07 2019 +0000 Commit: Kitware Robot <kwro...@kitware.com> CommitDate: Mon Jul 29 11:56:29 2019 -0400 Merge topic 'modernize_string_view_cmOutputConverter' ec892a572b cmOutputConverter: Make shell escaping methods cm::string_view based 8573e20c43 cmOutputConverter: Let GetFortranFormat accept a cm::string_view 4911762358 cmOutputConverter: Return bool instead of int in utility functions a929255dec cmOutputConverter: Let cmOutputConverterIsShellOperator accept cm::string_view 1b30b28c04 cmOutputConverter: Let cmOutputConverterIsShellOperator accept cm::string_view 6675f785be cmOutputConverter: Let EscapeForCMake accept a cm::string_view 09977c1816 cmSystemTool: Let TrimWhitespace accept a cm::string_view 2f19e53705 cmSystemTool: Let HelpFileName accept a cm::string_view ... Acked-by: Kitware Robot <kwro...@kitware.com> Merge-request: !3615 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ec892a572bc6fa197b8836e4f186b2fc80ff03c9 commit ec892a572bc6fa197b8836e4f186b2fc80ff03c9 Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 17:19:32 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:48:59 2019 +0200 cmOutputConverter: Make shell escaping methods cm::string_view based diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index 32410f4..da7f8bc 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -6,7 +6,6 @@ #include <assert.h> #include <ctype.h> #include <set> -#include <string.h> #include <vector> #include "cmState.h" @@ -38,10 +37,10 @@ std::string cmOutputConverter::ConvertToOutputForExisting( return this->ConvertToOutputFormat(remote, format); } -std::string cmOutputConverter::ConvertToOutputFormat(const std::string& source, +std::string cmOutputConverter::ConvertToOutputFormat(cm::string_view source, OutputFormat output) const { - std::string result = source; + std::string result(source); // Convert it to an output path. if (output == SHELL || output == WATCOMQUOTE) { result = this->ConvertDirectorySeparatorsForShell(source); @@ -79,13 +78,13 @@ static bool cmOutputConverterIsShellOperator(cm::string_view str) return (shellOperators.count(str) != 0); } -std::string cmOutputConverter::EscapeForShell(const std::string& str, +std::string cmOutputConverter::EscapeForShell(cm::string_view str, bool makeVars, bool forEcho, bool useWatcomQuote) const { // Do not escape shell operators. if (cmOutputConverterIsShellOperator(str)) { - return str; + return std::string(str); } // Compute the flags for the target shell environment. @@ -117,7 +116,7 @@ std::string cmOutputConverter::EscapeForShell(const std::string& str, flags |= Shell_Flag_IsUnix; } - return Shell__GetArgument(str.c_str(), flags); + return Shell__GetArgument(str, flags); } std::string cmOutputConverter::EscapeForCMake(cm::string_view str) @@ -143,7 +142,7 @@ std::string cmOutputConverter::EscapeForCMake(cm::string_view str) return result; } -std::string cmOutputConverter::EscapeWindowsShellArgument(const char* arg, +std::string cmOutputConverter::EscapeWindowsShellArgument(cm::string_view arg, int shell_flags) { return Shell__GetArgument(arg, shell_flags); @@ -270,14 +269,15 @@ bool cmOutputConverter::Shell__CharNeedsQuotes(char c, int flags) return false; } -const char* cmOutputConverter::Shell__SkipMakeVariables(const char* c) +cm::string_view::iterator cmOutputConverter::Shell__SkipMakeVariables( + cm::string_view::iterator c, cm::string_view::iterator end) { - while (*c == '$' && *(c + 1) == '(') { - const char* skip = c + 2; - while (Shell__CharIsMakeVariableName(*skip)) { + while ((c != end && (c + 1) != end) && (*c == '$' && *(c + 1) == '(')) { + cm::string_view::iterator skip = c + 2; + while ((skip != end) && Shell__CharIsMakeVariableName(*skip)) { ++skip; } - if (*skip == ')') { + if ((skip != end) && *skip == ')') { c = skip + 1; } else { break; @@ -309,47 +309,46 @@ flag later when we understand applications of this better. */ #define KWSYS_SYSTEM_SHELL_QUOTE_MAKE_VARIABLES 0 -bool cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int flags) +bool cmOutputConverter::Shell__ArgumentNeedsQuotes(cm::string_view in, + int flags) { /* The empty string needs quotes. */ - if (!*in) { + if (in.empty()) { return true; } /* Scan the string for characters that require quoting. */ - { - const char* c; - for (c = in; *c; ++c) { - /* Look for $(MAKEVAR) syntax if requested. */ - if (flags & Shell_Flag_AllowMakeVariables) { + for (cm::string_view::iterator cit = in.begin(), cend = in.end(); + cit != cend; ++cit) { + /* Look for $(MAKEVAR) syntax if requested. */ + if (flags & Shell_Flag_AllowMakeVariables) { #if KWSYS_SYSTEM_SHELL_QUOTE_MAKE_VARIABLES - const char* skip = Shell__SkipMakeVariables(c); - if (skip != c) { - /* We need to quote make variable references to preserve the - string with contents substituted in its place. */ - return true; - } + cm::string_view::iterator skip = Shell__SkipMakeVariables(cit, cend); + if (skip != cit) { + /* We need to quote make variable references to preserve the + string with contents substituted in its place. */ + return true; + } #else - /* Skip over the make variable references if any are present. */ - c = Shell__SkipMakeVariables(c); + /* Skip over the make variable references if any are present. */ + cit = Shell__SkipMakeVariables(cit, cend); - /* Stop if we have reached the end of the string. */ - if (!*c) { - break; - } -#endif + /* Stop if we have reached the end of the string. */ + if (cit == cend) { + break; } +#endif + } - /* Check whether this character needs quotes. */ - if (Shell__CharNeedsQuotes(*c, flags)) { - return true; - } + /* Check whether this character needs quotes. */ + if (Shell__CharNeedsQuotes(*cit, flags)) { + return true; } } /* On Windows some single character arguments need quotes. */ - if (flags & Shell_Flag_IsUnix && *in && !*(in + 1)) { - char c = *in; + if (flags & Shell_Flag_IsUnix && in.size() == 1) { + char c = in[0]; if ((c == '?') || (c == '&') || (c == '^') || (c == '|') || (c == '#')) { return true; } @@ -358,14 +357,12 @@ bool cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int flags) return false; } -std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) +std::string cmOutputConverter::Shell__GetArgument(cm::string_view in, + int flags) { /* Output will be at least as long as input string. */ std::string out; - out.reserve(strlen(in)); - - /* String iterator. */ - const char* c; + out.reserve(in.size()); /* Keep track of how many backslashes have been encountered in a row. */ int windows_backslashes = 0; @@ -385,14 +382,15 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) } /* Scan the string for characters that require escaping or quoting. */ - for (c = in; *c; ++c) { + for (cm::string_view::iterator cit = in.begin(), cend = in.end(); + cit != cend; ++cit) { /* Look for $(MAKEVAR) syntax if requested. */ if (flags & Shell_Flag_AllowMakeVariables) { - const char* skip = Shell__SkipMakeVariables(c); - if (skip != c) { + cm::string_view::iterator skip = Shell__SkipMakeVariables(cit, cend); + if (skip != cit) { /* Copy to the end of the make variable references. */ - while (c != skip) { - out += *c++; + while (cit != skip) { + out += *cit++; } /* The make variable reference eliminates any escaping needed @@ -400,7 +398,7 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) windows_backslashes = 0; /* Stop if we have reached the end of the string. */ - if (!*c) { + if (cit == cend) { break; } } @@ -410,7 +408,7 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) if (flags & Shell_Flag_IsUnix) { /* On Unix a few special characters need escaping even inside a quoted argument. */ - if (*c == '\\' || *c == '"' || *c == '`' || *c == '$') { + if (*cit == '\\' || *cit == '"' || *cit == '`' || *cit == '$') { /* This character needs a backslash to escape it. */ out += '\\'; } @@ -418,10 +416,10 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) /* On Windows the built-in command shell echo never needs escaping. */ } else { /* On Windows only backslashes and double-quotes need escaping. */ - if (*c == '\\') { + if (*cit == '\\') { /* Found a backslash. It may need to be escaped later. */ ++windows_backslashes; - } else if (*c == '"') { + } else if (*cit == '"') { /* Found a double-quote. Escape all immediately preceding backslashes. */ while (windows_backslashes > 0) { @@ -439,7 +437,7 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) } /* Check whether this character needs escaping for a make tool. */ - if (*c == '$') { + if (*cit == '$') { if (flags & Shell_Flag_Make) { /* In Makefiles a dollar is written $$. The make tool will replace it with just $ before passing it to the shell. */ @@ -456,7 +454,7 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) /* Otherwise a dollar is written just $. */ out += '$'; } - } else if (*c == '#') { + } else if (*cit == '#') { if ((flags & Shell_Flag_Make) && (flags & Shell_Flag_WatcomWMake)) { /* In Watcom WMake makefiles a pound is written $#. The make tool will replace it with just # before passing it to the @@ -466,7 +464,7 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) /* Otherwise a pound is written just #. */ out += '#'; } - } else if (*c == '%') { + } else if (*cit == '%') { if ((flags & Shell_Flag_VSIDE) || ((flags & Shell_Flag_Make) && ((flags & Shell_Flag_MinGWMake) || (flags & Shell_Flag_NMake)))) { @@ -476,7 +474,7 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) /* Otherwise a percent is written just %. */ out += '%'; } - } else if (*c == ';') { + } else if (*cit == ';') { if (flags & Shell_Flag_VSIDE) { /* In a VS IDE a semicolon is written ";". If this is written in an un-quoted argument it starts a quoted segment, @@ -490,7 +488,7 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) } } else { /* Store this character. */ - out += *c; + out += *cit; } } diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index 0d24929..671efe7 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -23,7 +23,7 @@ public: WATCOMQUOTE, RESPONSE }; - std::string ConvertToOutputFormat(const std::string& source, + std::string ConvertToOutputFormat(cm::string_view source, OutputFormat output) const; std::string ConvertDirectorySeparatorsForShell(cm::string_view source) const; @@ -72,7 +72,7 @@ public: Shell_Flag_IsUnix = (1 << 8) }; - std::string EscapeForShell(const std::string& str, bool makeVars = false, + std::string EscapeForShell(cm::string_view str, bool makeVars = false, bool forEcho = false, bool useWatcomQuote = false) const; @@ -80,7 +80,7 @@ public: /** Compute an escaped version of the given argument for use in a windows shell. */ - static std::string EscapeWindowsShellArgument(const char* arg, + static std::string EscapeWindowsShellArgument(cm::string_view arg, int shell_flags); enum FortranFormat @@ -96,9 +96,10 @@ private: cmState* GetState() const; static bool Shell__CharNeedsQuotes(char c, int flags); - static const char* Shell__SkipMakeVariables(const char* c); - static bool Shell__ArgumentNeedsQuotes(const char* in, int flags); - static std::string Shell__GetArgument(const char* in, int flags); + static cm::string_view::iterator Shell__SkipMakeVariables( + cm::string_view::iterator begin, cm::string_view::iterator end); + static bool Shell__ArgumentNeedsQuotes(cm::string_view in, int flags); + static std::string Shell__GetArgument(cm::string_view in, int flags); private: cmStateSnapshot StateSnapshot; https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8573e20c43af4e0313a001f4fbc325ab5a899e3d commit 8573e20c43af4e0313a001f4fbc325ab5a899e3d Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 16:33:47 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:47:26 2019 +0200 cmOutputConverter: Let GetFortranFormat accept a cm::string_view diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index fd64cf5..32410f4 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -150,13 +150,11 @@ std::string cmOutputConverter::EscapeWindowsShellArgument(const char* arg, } cmOutputConverter::FortranFormat cmOutputConverter::GetFortranFormat( - const char* value) + cm::string_view value) { FortranFormat format = FortranFormatNone; - if (value && *value) { - std::vector<std::string> fmt; - cmSystemTools::ExpandListArgument(value, fmt); - for (std::string const& fi : fmt) { + if (!value.empty()) { + for (std::string const& fi : cmSystemTools::ExpandedListArgument(value)) { if (fi == "FIXED") { format = FortranFormatFixed; } @@ -168,6 +166,15 @@ cmOutputConverter::FortranFormat cmOutputConverter::GetFortranFormat( return format; } +cmOutputConverter::FortranFormat cmOutputConverter::GetFortranFormat( + const char* value) +{ + if (!value) { + return FortranFormatNone; + } + return GetFortranFormat(cm::string_view(value)); +} + void cmOutputConverter::SetLinkScriptShell(bool linkScriptShell) { this->LinkScriptShell = linkScriptShell; diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index abd02aa..0d24929 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -89,6 +89,7 @@ public: FortranFormatFixed, FortranFormatFree }; + static FortranFormat GetFortranFormat(cm::string_view value); static FortranFormat GetFortranFormat(const char* value); private: https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=49117623581f8f154adcf92820dce48a4dfbe71d commit 49117623581f8f154adcf92820dce48a4dfbe71d Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 15:13:38 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:47:26 2019 +0200 cmOutputConverter: Return bool instead of int in utility functions diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index bd5dffe..fd64cf5 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -213,12 +213,12 @@ use the caret character itself (^), use two in a row (^^). */ /* Some helpers to identify character classes */ -static int Shell__CharIsWhitespace(char c) +static bool Shell__CharIsWhitespace(char c) { return ((c == ' ') || (c == '\t')); } -static int Shell__CharNeedsQuotesOnUnix(char c) +static bool Shell__CharNeedsQuotesOnUnix(char c) { return ((c == '\'') || (c == '`') || (c == ';') || (c == '#') || (c == '&') || (c == '$') || (c == '(') || (c == ')') || (c == '~') || @@ -226,41 +226,41 @@ static int Shell__CharNeedsQuotesOnUnix(char c) (c == '\\')); } -static int Shell__CharNeedsQuotesOnWindows(char c) +static bool Shell__CharNeedsQuotesOnWindows(char c) { return ((c == '\'') || (c == '#') || (c == '&') || (c == '<') || (c == '>') || (c == '|') || (c == '^')); } -static int Shell__CharIsMakeVariableName(char c) +static bool Shell__CharIsMakeVariableName(char c) { return c && (c == '_' || isalpha((static_cast<int>(c)))); } -int cmOutputConverter::Shell__CharNeedsQuotes(char c, int flags) +bool cmOutputConverter::Shell__CharNeedsQuotes(char c, int flags) { /* On Windows the built-in command shell echo never needs quotes. */ if (!(flags & Shell_Flag_IsUnix) && (flags & Shell_Flag_EchoWindows)) { - return 0; + return false; } /* On all platforms quotes are needed to preserve whitespace. */ if (Shell__CharIsWhitespace(c)) { - return 1; + return true; } if (flags & Shell_Flag_IsUnix) { /* On UNIX several special characters need quotes to preserve them. */ if (Shell__CharNeedsQuotesOnUnix(c)) { - return 1; + return true; } } else { /* On Windows several special characters need quotes to preserve them. */ if (Shell__CharNeedsQuotesOnWindows(c)) { - return 1; + return true; } } - return 0; + return false; } const char* cmOutputConverter::Shell__SkipMakeVariables(const char* c) @@ -302,11 +302,11 @@ flag later when we understand applications of this better. */ #define KWSYS_SYSTEM_SHELL_QUOTE_MAKE_VARIABLES 0 -int cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int flags) +bool cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int flags) { /* The empty string needs quotes. */ if (!*in) { - return 1; + return true; } /* Scan the string for characters that require quoting. */ @@ -320,7 +320,7 @@ int cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int flags) if (skip != c) { /* We need to quote make variable references to preserve the string with contents substituted in its place. */ - return 1; + return true; } #else /* Skip over the make variable references if any are present. */ @@ -335,7 +335,7 @@ int cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int flags) /* Check whether this character needs quotes. */ if (Shell__CharNeedsQuotes(*c, flags)) { - return 1; + return true; } } } @@ -344,11 +344,11 @@ int cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int flags) if (flags & Shell_Flag_IsUnix && *in && !*(in + 1)) { char c = *in; if ((c == '?') || (c == '&') || (c == '^') || (c == '|') || (c == '#')) { - return 1; + return true; } } - return 0; + return false; } std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index 988911d..abd02aa 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -94,9 +94,9 @@ public: private: cmState* GetState() const; - static int Shell__CharNeedsQuotes(char c, int flags); + static bool Shell__CharNeedsQuotes(char c, int flags); static const char* Shell__SkipMakeVariables(const char* c); - static int Shell__ArgumentNeedsQuotes(const char* in, int flags); + static bool Shell__ArgumentNeedsQuotes(const char* in, int flags); static std::string Shell__GetArgument(const char* in, int flags); private: https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a929255dec9e46ccc27d7b44d000a2e568cbfd99 commit a929255dec9e46ccc27d7b44d000a2e568cbfd99 Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 14:44:05 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:47:26 2019 +0200 cmOutputConverter: Let cmOutputConverterIsShellOperator accept cm::string_view diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index 132fdeb..bd5dffe 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -53,9 +53,9 @@ std::string cmOutputConverter::ConvertToOutputFormat(const std::string& source, } std::string cmOutputConverter::ConvertDirectorySeparatorsForShell( - const std::string& source) const + cm::string_view source) const { - std::string result = source; + std::string result(source); // For the MSYS shell convert drive letters to posix paths, so // that c:/some/path becomes /c/some/path. This is needed to // avoid problems with the shell path translation. diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index fe39fe6..988911d 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -25,8 +25,7 @@ public: }; std::string ConvertToOutputFormat(const std::string& source, OutputFormat output) const; - std::string ConvertDirectorySeparatorsForShell( - const std::string& source) const; + std::string ConvertDirectorySeparatorsForShell(cm::string_view source) const; //! for existing files convert to output path and short path if spaces std::string ConvertToOutputForExisting(const std::string& remote, https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1b30b28c042660c37f24d11a804ea697ea8601ef commit 1b30b28c042660c37f24d11a804ea697ea8601ef Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 14:41:17 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:47:26 2019 +0200 cmOutputConverter: Let cmOutputConverterIsShellOperator accept cm::string_view diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index 55d9bd6..132fdeb 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -71,9 +71,9 @@ std::string cmOutputConverter::ConvertDirectorySeparatorsForShell( return result; } -static bool cmOutputConverterIsShellOperator(const std::string& str) +static bool cmOutputConverterIsShellOperator(cm::string_view str) { - static std::set<std::string> const shellOperators{ + static std::set<cm::string_view> const shellOperators{ "<", ">", "<<", ">>", "|", "||", "&&", "&>", "1>", "2>", "2>&1", "1>&2" }; return (shellOperators.count(str) != 0); https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6675f785bec2d777720abbdc062f514bd838b879 commit 6675f785bec2d777720abbdc062f514bd838b879 Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 14:39:03 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:47:26 2019 +0200 cmOutputConverter: Let EscapeForCMake accept a cm::string_view diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index d7bcf7e..55d9bd6 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -120,23 +120,23 @@ std::string cmOutputConverter::EscapeForShell(const std::string& str, return Shell__GetArgument(str.c_str(), flags); } -std::string cmOutputConverter::EscapeForCMake(const std::string& str) +std::string cmOutputConverter::EscapeForCMake(cm::string_view str) { // Always double-quote the argument to take care of most escapes. std::string result = "\""; - for (const char* c = str.c_str(); *c; ++c) { - if (*c == '"') { + for (const char c : str) { + if (c == '"') { // Escape the double quote to avoid ending the argument. result += "\\\""; - } else if (*c == '$') { + } else if (c == '$') { // Escape the dollar to avoid expanding variables. result += "\\$"; - } else if (*c == '\\') { + } else if (c == '\\') { // Escape the backslash to avoid other escapes. result += "\\\\"; } else { // Other characters will be parsed correctly. - result += *c; + result += c; } } result += "\""; diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index deca767..fe39fe6 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -5,9 +5,10 @@ #include "cmConfigure.h" // IWYU pragma: keep -#include <string> - #include "cmStateSnapshot.h" +#include "cm_string_view.hxx" + +#include <string> class cmState; @@ -76,7 +77,7 @@ public: bool forEcho = false, bool useWatcomQuote = false) const; - static std::string EscapeForCMake(const std::string& str); + static std::string EscapeForCMake(cm::string_view str); /** Compute an escaped version of the given argument for use in a windows shell. */ https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=09977c181641dd4feea8fc13bf718f0f9cfe05bb commit 09977c181641dd4feea8fc13bf718f0f9cfe05bb Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 16:07:39 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:47:26 2019 +0200 cmSystemTool: Let TrimWhitespace accept a cm::string_view diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index de68bf4..e0005a0 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -197,16 +197,16 @@ std::string cmSystemTools::HelpFileName(cm::string_view str) return name; } -std::string cmSystemTools::TrimWhitespace(const std::string& s) +std::string cmSystemTools::TrimWhitespace(cm::string_view str) { - std::string::const_iterator start = s.begin(); - while (start != s.end() && cm_isspace(*start)) { + auto start = str.begin(); + while (start != str.end() && cm_isspace(*start)) { ++start; } - if (start == s.end()) { - return ""; + if (start == str.end()) { + return std::string(); } - std::string::const_iterator stop = s.end() - 1; + auto stop = str.end() - 1; while (cm_isspace(*stop)) { --stop; } diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index 46eab57..ac1aa80 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -86,7 +86,7 @@ public: /** * Returns a string that has whitespace removed from the start and the end. */ - static std::string TrimWhitespace(const std::string& s); + static std::string TrimWhitespace(cm::string_view str); using MessageCallback = std::function<void(const std::string&, const char*)>; /** https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2f19e53705a6e60af37964c146a742d845f84870 commit 2f19e53705a6e60af37964c146a742d845f84870 Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 16:03:59 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:47:26 2019 +0200 cmSystemTool: Let HelpFileName accept a cm::string_view diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 3715cc6..de68bf4 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -189,8 +189,9 @@ std::string cmSystemTools::EscapeQuotes(cm::string_view str) return result; } -std::string cmSystemTools::HelpFileName(std::string name) +std::string cmSystemTools::HelpFileName(cm::string_view str) { + std::string name(str); cmSystemTools::ReplaceString(name, "<", ""); cmSystemTools::ReplaceString(name, ">", ""); return name; diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index 8b60dcd..46eab57 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -81,7 +81,7 @@ public: static std::string EscapeQuotes(cm::string_view str); /** Map help document name to file name. */ - static std::string HelpFileName(std::string); + static std::string HelpFileName(cm::string_view); /** * Returns a string that has whitespace removed from the start and the end. https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2c5454f227027552966519c40feb2732b37ec542 commit 2c5454f227027552966519c40feb2732b37ec542 Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 16:01:58 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:47:26 2019 +0200 cmSystemTool: Let EscapeQuotes accept a cm::string_view diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 1e9580c..3715cc6 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -176,15 +176,15 @@ void cmSystemTools::ExpandRegistryValues(std::string& source, } #endif -std::string cmSystemTools::EscapeQuotes(const std::string& str) +std::string cmSystemTools::EscapeQuotes(cm::string_view str) { std::string result; result.reserve(str.size()); - for (const char* ch = str.c_str(); *ch != '\0'; ++ch) { - if (*ch == '"') { + for (const char ch : str) { + if (ch == '"') { result += '\\'; } - result += *ch; + result += ch; } return result; } diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index 87f0a11..8b60dcd 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -78,7 +78,7 @@ public: KeyWOW64 view = KeyWOW64_Default); //! Escape quotes in a string. - static std::string EscapeQuotes(const std::string& str); + static std::string EscapeQuotes(cm::string_view str); /** Map help document name to file name. */ static std::string HelpFileName(std::string); https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ad3183db8cbc15d25b9326b5b479eba01e87f30a commit ad3183db8cbc15d25b9326b5b479eba01e87f30a Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Sun Jul 28 15:59:22 2019 +0200 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Sun Jul 28 17:47:26 2019 +0200 cmSystemTool: Let Expand(ed)ListArgument accept a cm::string_view diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 3ba3640..1e9580c 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -1121,7 +1121,7 @@ void cmSystemTools::GlobDirs(const std::string& path, } } -void cmSystemTools::ExpandListArgument(const std::string& arg, +void cmSystemTools::ExpandListArgument(cm::string_view arg, std::vector<std::string>& argsOut, bool emptyArgs) { @@ -1129,25 +1129,29 @@ void cmSystemTools::ExpandListArgument(const std::string& arg, if (!emptyArgs && arg.empty()) { return; } + // if there are no ; in the name then just copy the current string - if (arg.find(';') == std::string::npos) { - argsOut.push_back(arg); + if (arg.find(';') == cm::string_view::npos) { + argsOut.emplace_back(arg); return; } + std::string newArg; - const char* last = arg.c_str(); // Break the string at non-escaped semicolons not nested in []. int squareNesting = 0; - for (const char* c = last; *c; ++c) { + cm::string_view::iterator last = arg.begin(); + cm::string_view::iterator const cend = arg.end(); + for (cm::string_view::iterator c = last; c != cend; ++c) { switch (*c) { case '\\': { // We only want to allow escaping of semicolons. Other // escapes should not be processed here. - const char* next = c + 1; - if (*next == ';') { - newArg.append(last, c - last); + cm::string_view::iterator cnext = c + 1; + if ((cnext != cend) && *cnext == ';') { + newArg.append(last, c); // Skip over the escape character - last = c = next; + last = cnext; + c = cnext; } } break; case '[': { @@ -1160,7 +1164,7 @@ void cmSystemTools::ExpandListArgument(const std::string& arg, // Break the string here if we are not nested inside square // brackets. if (squareNesting == 0) { - newArg.append(last, c - last); + newArg.append(last, c); // Skip over the semicolon last = c + 1; if (!newArg.empty() || emptyArgs) { @@ -1175,15 +1179,15 @@ void cmSystemTools::ExpandListArgument(const std::string& arg, } break; } } - newArg.append(last); + newArg.append(last, cend); if (!newArg.empty() || emptyArgs) { // Add the last argument if the string is not empty. - argsOut.push_back(newArg); + argsOut.push_back(std::move(newArg)); } } std::vector<std::string> cmSystemTools::ExpandedListArgument( - const std::string& arg, bool emptyArgs) + cm::string_view arg, bool emptyArgs) { std::vector<std::string> argsOut; ExpandListArgument(arg, argsOut, emptyArgs); diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index 1962389..87f0a11 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -32,7 +32,7 @@ public: * Expand the ; separated string @a arg into multiple arguments. * All found arguments are appended to @a argsOut. */ - static void ExpandListArgument(const std::string& arg, + static void ExpandListArgument(cm::string_view arg, std::vector<std::string>& argsOut, bool emptyArgs = false); @@ -54,7 +54,7 @@ public: * Same as ExpandListArgument but a new vector is created containing * the expanded arguments from the string @a arg. */ - static std::vector<std::string> ExpandedListArgument(const std::string& arg, + static std::vector<std::string> ExpandedListArgument(cm::string_view arg, bool emptyArgs = false); /** ----------------------------------------------------------------------- Summary of changes: Source/cmOutputConverter.cxx | 175 ++++++++++++++++++++++--------------------- Source/cmOutputConverter.h | 26 ++++--- Source/cmSystemTools.cxx | 53 +++++++------ Source/cmSystemTools.h | 10 +-- 4 files changed, 138 insertions(+), 126 deletions(-) hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org https://cmake.org/mailman/listinfo/cmake-commits