/*
- * Sherlock Library -- Running of Commands
+ * UCW Library -- Running of Commands
*
* (c) 2004 Martin Mares <mj@ucw.cz>
*
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];
byte *limit = buf + size - 4;
byte *p = buf;
byte *arg = cmd;
- va_list cargs = args;
do
{
int l = strlen(arg);
memcpy(p, arg, l);
p += l;
}
- while (arg = va_arg(cargs, byte *));
+ while (arg = va_arg(args, byte *));
*p = 0;
}
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