aboutsummaryrefslogtreecommitdiff
path: root/lib/std/process.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2020-12-28 01:08:12 +0200
committerGitHub <noreply@github.com>2020-12-28 01:08:12 +0200
commit3fb0288d87b1142bd3d416b0a6df7aa32dd7a943 (patch)
treec2c6161d39f88360a189c7c3ac8e419a0bbf4432 /lib/std/process.zig
parentdd86e9d78cedf2c8505d18311e1978b0579e8e67 (diff)
parent8000262e07d00b996dfcd07ab6c26c5db28f42d9 (diff)
downloadzig-3fb0288d87b1142bd3d416b0a6df7aa32dd7a943.tar.gz
zig-3fb0288d87b1142bd3d416b0a6df7aa32dd7a943.zip
Merge pull request #7563 from ifreund/alloc-sent-cleanup
std: add test for createNullDelimitedEnvMap(), clean up sentinel handling for argv/environ
Diffstat (limited to 'lib/std/process.zig')
-rw-r--r--lib/std/process.zig13
1 files changed, 3 insertions, 10 deletions
diff --git a/lib/std/process.zig b/lib/std/process.zig
index 909b337f89..275c8bc77b 100644
--- a/lib/std/process.zig
+++ b/lib/std/process.zig
@@ -816,15 +816,8 @@ pub fn execve(
defer arena_allocator.deinit();
const arena = &arena_allocator.allocator;
- const argv_buf = try arena.alloc(?[*:0]u8, argv.len + 1);
- for (argv) |arg, i| {
- const arg_buf = try arena.alloc(u8, arg.len + 1);
- @memcpy(arg_buf.ptr, arg.ptr, arg.len);
- arg_buf[arg.len] = 0;
- argv_buf[i] = arg_buf[0..arg.len :0].ptr;
- }
- argv_buf[argv.len] = null;
- const argv_ptr = argv_buf[0..argv.len :null].ptr;
+ const argv_buf = try arena.allocSentinel(?[*:0]u8, argv.len, null);
+ for (argv) |arg, i| argv_buf[i] = (try arena.dupeZ(u8, arg)).ptr;
const envp = m: {
if (env_map) |m| {
@@ -842,5 +835,5 @@ pub fn execve(
}
};
- return os.execvpeZ_expandArg0(.no_expand, argv_buf.ptr[0].?, argv_ptr, envp);
+ return os.execvpeZ_expandArg0(.no_expand, argv_buf.ptr[0].?, argv_buf.ptr, envp);
}