Merge branch 'master' of git://tinc-vpn.org/tinc into 1.1
[tinc] / src / tincctl.c
index a7f6185..4f06daa 100644 (file)
@@ -516,7 +516,7 @@ static bool remove_service(void) {
 }
 #endif
 
-int main(int argc, char *argv[], char *envp[]) {
+int main(int argc, char *argv[]) {
        int fd;
        int result;
        char host[128];
@@ -568,9 +568,26 @@ int main(int argc, char *argv[], char *envp[]) {
        }
 
        if(!strcasecmp(argv[optind], "start")) {
-               argv[optind] = NULL;
-               execve(SBINDIR "/tincd", argv, envp);
-               fprintf(stderr, "Could not start tincd: %s", strerror(errno));
+               int i, j;
+               char *c;
+               char *slash = strrchr(argv[0], '/');
+#ifdef HAVE_MINGW
+               if ((c = strrchr(argv[0], '\\')) > slash)
+                       slash = c;
+#endif
+               if (slash++) {
+                       c = xmalloc((slash - argv[0]) + sizeof("tincd"));
+                       sprintf(c, "%.*stincd", (int)(slash - argv[0]), argv[0]);
+               }
+               else
+                       c = "tincd";
+               argv[0] = c;
+               for(i = j = 1; argv[i]; ++i)
+                       if (i != optind && strcmp(argv[i], "--") != 0)
+                               argv[j++] = argv[i];
+               argv[j] = NULL;
+               execvp(c, argv);
+               fprintf(stderr, "Could not start %s: %s\n", c, strerror(errno));
                return 1;
        }