summaryrefslogtreecommitdiffstats
path: root/src/util.h
diff options
context:
space:
mode:
authorNicholas Hutchinson <nshutchinson@gmail.com>2013-11-30 22:33:02 (GMT)
committerNicholas Hutchinson <nshutchinson@gmail.com>2014-01-06 19:30:28 (GMT)
commit664edba804ddd5363299f2af5183109bdc9715b1 (patch)
treec50e267ade56530904676f103905d4a8a2ba3ba0 /src/util.h
parent2517b75781decd49bc82f05f8336c509f7b2c62e (diff)
downloadNinja-664edba804ddd5363299f2af5183109bdc9715b1.zip
Ninja-664edba804ddd5363299f2af5183109bdc9715b1.tar.gz
Ninja-664edba804ddd5363299f2af5183109bdc9715b1.tar.bz2
More robust escaping of $in, $out paths
In summary: don’t escape if the path doesn’t contain problematic characters, otherwise: - Shell: enclose string in single quotes, escape embedded single quotes with the magic quote-backslash-quote sequence - Win32: Escape double quotes by doubling the number of consecutive backslashes that precede them (if any) and adding one more. Finally, double the number of trailing backslashes, and enclose the whole thing in double quotes.
Diffstat (limited to 'src/util.h')
-rw-r--r--src/util.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/util.h b/src/util.h
index 6788410..7101770 100644
--- a/src/util.h
+++ b/src/util.h
@@ -45,6 +45,13 @@ bool CanonicalizePath(string* path, string* err);
bool CanonicalizePath(char* path, size_t* len, string* err);
+/// Appends |input| to |*result|, escaping according to the whims of either
+/// Bash, or Win32's CommandLineToArgvW().
+/// Appends the string directly to |result| without modification if we can
+/// determine that it contains no problematic characters.
+void GetShellEscapedString(const string& input, string* result);
+void GetWin32EscapedString(const string& input, string* result);
+
/// Read a file to a string (in text mode: with CRLF conversion
/// on Windows).
/// Returns -errno and fills in \a err on error.