]> mj.ucw.cz Git - libucw.git/blobdiff - lib/runcmd.c
Fixed bug in joining.
[libucw.git] / lib / runcmd.c
index c7fe85c47502e57404469c1b728c8ee12c78123e..7f373877086137ed93822e24b39915c94ba72bc9 100644 (file)
 void NONRET
 exec_command_v(byte *cmd, va_list args)
 {
 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++;
   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;
   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;
   while (arg = va_arg(cargs, byte *))
     argv[cnt++] = arg;
+  va_end(cargs);
   argv[cnt] = NULL;
   execv(cmd, argv);
   byte echo[256];
   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;
   byte *limit = buf + size - 4;
   byte *p = buf;
   byte *arg = cmd;
-  va_list cargs = args;
   do
     {
       int l = strlen(arg);
   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;
     }
       memcpy(p, arg, l);
       p += l;
     }
-  while (arg = va_arg(cargs, byte *));
+  while (arg = va_arg(args, byte *));
   *p = 0;
 }
 
   *p = 0;
 }