X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib_internal%2Fcommand-exec.c;h=d44b1ac03b1b75910fceefda92a9b178e6eeddd9;hb=245184e3863bc621fd6a318fa51da348c1ef86d9;hp=9f6b17afa48b3e6ba0160b868daf7ebcaaf83d17;hpb=2c1727f98a042cd7277d8dc1c42c6d902f81e15a;p=util-vserver.git diff --git a/util-vserver/lib_internal/command-exec.c b/util-vserver/lib_internal/command-exec.c index 9f6b17a..d44b1ac 100644 --- a/util-vserver/lib_internal/command-exec.c +++ b/util-vserver/lib_internal/command-exec.c @@ -21,6 +21,7 @@ #endif #include "command.h" +#include "util.h" #include #include @@ -39,7 +40,8 @@ Command_exec(struct Command *cmd, bool do_fork) { int p[2]; - Vector_zeroEnd(&cmd->params); + if (cmd->params_style_==parVEC) + Vector_zeroEnd(&cmd->params.v); if (!do_fork) cmd->pid = 0; @@ -50,10 +52,18 @@ Command_exec(struct Command *cmd, bool do_fork) } if (cmd->pid==0) { + char const ** argv = { 0 }; + if (do_fork) close(p[0]); - execv(cmd->filename ? cmd->filename : ((char **)(Vector_begin(&cmd->params)))[0], - cmd->params.data); + switch (cmd->params_style_) { + case parVEC : argv = cmd->params.v.data; break; + case parDATA : argv = cmd->params.d; break; + default : break; + } + + execv(cmd->filename ? cmd->filename : argv[0], + reinterpret_cast(char **const)(argv)); cmd->err = errno; assert(cmd->err != 0);