X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fruncmd.c;h=7f373877086137ed93822e24b39915c94ba72bc9;hb=4adf195fb2f36dfbd054745469fa1c580de2f61b;hp=df44f7d35ff9fa0cfb5b55af8346a69e7052a16b;hpb=81a17ab471944888106c70a719e99d6e6ba96f22;p=libucw.git diff --git a/lib/runcmd.c b/lib/runcmd.c index df44f7d3..7f373877 100644 --- a/lib/runcmd.c +++ b/lib/runcmd.c @@ -1,5 +1,5 @@ /* - * Sherlock Library -- Running of Commands + * UCW Library -- Running of Commands * * (c) 2004 Martin Mares * @@ -18,17 +18,20 @@ void NONRET exec_command_v(byte *cmd, va_list args) { - va_list cargs = args; + va_list cargs; + va_copy(cargs, args); int cnt = 2; byte *arg; while (arg = va_arg(cargs, byte *)) cnt++; + va_end(cargs); char **argv = alloca(sizeof(byte *) * cnt); argv[0] = cmd; cnt = 1; - cargs = args; + va_copy(cargs, args); while (arg = va_arg(cargs, byte *)) argv[cnt++] = arg; + va_end(cargs); argv[cnt] = NULL; execv(cmd, argv); byte echo[256]; @@ -72,7 +75,6 @@ echo_command_v(byte *buf, int size, byte *cmd, va_list args) byte *limit = buf + size - 4; byte *p = buf; byte *arg = cmd; - va_list cargs = args; do { int l = strlen(arg); @@ -87,7 +89,7 @@ echo_command_v(byte *buf, int size, byte *cmd, va_list args) memcpy(p, arg, l); p += l; } - while (arg = va_arg(cargs, byte *)); + while (arg = va_arg(args, byte *)); *p = 0; } @@ -117,3 +119,16 @@ echo_command(byte *buf, int len, byte *cmd, ...) echo_command_v(buf, len, cmd, args); va_end(args); } + +#ifdef TEST + +int main(void) +{ + byte msg[1024]; + echo_command(msg, sizeof(msg), "/bin/echo", "datel", "strakapoud", NULL); + log(L_INFO, "Running <%s>", msg); + run_command("/bin/echo", "datel", "strakapoud", NULL); + return 0; +} + +#endif