cmOutputConverter: Let EscapeForCMake accept a cm::string_view

This commit is contained in:
Sebastian Holtermann
2019-07-28 14:39:03 +02:00
parent 09977c1816
commit 6675f785be
2 changed files with 10 additions and 9 deletions

View File

@@ -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 += "\"";

View File

@@ -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. */