Improve subprocess behavior in tinc start command.
authorEtienne Dechamps <etienne@edechamps.fr>
Sat, 12 Jul 2014 17:53:25 +0000 (18:53 +0100)
committerEtienne Dechamps <etienne@edechamps.fr>
Sat, 12 Jul 2014 17:57:20 +0000 (18:57 +0100)
When invoking tincd, tinc start currently uses the execvp() function,
which doesn't behave well in a console as the console displays a new
prompt before the subprocess finishes (which makes me suspect the exit
value is not handled at all). This new code uses spawnvp() instead,
which seems like a better fit.

src/tincctl.c

index 12cffebc1251015f0eb387e2a2dfee8a3dffb325..f4379b7f8ebbe6dce5de0cdb42f5321e47d4599b 100644 (file)
@@ -829,9 +829,12 @@ static int cmd_start(int argc, char *argv[]) {
                nargv[nargc++] = argv[i];
 
 #ifdef HAVE_MINGW
-       execvp(c, nargv);
-       fprintf(stderr, "Error starting %s: %s\n", c, strerror(errno));
-       return 1;
+       int status = spawnvp(_P_WAIT, c, nargv);
+       if (status == -1) {
+               fprintf(stderr, "Error starting %s: %s\n", c, strerror(errno));
+               return 1;
+       }
+       return status;
 #else
        pid_t pid = fork();
        if(pid == -1) {