1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include "process.ih"
void Process::execContext(String::SplitPair const &splitPair,
ExecContext &ec)
{
if (!ec.ok) // once a problem was detected, stop working
return;
switch (splitPair.second)
{
case String::DQUOTE_UNTERMINATED:
ec.message = "Unterminated double-quoted argument";
ec.ok = false;
break;
case String::SQUOTE_UNTERMINATED:
ec.message = "Unterminated single-quoted argument";
ec.ok = false;
break;
case String::ESCAPED_END:
ec.message = "Incomplete argument (ending in \\)";
ec.ok = false;
break;
case String::SEPARATOR:// doesn't happen, but prevents a compiler
break; // warning
case String::NORMAL:
case String::DQUOTE:
{
// allocated, and not deleted, but that's irrelevant,
// the arguments are used in the child process which is
// performing an exec() anyway.
string *sp = new string(String::unescape(splitPair.first));
ec.args[ec.argc++] = sp->c_str();
}
break;
case String::SQUOTE:
ec.args[ec.argc++] = splitPair.first.c_str();
break;
}
}
|