diff options
| author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2016-02-18 17:20:08 +0900 |
|---|---|---|
| committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2016-02-18 17:21:26 +0900 |
| commit | 348a960f31d42c63ec6fff68a27c5b161b59a89f (patch) | |
| tree | 867a4d5127635d88c9e9399ea7d774dd9d6f2340 /strutil.cc | |
| parent | 3deff5bf54db9c5d36b775beffadbae33381d1b1 (diff) | |
[C++] Handle multi-word SHELL in $(shell)
Diffstat (limited to 'strutil.cc')
| -rw-r--r-- | strutil.cc | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -521,3 +521,33 @@ string EchoEscape(const string str) { } return buf; } + +void EscapeShell(string* s) { + if (s->find_first_of("$`\\\"") == string::npos) + return; + string r; + bool last_dollar = false; + for (char c : *s) { + switch (c) { + case '$': + if (last_dollar) { + r += c; + last_dollar = false; + } else { + r += '\\'; + r += c; + last_dollar = true; + } + break; + case '`': + case '"': + case '\\': + r += '\\'; + // fall through. + default: + r += c; + last_dollar = false; + } + } + s->swap(r); +} |
