From a1cf086eb389780358e40bda1bb9ce798117c6f9 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 11 Oct 2015 17:41:20 +0300 Subject: [PATCH] os: Implement execvp(). --- os/os/__init__.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/os/os/__init__.py b/os/os/__init__.py index 2d52cc27..587bd269 100644 --- a/os/os/__init__.py +++ b/os/os/__init__.py @@ -47,6 +47,7 @@ _exit_ = libc.func("v", "_exit", "i") getpid_ = libc.func("i", "getpid", "") waitpid_ = libc.func("i", "waitpid", "ipi") system_ = libc.func("i", "system", "s") +execvp_ = libc.func("i", "execvp", "PP") getenv_ = libc.func("s", "getenv", "P") R_OK = const(4) @@ -211,6 +212,16 @@ def pipe(): def _exit(n): _exit_(n) +def execvp(f, args): + import uctypes + args_ = array.array("P", [0] * (len(args) + 1)) + i = 0 + for a in args: + args_[i] = uctypes.addressof(a) + i += 1 + r = execvp_(f, uctypes.addressof(args_)) + check_error(r) + def getpid(): return getpid_()