summaryrefslogtreecommitdiffstats
path: root/otherlibs/unix/execvp.c
diff options
context:
space:
mode:
Diffstat (limited to 'otherlibs/unix/execvp.c')
-rw-r--r--otherlibs/unix/execvp.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/otherlibs/unix/execvp.c b/otherlibs/unix/execvp.c
index 579f08faa..870075bd9 100644
--- a/otherlibs/unix/execvp.c
+++ b/otherlibs/unix/execvp.c
@@ -13,9 +13,10 @@
#include <mlvalues.h>
#include <memory.h>
-#include "unix.h"
+#include "unixsupport.h"
extern char ** cstringvect();
+extern char ** environ;
value unix_execvp(path, args) /* ML */
value path, args;
@@ -29,3 +30,20 @@ value unix_execvp(path, args) /* ML */
/* from smart compilers */
}
+value unix_execvpe(path, args, env) /* ML */
+ value path, args, env;
+{
+ char ** argv;
+ char ** saved_environ;
+ argv = cstringvect(args);
+ saved_environ = environ;
+ environ = cstringvect(env);
+ (void) execvp(String_val(path), argv);
+ stat_free((char *) argv);
+ stat_free((char *) environ);
+ environ = saved_environ;
+ uerror("execvp", path);
+ return Val_unit; /* never reached, but suppress warnings */
+ /* from smart compilers */
+}
+