allow for | and & in exec

This commit is contained in:
zimoch
2015-04-09 13:42:42 +00:00
parent 80c116e001
commit 01950a5db4
+18 -3
View File
@@ -3,7 +3,7 @@
*
* $Author: zimoch $
* $ID$
* $Date: 2013/07/03 08:48:35 $
* $Date: 2015/04/09 13:42:42 $
*
* DISCLAIMER: Use at your own risc and so on. No warranty, no refund.
*/
@@ -43,10 +43,25 @@ static void execFunc (const iocshArgBuf *args)
fprintf(stderr, "missing command\n");
return;
}
p += sprintf(p, "\"%s\"", args[0].sval);
p += snprintf(p, sizeof(commandline), "\"%s\"", args[0].sval);
for (i = 1; i < args[1].aval.ac; i++)
{
p += sprintf(p, " \"%s\"", args[1].aval.av[i]);
if (p - commandline >= sizeof(commandline))
{
fprintf (stderr, "command line too long\n");
return;
}
if ((args[1].aval.av[i][0] == '|'
|| args[1].aval.av[i][0] == ';'
|| args[1].aval.av[i][0] == '&'
) && args[1].aval.av[i][1] == 0)
/* do not quote single | & ; */
p += snprintf(p, p - commandline + sizeof(commandline),
" %s", args[1].aval.av[i]);
else
/* quote words to protect special chars (e.g. spaces) */
p += snprintf(p, p - commandline + sizeof(commandline),
" \"%s\"", args[1].aval.av[i]);
}
status = system(commandline);
if (WIFSIGNALED(status))