strndupa() is too arcane for some environments.
[tinc] / src / process.c
index 7500259..9194bed 100644 (file)
@@ -362,7 +362,7 @@ bool execute_script(const char *name, char **envp)
 #ifdef HAVE_SYSTEM
        int status, len;
        struct stat s;
 #ifdef HAVE_SYSTEM
        int status, len;
        struct stat s;
-       char *scriptname;
+       char *scriptname, *p;
        int i;
 
        cp();
        int i;
 
        cp();
@@ -400,8 +400,12 @@ bool execute_script(const char *name, char **envp)
 
        for(i = 0; envp[i]; i++) {
                char *e = strchr(envp[i], '=');
 
        for(i = 0; envp[i]; i++) {
                char *e = strchr(envp[i], '=');
-               if(e)
-                       putenv(strndupa(envp[i], e - envp[i]));
+               if(e) {
+                       p = alloca(e - envp[i] + 1);
+                       strncpy(p, envp[i], e - envp[i]);
+                       p[e - envp[i]] = '\0';
+                       putenv(p);
+               }
        }
 
 #ifdef WEXITSTATUS
        }
 
 #ifdef WEXITSTATUS