]> mj.ucw.cz Git - libucw.git/blobdiff - lib/runcmd.c
Merge with git+ssh://cvs.ucw.cz/projects/sherlock/GIT/sherlock.git
[libucw.git] / lib / runcmd.c
index df44f7d35ff9fa0cfb5b55af8346a69e7052a16b..7f373877086137ed93822e24b39915c94ba72bc9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *     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];
@@ -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