Changed: Implement escapeArgument function
--HG-- branch : develop
This commit is contained in:
parent
93c2f55290
commit
3e4a873429
2 changed files with 38 additions and 0 deletions
|
@ -394,6 +394,9 @@ std::string expandEnvironmentVariables(const std::string &s);
|
||||||
bool explodeArguments(const std::string &str, std::vector<std::string> &args);
|
bool explodeArguments(const std::string &str, std::vector<std::string> &args);
|
||||||
std::string joinArguments(const std::vector<std::string> &args);
|
std::string joinArguments(const std::vector<std::string> &args);
|
||||||
|
|
||||||
|
/// Escape an argument to not evaluate environment variables or special cases
|
||||||
|
std::string escapeArgument(const std::string &arg);
|
||||||
|
|
||||||
/// This function kills a program using his pid (on unix, it uses the kill() POSIX function)
|
/// This function kills a program using his pid (on unix, it uses the kill() POSIX function)
|
||||||
bool killProgram(uint32 pid);
|
bool killProgram(uint32 pid);
|
||||||
|
|
||||||
|
|
|
@ -1247,6 +1247,41 @@ std::string joinArguments(const std::vector<std::string> &args)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string escapeArgument(const std::string &arg)
|
||||||
|
{
|
||||||
|
#ifdef NL_OS_WINDOWS
|
||||||
|
// we can't escape %VARIABLE% on command-line under Windows
|
||||||
|
return arg;
|
||||||
|
#else
|
||||||
|
// characters to escapce, only " and $ (to prevent a $something replaced by an environment variable)
|
||||||
|
static const char s_charsToEscape[] = "\"$";
|
||||||
|
|
||||||
|
std::string res;
|
||||||
|
std::string::size_type pos = 0, lastPos = 0;
|
||||||
|
|
||||||
|
// to avoid reallocations
|
||||||
|
res.reserve(arg.size() * 2);
|
||||||
|
|
||||||
|
while ((pos = arg.find_first_of(s_charsToEscape, lastPos)) != std::string::npos)
|
||||||
|
{
|
||||||
|
// add previous part
|
||||||
|
res += arg.substr(lastPos, pos - lastPos);
|
||||||
|
|
||||||
|
// not already escaped
|
||||||
|
if (!pos || arg[pos - 1] != '\\') res += '\\';
|
||||||
|
|
||||||
|
// add escaped character
|
||||||
|
res += arg[pos];
|
||||||
|
|
||||||
|
lastPos = pos+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
res += arg.substr(lastPos);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Display the bits (with 0 and 1) composing a byte (from right to left)
|
* Display the bits (with 0 and 1) composing a byte (from right to left)
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue