diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2019-09-13 20:57:00 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2019-09-27 17:08:05 +0300 |
commit | 3fa1b103014bab51f8f257e1e12f27f7e498f42e (patch) | |
tree | 4958c20dead025ffa0305dd0c99041382bda16a8 /libbutl/command.cxx | |
parent | c4292d57e2e67dfcdac9004f8edb229976f6669a (diff) |
Add support for builtin escaping to command running API
Diffstat (limited to 'libbutl/command.cxx')
-rw-r--r-- | libbutl/command.cxx | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/libbutl/command.cxx b/libbutl/command.cxx index a344790..1126bb0 100644 --- a/libbutl/command.cxx +++ b/libbutl/command.cxx @@ -272,11 +272,21 @@ namespace butl } else // Execute the program. { + // Strip the potential leading `^`, indicating that this is an external + // program rather than a builtin. Consider only simple paths and don't + // end up with an empty path. + // + const char* p (prog.size () > 1 && + prog[0] == '^' && + path::traits_type::find_separator (prog) == string::npos + ? prog.c_str () + 1 + : prog.c_str ()); + // Prepare the process environment. // // Note: cwd passed to process_env() may not be a temporary object. // - process_env pe (prog, cwd, env ? env->vars : nullptr); + process_env pe (p, cwd, env ? env->vars : nullptr); // Finally, run the process. // |